Teorie bodovych mnozin, binarni transformace, posunuti, dilatace, eroze, otevreni(e+d), uzavreni(d+e), strukturni element, odstraneni sumu, malych objektu, zdurazneni struktury, popis objektu, otevreni a uzavreni je idempotentni.
Strukturni element - stejna vlastnost pro ruzne smery = izotropie
dilatace - zaplneni der a zalivu, kumutativni, asociatiovni, invariantni k posunuti
eroze - zmizi male objekty, objekty se zmensi o 1 slupku, odecteni od puvodniho obrazu ->obrysy, invariantni k posunuti
otevreni - oddeli objekty spojene uzkou siji, odstrani male detaily = E+D
uzavreni - spoji blizke objekty, zaplni mle diry a uzke zalivy = D+E
skelet - mnozina stredu kruznic, ktere jsou obsazeny v Y a dotykaji se Y alespon ve 2 bodech, lze vytvorit pomoci erozi a dilataci
https://github.com/mjirik/ZDO/blob/master/objekty/artificial/morph_example.png
import skimage
import skimage.io
import skimage.color
import skimage.morphology
import matplotlib.pyplot as plt
import numpy as np
import scipy
import scipy.ndimage
# thresholding - prahování
text_color = skimage.io.imread('studentfuture.png')
text_gray = skimage.color.rgb2gray(text_color)
plt.imshow(text_gray, cmap = 'gray')
plt.show()
textb = text_gray*255 > 245
plt.imshow(textb, cmap = 'gray')
plt.show()
def dilatace(imageB, size):
im2 = []
return im2
def eroze(imageB, size):
im2 = []
return im2
def otevreni(imageB, size):
el = np.ones((size,size))
img2 = imageB
img2 = eroze(img2, size)
img2 = dilatace(img2, size)
return img2
def uzavreni(imageB, size):
el = np.ones((size,size))
img2 = imageB
img2 = dilatace(img2, size)
img2 = eroze(img2, size)
return img2
dilatace1 = dilatace(textb, 3)
plt.imshow(dilatace1, cmap = 'gray')
plt.show()
dilatace2 = dilatace(textb, 5)
plt.imshow(dilatace2, cmap = 'gray')
plt.show()
dilatace3 = dilatace(textb, 7)
plt.imshow(dilatace3, cmap = 'gray')
plt.show()
size = 3
kernel = np.ones((size,size))
dilatace4 = skimage.morphology.binary_dilation(textb, kernel)
plt.imshow(dilatace4, cmap = 'gray')
plt.show()
kernel = skimage.morphology.diamond(1).astype(np.uint8)
print(kernel)
dilatace5 = skimage.morphology.binary_dilation(textb, kernel)
plt.imshow(dilatace5, cmap = 'gray')
plt.show()
[[0 1 0] [1 1 1] [0 1 0]]
eroze1 = eroze(textb, 3)
plt.imshow(eroze1, cmap = 'gray')
plt.show()
eroze2 = eroze(textb, 5)
plt.imshow(eroze2, cmap = 'gray')
plt.show()
eroze3 = eroze(textb, 7)
plt.imshow(eroze3, cmap = 'gray')
plt.show()
size = 3
kernel = np.ones((size,size))
erosion4 = skimage.morphology.binary_erosion(textb, kernel)
plt.imshow(erosion4, cmap = 'gray')
plt.show()
obrys = textb^erosion4
plt.imshow(obrys, cmap = 'gray')
plt.show()
otevreni1 = otevreni(textb, 3)
plt.imshow(otevreni1, cmap = 'gray')
plt.show()
uzavreni1 = uzavreni(textb, 3)
plt.imshow(uzavreni1, cmap = 'gray')
plt.show()
skeleton = skimage.morphology.skeletonize(textb)
plt.imshow(skeleton, cmap = 'gray')
plt.show()
head_color = skimage.io.imread('http://www.kky.zcu.cz/uploads/courses/zdo/lesson5/original.jpg')
head_gray = skimage.color.rgb2gray(head_color)
headb = head_gray > 0.5
plt.imshow(headb, cmap='gray')
plt.show()
skeleton = skimage.morphology.skeletonize(headb)
plt.imshow(skeleton, cmap = 'gray')
plt.show()
headh = scipy.ndimage.morphology.binary_fill_holes(headb)
plt.imshow(headh, cmap='gray')
plt.show()
size = 3
kernel = np.ones((size,size))
erosion5 = skimage.morphology.binary_erosion(headb, kernel)
plt.imshow(erosion5, cmap = 'gray')
plt.show()
headh = scipy.ndimage.morphology.binary_fill_holes(erosion5)
plt.imshow(headh, cmap='gray')
plt.show()
image_label_overlay = skimage.color.label2rgb(skimage.measure.label(headh), image=headh)
plt.imshow(image_label_overlay)
print ("Pocet pismen je:", skimage.measure.label(headh).max()-1)
Pocet pismen je: 4
Cviceni, oddelte nasledujici ctverce od sebe spoctete kolik jich tam je.
https://github.com/mjirik/ZDO/blob/master/objekty/artificial/Moprh_rectangles.png
https://github.com/mjirik/ZDO/blob/master/objekty/pocitani_ctvercu.jpg