Morphology

Kategori: Computer Vision , 23 Ocak 2020 , JanFranco


Morjolojik işlemler temel olarak binary image + kernel sonucunu hesaplar. Aradaki + sembolü aslında pixel toplamları değil convolution işlemidir. Bir çok morfolojik yöntem olsa da bizim için 5 önemli yöntem vardır: Erosion, Dilotion, Opening, Closing, Morphological Gradient. Hepsini tek tek göreceğiz. İlk olarak kütüphaneleri import edelim ve siyah bir arkaplan üzerinde beyaz text oluşturalım:


import cv2
import numpy as np

img = np.zeros((600, 600))
cv2.putText(img, "JAN", (150, 350), cv2.FONT_HERSHEY_SIMPLEX, 5, 255, 25)
cv2.imshow("Black background", img)
cv2.waitKey(0)
>>

Morphology

5x5 boyutunda her elemanı 1 olan bir matris oluşturalım. Bu matrise artık kernel diyeceğiz. Diğer kaynaklarda structure diye de geçer. Bu kernel resim üzerinde piksel piksel gezecek. 5x5 boyutunda tanımladığımız için tam ortası olan (2,2) koordinatı ile resmin tüm pikselleri çakışacak şekilde gezinti olacaktır. Eğer kernelin tüm pikselleri beyaz bir alana girerse 5x5 boyutlu beyaz bir alana, bu alan olduğu gibi kalacaktır. Ancak 5x5 boyutlu olmayan bir beyaz alanla çakışırsa o alan siyaha çevrilecektir. Erosion için cv2.erode methodunu kullanacağız. İlk iki parametre resim ve kernel, üçüncü parametre iteration sayısıdır:


kernel = np.ones((5, 5))
erosion = cv2.erode(img, kernel, iterations=1)
cv2.imshow("Erosion - 1 Iteration", erosion)
cv2.waitKey(0)
>>

Morphology

Iteration sayısını 5 yapalım:


erosion = cv2.erode(img, kernel, iterations=5)
cv2.imshow("Erosion - 5 Iteration", erosion)
cv2.waitKey(0)
>>

Morphology

Dilation işlemi, erosion işleminin tam tersidir ve resimde beyaz alanları süpürmek yerine çoğaltır. Aynı kerneli kullanacağız. Kernel resim üzerinde gezinir. Resim binary resim olduğundan dolayı iki değer vardır: 0 ve 255. 5x5 boyutlu tanımladığımız için matrisin tam ortası olan (2,2) noktası, resimdeki her bir piksel ile üst üste gelir. Matrisin tüm pikselleri altta kalan resmin pikselleri ile çarpılıp toplanır ve toplam matrisin ortasına denk gelen resmin pikseline yazılır. Bu şekilde beyaz alanlar artmış olur:


dilation = cv2.dilate(img, kernel, iterations=1)
cv2.imshow("Dilation - 1 Iteration", dilation)
cv2.waitKey(0)
>>

Morphology

Iteration sayısını artıralım:


dilation = cv2.dilate(img, kernel, iterations=5)
cv2.imshow("Dilation - 5 Iteration", dilation)
cv2.waitKey(0)
>>

Morphology

Openin ve closing işlemler için gürültü tanımlayalım:


whiteNoise = np.random.randint(low=-1, high=2, size=(600, 600))
whiteNoise *= 255
whiteNoisedImg = img + whiteNoise
whiteNoisedImg[whiteNoisedImg == -255] = 0
cv2.imshow("White Noised Img", whiteNoisedImg)
print(whiteNoisedImg)
cv2.waitKey(0)
>>

Morphology

Opening işleminde ilk olarak erosion sonrasında dilasion işlemi uygulanır. Dış gürültüleri temizlemek için kullanışlı bir methoddur:


kernel = np.ones((2, 2))
opening = cv2.morphologyEx(whiteNoisedImg, cv2.MORPH_OPEN, kernel)
cv2.imshow("Opening", opening)
cv2.waitKey(0)
>>

Morphology

Closing işlemi opening işleminin tersine, ilk olarak dilasion sonrasında erosion işlemi uygulanır. İç gürültüleri temizlemek için kullanışlı bir methoddur:


closing = cv2.morphologyEx(whiteNoisedImg, cv2.MORPH_CLOSE, kernel)
cv2.imshow("Closing", closing)
cv2.waitKey(0)
>>

Morphology

Son olarak Morphological Gradient yöntemini görelim. Morpological Gradient, dilation uygulanmış resim ile erosion uygulanmış resmin farkıdır. Edge detection yani kenar bulma işlemi için kullanışlı bir methoddur:


gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
cv2.imshow("Gradient", gradient)
cv2.waitKey(0)
>>

Morphology


Sonraki Yazı: Gradients
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın