Sissejuhatus pildiliste andmete töötlusse ja analüüsi 2.

Maskid

Maskid on selleks, et mingi osa pildist kinni katta.

pilt = imageio.imread(kataloog + 'image.jpg')

# seperate the row and column values  
total_row , total_col , layers = pilt.shape  
''' Create vector.
Ogrid is a compact method of creating a multidimensional
ndarray operations in single lines.     
for ex:     
>>> ogrid[0:5,0:5]     
output: [array([[0],
                [1],
                [2],
                [3],
                [4]]),
         array([[0, 1, 2, 3, 4]])]  
''' 
x , y = np.ogrid[:total_row , :total_col]  
# get the center values of the image 
cen_x , cen_y = total_row/2 , total_col/2  
'''    
 Measure distance value from center to each border pixel.
 To make it easy, we can think it's like, we draw a line from center-
 to each edge pixel value --> s**2 = (Y-y)**2 + (X-x)**2  
''' 
distance_from_the_center = np.sqrt((x-cen_x)**2 + (y-cen_y)**2)

radius = (total_row/2)  # Arvutame raadiuse
# Using logical operator '>'  
# logical operator to do this task which will return as a value
# of True for all the index according to the given condition. 
ymmargune_pilt = distance_from_the_center > radius  
 
pilt[ymmargune_pilt] = 0 # maski värv 0-255
#plt.figure(figsize = (5,5)) 
plt.imshow(pilt)  
plt.show()

Filtreerimine

Näiteks filtreerime välja pikslid mille väärtus on suurem, kui 200. Ja värvime need mustaks (anname väärtuse 0).

pilt = imageio.imread(kataloog +'image.jpg') 
valitud_pikslid = pilt > 200 #  

pilt[valitud_pikslid] = 0 # uue väärtuse andmine
plt.imshow(pilt) 
plt.show()

Maskide ja filtreerimise näide

nimi = 'katsekeha1.jpg'
pilt = imageio.imread(kataloog + nimi)

plt.title('Originaal pilt') 
plt.imshow(pilt)
plt.show()

Kuva ainult punased pikslid mille väärtus on väiksem, kui 235:

pilt = imageio.imread(kataloog + nimi)
red_mask = pilt[:, :, 0] > 235
pilt[red_mask] = 0 # Maski toon: 0 must, 255 valge
plt.imshow(pilt)

Ainult rohelised pikslid mille väärtus väiksem, kui 220:

pilt = imageio.imread(kataloog + nimi)
green_mask = pilt[:, :, 1] > 225
pilt[green_mask] = 0 # Maski toon: 0 must, 255 valge
plt.imshow(pilt)

Ainult sinised pikslid, mille väärtus väiksem, kui 200:

pilt = imageio.imread(kataloog + nimi)
blue_mask = pilt[:, :, 2] > 210
pilt[blue_mask] = 0
plt.imshow(pilt)

Pilt, kus on kõik kolm maski ühendatud:

pilt = imageio.imread(kataloog + nimi)
final_mask = np.logical_and(red_mask, green_mask, blue_mask)
pilt[final_mask] = 0 # Maski toon: 0 must, 255 valge
plt.imshow(pilt)

Histogram

Histogrammi saame kasutada, et näidada mingi värvitooni esinemissagedust pildil.

  • Histogram näitab värvitooni intensiivsuse jaotumist pildil.
  • Histogram näitab, kui palju mingi intensiivsusega piksleid on.
import cv2
import numpy as np
from matplotlib import pyplot as plt

kataloog = 'https://raw.githubusercontent.com/taunoe/jupyter-notebooks/main/Pildi-anal%C3%BC%C3%BCs/images/'
hall_img = imageio.imread(kataloog + 'image_hall.jpg')

hist,bins = np.histogram(hall_img, 256,[0,256])
plt.hist(hall_img.ravel(),256,[0,256])
plt.title('Hall toonides pildi histogramm')
plt.ylabel('Pikslite hulk')
plt.xlabel('Värvi väärtus')
plt.show()

Värvilise pildi RGB toonide histogram:

img = imageio.imread(kataloog + 'image.jpg')
plt.imshow(img)
plt.show()

color = ('b','g','r')
for channel,col in enumerate(color):
    histr = cv2.calcHist([img],[channel],None,[256],[0,256])
    plt.plot(histr,color = col)
    plt.xlim([0,256])
plt.title('RGB histogramm')
plt.ylabel('Pikslite hulk')
plt.xlabel('Värvi väärtus')
plt.show()

Lingid

1 Comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.