অধ্যায়Phase 2 · কোর ইমেজ প্রসেসিং
2.7 22 মিনিট পড়া

Morphological Operations

Erosion, dilation, opening, closing।

🎬 গল্প দিয়ে শুরু
Threshold-এর পর binary mask-এ ছোট ছোট ফাঁক, ছেঁড়া ছেঁড়া আকার থাকে। সেটি ঠিক করার চাবি — Morphological operation। চারটি অপারেশন: Erosion, Dilation, Opening, Closing।

Structuring Element

python
import cv2

k_rect    = cv2.getStructuringElement(cv2.MORPH_RECT,    (5,5))
k_ellipse = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5,5))
k_cross   = cv2.getStructuringElement(cv2.MORPH_CROSS,   (5,5))

Kernel-এর shape ও size অনুযায়ী effect পরিবর্তিত হয়।

Erosion — ছোট করা

Foreground (সাদা) এর প্রান্ত খেয়ে ফেলে। ছোট noise dot মুছে।

python
import cv2, numpy as np

mask = cv2.imread("mask.png", cv2.IMREAD_GRAYSCALE)
k = np.ones((3,3), np.uint8)
eroded = cv2.erode(mask, k, iterations=1)

Dilation — বড় করা

Foreground বাড়ে। ছেঁড়া edge join হয়, ছোট ফাঁক ভরে।

python
dilated = cv2.dilate(mask, k, iterations=1)

Opening = Erosion → Dilation

ছোট সাদা noise removal — মূল object আকার বজায়।

python
opened = cv2.morphologyEx(mask, cv2.MORPH_OPEN, k)

Closing = Dilation → Erosion

Object-এর ভেতরের ছোট কালো ফাঁক ভরাট। OCR-এ অক্ষরের ভাঙা অংশ জোড়া লাগাতে অসাধারণ।

python
closed = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, k)

Bonus — Gradient, Tophat, Blackhat

python
grad     = cv2.morphologyEx(mask, cv2.MORPH_GRADIENT, k)   # outline
tophat   = cv2.morphologyEx(mask, cv2.MORPH_TOPHAT, k)     # bright spot
blackhat = cv2.morphologyEx(mask, cv2.MORPH_BLACKHAT, k)   # dark spot
Practical recipe
Threshold → Opening → Closing → Contour — এটি ক্লাসিক object detection pipeline।
প্র্যাকটিস টাস্ক
  1. একটি scanned document-এ broken text closing দিয়ে repair করুন।
  2. Noisy binary mask-এ opening দিয়ে ছোট dot সরান।
  3. MORPH_GRADIENT দিয়ে object-এর শুধু outline বের করুন।

সারসংক্ষেপ

  • Erosion = shrink; Dilation = grow।
  • Opening = ছোট noise সরায়; Closing = ছোট ফাঁক ভরায়।
  • Kernel shape + size + iterations effect ঠিক করে।
  • Threshold-এর পর সবসময় morphological cleanup ভাবুন।