Stereo Görme (Stereo Vision) ve Uzaklık Kestirimi

Stereo görme, iki veya daha fazla kamera kullanarak bir nesnenin uzaklığını kestirmek için kullanılan bir tekniktir. OpenCV, bu tekniği uygulamak için birçok fonksiyon ve algoritma sunar. Öncelikle, stereo görüntüler arasındaki görüntü eşleştirmesi yapılmalıdır. Bu işlem, iki görüntüdeki aynı noktaları bulmak için kullanılan bir algoritmadır. OpenCV’de, bu işlem için birçok fonksiyon mevcuttur, ancak en yaygın olarak kullanılanlar arasında SAD (Sum of Absolute Differences), SSD (Sum of Squared Differences) ve NCC (Normalized Cross Correlation) gibi eşleştirme algoritmaları vardır.

Sonra, stereo görüntüler arasındaki görüntü eşleştirmesinden elde edilen bilgiler kullanılarak uzaklık kestirimi yapılabilir. OpenCV’de, bu işlem için birçok fonksiyon mevcuttur, ancak en yaygın olarak kullanılanlar arasında BM (Block Matching) ve SGBM (Semi-Global Block Matching) gibi algoritmalar vardır. stereo görme için elde edilen uzaklık kestirimleri, birçok uygulama için kullanılabilir. Örneğin, robotik, otomotiv, hava ve uzay teknolojisi, görüntü işleme ve görüntü analitik gibi alanlarda kullanılabilir.

BM algoritması, her piksel için görüntünün bir kısmını (block) kullanarak eşleştirmeleri yapar ve uzaklık kestirimini gerçekleştirir. SGBM algoritması ise, her piksel için tüm görüntüyü kullanarak eşleştirmeleri yapar ve uzaklık kestirimini gerçekleştirir. Bu algoritmalar arasındaki fark, BM algoritması daha hızlı ama daha az hassas iken, SGBM algoritması daha yavaş ama daha hassas olmasıdır.

OpenCV, stereo görme ve uzaklık kestirimi için kapsamlı bir kütüphanedir ve çeşitli algoritmalar ve fonksiyonlar sunar OpenCV kütüphanesi kullanarak stereo görüntüler arasındaki görüntü eşleştirmesini ve uzaklık kestirimini gerçekleştiren bir Python kodudur. Örnekte, BM (Block Matching) algoritması kullanılmıştır.

Python Örneği

import cv2

# Stereo görüntüleri oku
img_left = cv2.imread('left.jpg', cv2.IMREAD_GRAYSCALE)
img_right = cv2.imread('right.jpg', cv2.IMREAD_GRAYSCALE)

# BM algoritmasını oluştur
stereo = cv2.createStereoBM(numDisparities=16, blockSize=15)

# Görüntü eşleştirmesini gerçekleştir ve uzaklık kestirimini al
disparity = stereo.compute(img_left, img_right)

# Uzaklık kestirimini görüntü olarak göster
cv2.imshow('Disparity', disparity)
cv2.waitKey()
cv2.destroyAllWindows()

Bu kod, stereo görüntüleri ‘left.jpg’ ve ‘right.jpg’ olarak okur ve BM algoritmasını kullanarak görüntü eşleştirmesini gerçekleştirir. Elde edilen uzaklık kestirimini ‘disparity’ adlı bir değişkende saklar ve görüntü olarak gösterir. Bu örnek kod sadece bir başlangıç için düşünülmüş olup gerçek uygulamalarda daha fazla parametre ve ayarlamalar yapılması gerekebilir.