অধ্যায়Phase 3 · ক্লাসিক্যাল কম্পিউটার ভিশন
3.2 22 মিনিট পড়া

Feature Detection (Harris, SIFT, ORB)

Keypoint extraction।

🎬 গল্প দিয়ে শুরু
একই বইয়ের কভারের দুটো ছবি — একটি সোজা, একটি বাঁকা, একটি দূরে — কম্পিউটার কীভাবে বুঝবে এরা একই? উত্তর — Feature points (keypoint)। ছবির আঙুলের ছাপ।

Feature কী?

এমন pixel/region যা distinctive, repeatable, scale & rotation invariant। কোণ (corner), blob, edge intersection — এগুলো ভালো feature।

Harris Corner Detector

python
import cv2, numpy as np

gray = cv2.imread("chess.jpg", cv2.IMREAD_GRAYSCALE)
gray = np.float32(gray)

dst = cv2.cornerHarris(gray, blockSize=2, ksize=3, k=0.04)
dst = cv2.dilate(dst, None)

img = cv2.imread("chess.jpg")
img[dst > 0.01 * dst.max()] = (0,0,255)
Harris কীভাবে কাজ করে?
ছোট window slide করিয়ে প্রতিটি দিকে intensity-এর variance মাপে। যেখানে সব দিকেই বড় variance — সেটি corner।

Shi-Tomasi — goodFeaturesToTrack

python
import cv2

gray = cv2.imread("scene.jpg", cv2.IMREAD_GRAYSCALE)
corners = cv2.goodFeaturesToTrack(
    gray, maxCorners=100, qualityLevel=0.01, minDistance=10)

Optical flow tracking-এর জন্য এটিই standard input।

SIFT — Scale-Invariant Feature Transform

ছোট-বড়, ঘোরানো — সব অবস্থায় একই keypoint পায়। প্রতিটি keypoint-এর সাথে একটি 128-D descriptor — অন্য ছবিতে match করার জন্য।

python
import cv2

img  = cv2.imread("book.jpg", cv2.IMREAD_GRAYSCALE)
sift = cv2.SIFT_create()
kps, descs = sift.detectAndCompute(img, None)

print("Keypoints:", len(kps), "Descriptor shape:", descs.shape)
out = cv2.drawKeypoints(img, kps, None,
        flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
License
OpenCV 4.4+ থেকে SIFT free, কিন্তু install লাগে opencv-contrib-python।

ORB — Oriented FAST & Rotated BRIEF

SIFT-এর চেয়ে অনেক দ্রুত, সম্পূর্ণ free, binary descriptor। Real-time ও mobile-এর জন্য সেরা।

python
import cv2

img = cv2.imread("book.jpg", cv2.IMREAD_GRAYSCALE)
orb = cv2.ORB_create(nfeatures=1000)
kps, descs = orb.detectAndCompute(img, None)

তুলনা

AlgorithmSpeedQualityUse case
Harrisদ্রুতCorner onlyCalibration, tracking
Shi-Tomasiদ্রুতBetter cornerOptical flow input
SIFTধীরশ্রেষ্ঠImage stitching, panorama
ORBসবচেয়ে দ্রুতভালোReal-time, mobile, SLAM
প্র্যাকটিস টাস্ক
  1. নিজের একটি বইয়ের কভার-এর SIFT ও ORB keypoint পাশাপাশি draw করুন।
  2. একই scene-এর দুটি কোণ (rotation, scale) থেকে তোলা ছবিতে keypoint তুলনা করুন।
  3. Harris দিয়ে chessboard-এর corner detect করার script লিখুন।

সারসংক্ষেপ

  • Feature = distinctive + repeatable + invariant।
  • Harris/Shi-Tomasi = corner; SIFT/ORB = scale+rotation invariant + descriptor।
  • ORB free + fast — real-time-এর default।
  • Keypoint + descriptor → পরের ধাপ matching।