Thursday, January 28, 2010

Satranc Tahta Kose Noktalari Bulmak - Realtime Chessboard Corner Detection

Kameradan ya da kaydedilmis dosyadan gelen video goruntusundeki satranc tahtasi goruntusunun koselerini bulup, aninda / canli olarak video uzerinde gostermek icin suradaki Python OpenCV kodu kullanilabilir. Isletmek icin "python chess_online.py [dosya] [satranc tahta kose boyutu]", ornek: dosya.avi icinde 4x4 boyutlarindaki bir tahta icin "python chess_online.py dosya.avi 3".

Kose bulma algoritmasi hakkinda bazi onemli noktalar: Koselerin hep ayni sirada geldigini farz etmeyin, sira surekli, her goruntude (frame) degisebiliyor. Bulunan noktalar listesinde en ust sol kose mesela bazen en son, bazen ilk eleman olarak geri gelebiliyor. Sadece ortadaki nokta (4x4 durumunda 9 nokta icindeki 4. eleman) hep ayni sirada / yerde.

Siralamayi degistirmek icin iyi bir numara, ilk siradaki noktanin y degerinin her zaman son siradaki noktanin y degerinden daha az (altta) olmasini kontrol etmektir, eger degilse, liste uzerinde reverse() cagrisi yapilir, yani tersine cevirilir. Soyle bir Python fonksiyonu kullanilabilir.
def reverse_if_necessary(arr):
if arr[0][1] > arr[-1][1]:
arr.reverse()
Not: Aslinda OpenCV y kordinat sisteminde 0,0 noktasi sol ust kose, yani y degerleri asagi gittikce buyuyor. Biz bu kordinat sistemini kendi hesabimiz icin tersine cevirdik, bu ek islemi yapmak istemeyenler yukaridaki kodu buna gore degistirmelidir (> isareti < olacak).

No comments: