অধ্যায়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)

কোনটি কখন?

পদ্ধতিকখন
SimpleControlled lighting, simple background
Adaptiveঅসম আলো, document scan, photo of paper
Otsuদুই-প্রধান histogram (foreground-background স্পষ্ট)
প্র্যাকটিস টাস্ক
  1. একটি phone-এ তোলা handwritten note adaptive threshold দিয়ে পরিষ্কার করুন।
  2. Otsu দিয়ে কয়েন আলাদা করে পরে contour count করে কয়টি কয়েন আছে বলুন।
  3. একই ছবিতে 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 কমে।