computer-vision morfoloji-operasyonlari-morphology-operations

Ana Link

Aşındırma (Erosion) ve Genişletme (Dilation) olarak iki temel yöntem ve bunlara ek olarak MorphologyEx içerisinde farklı bayraklarla bu iki temel yöntemin matematiksel karışımları vardır. Bu işlemler bir kernel ile yapılır ve bu kernel np ile tanımlanabilir (genellikle np.ones()) veya cv2.getStructeredElement fonksiyonuyla yapılabilir [[CV2 Kernel Oluşturma (getStructeredElement)]] .

!!! İkili görüntüler üzerinde yapılır. Yani genelde bir thresholing işleminden sonra gerçekleştirilir.

Yöntem olarak konvolüsyon işleminde gibi kernel gezdirilir ve merkezdeki pikselin değerini hesaplamak için kernelin taradığı alanda hedef değerden bir tane olup olmadığına bakılır. Kernel genelde np.ones ile temsil edilse de buradaki 1'ler hesaplamaya dahil edilecek maskelemeyi işaret eder. Yani istenen duruma göre 0-1 ikili değerler içeren kerneller'de kullanılabilir.

  img = cv2.imread(r"Downloads\test (2).png", 0) # Load grayscale image
  bin = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)[1]  # Binarize

  k = np.ones((5, 5), np.uint8)  # Define 5x5 kernel
  inv = cv2.bitwise_not(bin)           

Erosion

Geek Link

out = cv2.erode(inv, k, 1)     

Aynı zamanda gürültü gidermek için de kullanılır. Prensip: Kernel Konvolüsyon işleminde olduğu gibi görüntü boyunca gezdirilir. Eğer kernel içerisinde bir 0 değeri varsa kernel pikseli (yani ortadaki) '0' kabul edilir yoksa 255 kabul edilir (ikili görüntüler için). Yani kernelle taranan alanda bir tane küçük olması o kernel pikselinin değerini küçük yapar.

Dilation

Geek Link

  out = cv2.dilate(inv, k, 1)

Genellikle erozyondan sonra kullanılır. Erozyon gürültüyü giderir ama nesneleri de daraltır. Bu işlem sonrası gürültü kalmadıgı için sadece nesneler daha belirgin hale gelmiş olur.

Prensip: Erozyonun tersine taranan kernel'de bir tane bile 255 değeri varsa o kernel pixel'i 255'e eşitlenir. Yani kernelin taradıgı alanda bir tane bile 255 olması onu 255'e ittirir.

Opening

Geek Link OpenCV Link

  opened = cv2.morphologyEx(bin, cv2.MORPH_OPEN, k)

Closing

Geek Link OpenCV Link

  closed = cv2.morphologyEx(bin, cv2.MORPH_CLOSE, k)  # Apply closing

Morphological Gradient

Geek Link OpenCV Link

out = cv2.morphologyEx(inv, cv2.MORPH_GRADIENT, k) 

Top hat

Geek Link OpenCV Link

top = cv2.morphologyEx(bin, cv2.MORPH_TOPHAT, k)

Black hat

Geek Link OpenCV Link

bh = cv2.morphologyEx(inv, cv2.MORPH_BLACKHAT, k)