অধ্যায়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 spotPractical recipe
Threshold → Opening → Closing → Contour — এটি ক্লাসিক object detection pipeline।
প্র্যাকটিস টাস্ক
- একটি scanned document-এ broken text closing দিয়ে repair করুন।
- Noisy binary mask-এ opening দিয়ে ছোট dot সরান।
- MORPH_GRADIENT দিয়ে object-এর শুধু outline বের করুন।
সারসংক্ষেপ
- Erosion = shrink; Dilation = grow।
- Opening = ছোট noise সরায়; Closing = ছোট ফাঁক ভরায়।
- Kernel shape + size + iterations effect ঠিক করে।
- Threshold-এর পর সবসময় morphological cleanup ভাবুন।