Okullar için Robotik ve Mühendislik · anaokulundan liseye

6. ünite / 12

Morfolojik işlemler: aşındırma, genişletme, açma, kapama

Yapı elemanı, aşındırma ve genişletme; açma gürültüyü, kapama delikleri; gradyan, top-hat.

Bu ünitenin sonunda

  • Aşındırma ve genişletmeyi en küçük ve en büyük işlemi olarak açıklamak
  • Açma ve kapamanın sırasını ve etkisini doğru seçmek
  • Yapı elemanının biçim ve boyutunun sonuca etkisini göstermek
  • Birbirine değen nesneleri ayırmak ya da kopuk parçaları birleştirmek için morfoloji kullanmak

Ders notları

Morfoloji, ikili (ya da gri) görüntüde nesnelerin biçimini değiştiren komşuluk işlemleridir. Bir yapı elemanı (dikdörtgen, elips ya da artı biçimli küçük maske) her piksele yerleştirilir.

  • Aşındırma (erode): yapı elemanının altındaki en küçük değer. Nesneler incelir, küçük beyaz noktalar ve ince köprüler kaybolur.
  • Genişletme (dilate): en büyük değer. Nesneler kalınlaşır, küçük delikler ve aralıklar kapanır.

Sıranın önemi

açma = genişlet(aşındır(f))    kapama = aşındır(genişlet(f))

Açma, yapı elemanından küçük beyaz parçaları siler ama büyük nesnelerin boyunu korur. Kapama, nesne içindeki küçük siyah delikleri ve çatlakları doldurur. İkisi birlikte, eşiklemeden sonra maskeyi temizlemenin standart yoludur.

Türev işlemler

Morfolojik gradyan (genişletme − aşındırma) nesnenin çerçevesini verir. Top-hat (f − açma) zeminden küçük ve açık ayrıntıyı, black-hat (kapama − f) küçük ve koyu ayrıntıyı çıkarır: düzensiz ışıkta yazı çıkarmak için kullanılır.

Oyun alanı

Morfolojik işlemler

İkili görüntüde yapı elemanıyla aşındırma ve genişletme; bunların sırası açma (küçük gürültüyü siler) ve kapamayı (delikleri doldurur) verir. Çekirdek biçimini ve boyutunu, yineleme sayısını değiştir.

Önce: Otsu maskesi
Sonra
kontur (önce): 1138 kontur (sonra): 6 beyaz piksel: 17718 → 16119

Kendin dene

Gürültülü pullar sahnesinde eşiklenmiş maskeye bak: kaç kontur var? Açmayı 3×3 elipsle uygula; kontur sayısı ne oldu? Sağ üstte iki pulu birleştiren ince köprüyü hangi çekirdek boyu koparıyor? Sonra kapamaya geç ve pulların içindeki delikleri dolduran en küçük boyu bul. Yineleme sayısını 3 yapınca neden dikdörtgen çekirdekle pullar köşeli görünmeye başlıyor?

Kod

Python: aşındırma, genişletme, açma, kapama
import cv2
import numpy as np

img = cv2.imread('girdi.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_, bw = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

k = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))   # RECT, ELLIPSE ya da CROSS
ops = {
    'erode': cv2.erode(bw, k, iterations=1),
    'dilate': cv2.dilate(bw, k, iterations=1),
    'open': cv2.morphologyEx(bw, cv2.MORPH_OPEN, k),       # aşındır, sonra genişlet
    'close': cv2.morphologyEx(bw, cv2.MORPH_CLOSE, k),     # genişlet, sonra aşındır
    'gradient': cv2.morphologyEx(bw, cv2.MORPH_GRADIENT, k),
    'tophat': cv2.morphologyEx(gray, cv2.MORPH_TOPHAT, cv2.getStructuringElement(cv2.MORPH_RECT, (25, 25))),
}
for name, m in ops.items():
    n, _ = cv2.connectedComponents((m > 127).astype(np.uint8))
    print(f'{name:8s} beyaz={(m > 127).mean():.3f} bileşen={n - 1}')
cv2.imwrite('cikti.png', np.hstack([bw, ops['open'], ops['close']]))

Sık yapılan hatalar

  • Açma ile kapamanın sırasını karıştırmak: gürültüyü silmek isterken delikleri doldurursun ya da tersi.
  • Siyah nesne beyaz zeminde dururken aşındırmanın nesneyi incelteceğini sanmak: OpenCV beyazı nesne sayar; önce maskeyi ters çevir.
  • Büyük çekirdek yerine çok yineleme kullanmak ya da tersi: 3×3 ile 3 yineleme yaklaşık 7×7'dir ama biçim farklı olabilir.
  • Morfolojiyi ölçümden sonra unutmak: aşındırma alanı küçültür; alan ölçeceksen açma/kapama gibi boyu koruyan işlemleri tercih et.

Yazılım mühendisliği bağlantısı

Morfoloji parametreleri, nesnelerin beklenen boyuna bağlıdır. Bu bağımlılığı belgelenmiş bir varsayım olarak yaz.

  • "Gürültü ≤ 3 px, nesne ≥ 20 px" gibi bir varsayım varsa çekirdek boyunu bundan türet ve testi aynı varsayımla kur.
  • Kamera çözünürlüğü değişince ölçeklenen parametreler (örneğin genişliğin %1'i) sabit piksel değerlerinden daha dayanıklıdır.

Kendini sına

  1. İkili maskedeki küçük beyaz gürültü noktalarını, büyük nesnelerin boyunu koruyarak silmek için hangisi kullanılır?

  2. Aşındırma bir pikselin değerini nasıl belirler?

  3. Morfolojik gradyan (genişletme − aşındırma) ne verir?

  4. Bir nesnenin içindeki küçük siyah delikleri doldurmak için hangisi?

Bu üniteden sonra bitirme projesinde

Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç