অধ্যায়Phase 2 · কোর ইমেজ প্রসেসিং
2.5 22 মিনিট পড়া
Thresholding (Binary, Adaptive, Otsu)
Foreground-background বিভাজন।
🎬 গল্প দিয়ে শুরু
কাগজের লেখা স্ক্যান করে শুধু কালো-সাদা বানাতে চান? OCR-এর আগে ছবিকে binary করতে চান? উত্তর — Thresholding। একটি সংখ্যার সাহায্যে ছবিকে দুই ভাগে ভাগ করার শিল্প।
Simple Threshold
python
import cv2
gray = cv2.imread("doc.jpg", cv2.IMREAD_GRAYSCALE)
_, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
_, inv = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)
_, trunc = cv2.threshold(gray, 127, 255, cv2.THRESH_TRUNC)Magic number-এর সমস্যা
১২৭ সব ছবির জন্য কাজ করে না। আলো বদলালে এই value-ও বদলাতে হয়। সমাধান — Adaptive বা Otsu।
Adaptive Threshold — প্রতি region-এ আলাদা
ছবিকে ছোট ছোট অংশে ভাগ করে প্রতিটির নিজস্ব threshold। অসমান আলোয় তোলা document scan-এর জন্য life-saver।
python
import cv2
gray = cv2.imread("page.jpg", cv2.IMREAD_GRAYSCALE)
adapt = cv2.adaptiveThreshold(
gray, 255,
cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY,
blockSize=21, C=10)Otsu — automatic best threshold
Otsu algorithm histogram দেখে এমন একটি threshold বেছে নেয় যা দুই class-এর variance সবচেয়ে কম রাখে। Bimodal histogram-এ অসাধারণ।
python
import cv2
gray = cv2.imread("coin.jpg", cv2.IMREAD_GRAYSCALE)
blur = cv2.GaussianBlur(gray, (5,5), 0) # Otsu-র আগে noise কমান
t, otsu = cv2.threshold(blur, 0, 255,
cv2.THRESH_BINARY + cv2.THRESH_OTSU)
print("Chosen threshold:", t)কোনটি কখন?
| পদ্ধতি | কখন |
|---|---|
| Simple | Controlled lighting, simple background |
| Adaptive | অসম আলো, document scan, photo of paper |
| Otsu | দুই-প্রধান histogram (foreground-background স্পষ্ট) |
প্র্যাকটিস টাস্ক
- একটি phone-এ তোলা handwritten note adaptive threshold দিয়ে পরিষ্কার করুন।
- Otsu দিয়ে কয়েন আলাদা করে পরে contour count করে কয়টি কয়েন আছে বলুন।
- একই ছবিতে Simple (127) ও Otsu compare করে কোনটি ভালো লিখুন।
সারসংক্ষেপ
- Threshold = ছবিকে দুই class-এ বিভক্ত করা।
- Simple = fixed value; Adaptive = region-wise; Otsu = automatic।
- OCR, document scan, segmentation-এর প্রথম ধাপ প্রায় সবসময় threshold।
- Threshold-এর আগে blur দিলে noise-induced false binary কমে।