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

Color Spaces (RGB, HSV, LAB, Gray)

কখন কোন color space।

🎬 গল্প দিয়ে শুরু
লাল আমকে মেশিন কীভাবে চিনবে? RGB-তে চেষ্টা করলে আলোর তারতম্যে fail করে। কিন্তু HSV-তে গেলে শুধু একটি channel দেখেই কাজ হয়ে যায়। Color space — CV-এর গোপন superpower।

কেন একাধিক Color Space?

RGB মানুষের কাছে স্বাভাবিক, কিন্তু কম্পিউটারের জন্য নয়। আলোর তীব্রতা ও রং RGB-তে এক সাথে মেশানো থাকে। আলাদা analysis-এর জন্য আমরা ছবিকে অন্য “ভাষায়” রূপান্তর করি।

SpaceChannelsকখন
BGR/RGBBlue, Green, RedDisplay, default storage
GrayscaleIntensityEdge, threshold, feature detection
HSVHue, Saturation, ValueColor-based filtering (লাল/সবুজ object)
LABL (light), A, BColor correction, illumination-independent
YCrCbY, Cr, CbSkin detection, video compression (JPEG)

cvtColor — রূপান্তরের universal tool

python
import cv2

img = cv2.imread("mango.jpg")            # BGR

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
hsv  = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lab  = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
rgb  = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # matplotlib display

print(gray.shape, hsv.shape, lab.shape)

Practical — HSV দিয়ে লাল আম খোঁজা

python
red_mango.py
import cv2, numpy as np

img = cv2.imread("basket.jpg")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# লাল hue দুই দিকে wrap করে (0-10 এবং 170-180)
lower1 = np.array([0,   120, 70]);   upper1 = np.array([10,  255, 255])
lower2 = np.array([170, 120, 70]);   upper2 = np.array([180, 255, 255])

mask1 = cv2.inRange(hsv, lower1, upper1)
mask2 = cv2.inRange(hsv, lower2, upper2)
mask  = mask1 | mask2

red_only = cv2.bitwise_and(img, img, mask=mask)
cv2.imwrite("red_only.jpg", red_only)
OpenCV-তে Hue range
OpenCV-তে H = 0–179 (অন্য software-এ 0–359)। S ও V = 0–255। মনে রাখুন!

LAB — illumination-resilient color

LAB-এর L channel মানে শুধু brightness, A ও B মানে color। আলো বদলালেও A,B প্রায় একই থাকে — তাই product color matching বা CLAHE enhancement-এ ব্যবহার হয়।

python
import cv2

img = cv2.imread("low_light.jpg")
lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
L, A, B = cv2.split(lab)

clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
L2 = clahe.apply(L)

out = cv2.cvtColor(cv2.merge([L2, A, B]), cv2.COLOR_LAB2BGR)
cv2.imwrite("enhanced.jpg", out)
প্র্যাকটিস টাস্ক
  1. একটি traffic photo থেকে শুধু হলুদ গাড়ি extract করুন (HSV)।
  2. একটি কম-আলোর selfie LAB+CLAHE দিয়ে উন্নত করুন।
  3. YCrCb space-এ Cr channel দিয়ে skin region খোঁজার চেষ্টা করুন।

সারসংক্ষেপ

  • Color space = ছবির আলাদা গাণিতিক ভাষা।
  • HSV = color filtering-এর জন্য সেরা; OpenCV H = 0–179।
  • LAB = illumination-independent; CLAHE-এর সঙ্গে combo magical।
  • Grayscale = সব edge/feature detection-এর ভিত্তি।