Sunday, November 29, 2009

cvFindChessboardCorners

Piksel bazli kamerra goruntusu kullanarak OpenCV kullanarak uzaklik hesaplari yapabilmek icin kamera hakkinda bazi detaylarin bilinmesi gerekiyor. Goruntuden uzaklik hesaplamak icin baz alinan model pinhole kamera modelidir. Yani tum goruntulerin tek bir noktaya odaklandigi turden bir yapi. Bu konu hakkinda pek cok detay var, fakat pikselden uzaklik hesaplayabilmek istiyorsak, oncelikle (bilinen) uzakliktan piksele olan izdusumu hesaplamis olmamiz lazim. Bu oranlar bir kez hesaplanip bir kenarda tutuluyor.

Bilinen yontem sudur: Bir satranc tahtasi gibi kareler iceren bir goruntuyu alip, koselerini saptiyoruz (imajdan hangi acida durursa dursun kose bulmak kolay). Simdi, bu satranc tahtasinin 'duz' oldugunu biliyoruz, karelerin 'esit' boyda oldugunu biliyoruz. O zaman bu goruntunun kamera uzerindeki her egilme bukulme sekli, bize kameranin icsel yapisi hakkinda bir seyler soyleyecektir. Iste bu hesaplari aklimizda tutarak ileride tersine cevirip uzaklik hesabi icin kullanabiliriz.

Muhakkak, bazi limitasyonlar var. Ekrandaki x, y noktasindaki bir 'uzaklik' hakkinda 'derinlik' hesabi yapmamiz imkansiz. Ama ayni noktayi birkac kez degisik acilardan goruyorsak, bu mumkun olabilir.

Surada verilen kod, bir goruntudeki satranc tahtasi seklini bulup, koselerini ayni goruntu uzerinde isaretliyor. Isletmek icin python chess.py [dosya]. Eger kare sayisi degisik ise, chessboard_dim parametresi buna gore degismeli. Dikkat: Eger boyutlar 8 x 8 ise, chessboard_dim 7, 7 olmali.

Eger etrafta ustu kareli bir esya yok ise, suradaki PDF dosyasini yazicidan tek sayfaya basip, duz bir satih uzerinde yapistirarak kamera onunde tutabilirsiniz.

No comments: