2011-05-06 14 views
7

Hey, robotun vizyon sistemini oynayan basit bir satranç kodluyorum, daha önceki bazı araştırmalarda kamera ve standart satranç setinin kullanılmasına izin vermeye çalışıyorum ve her ikisine de izin var Oyun sırasında hareket etmek. Şimdiye kadar panoyu web-cam ile elde edilen bir görüntüde bulabilirim ve neyin değiştiğini belirlemek için ardışık görüntülerin farkını alarak hamleleri tespit etmek istiyorum, daha sonra hamleleri algılamak için kurulu doluluk hakkında önceki bilgileri kullanın.Satranç Tespit OpenCV araçları kullanarak birbirini takip eden görüntü farklılıklarından hareket ediyor

Sorun şu ki, şu andaki boru hattı şu şekilde gider: Şu anki boru hattım şu şekilde gider: İki resmi çıkar -> Histogram fark görüntüsünü eşitler -> küçük değişiklikleri kaldırmak için görüntüyü erozyona uğratıp genişlet -> bir ikili kopya yapın ve mesafe dönüşümü yapın -> En büyük blobu alın (DT ve sel blobunu doldurduktan sonra en yüksek değere karşılık gelir) -> DT, değişikliği yoksaymaya yetecek kadar küçük bir değer döndürene kadar tekrarlayın.

Tüm bunları OpenCV ve C++ ile kodluyorum. Ancak sel dolgusu her zaman ya blobları doldurmuyor gibi görünüyor, bu yüzden çoğu durumda sadece bir değişiklik tespit edildi. Ayrıca cv::inpaint kullanmayı denedim ama bu da işe yaramadı. Yani sorum şu; sadece yanlış yaklaşımı kullanıyorum ya da bir şekilde turing, değişiklik tespitini daha güvenilir hale getirebilir. Birincisi, insanlar alternatif yollar önerebilir, C++/Python ve/veya OpenCV'de makul bir zamanda tercih edilebilir bir şekilde tercih edilebilir mi?

sayesinde

cevap

3

gemide bir düzeltme almak ve parçaların hareketi de etrafında adet hareket ettirirken bir tahta hareket etmez varsayarak bağımsız çözülebilir tespit problemi .. nasıl

Bazı düşünceler ben yaklaşım olacaktır:

kurulu yönünü saptamak Sen olarak, yerinde döndürülmesi kurulu idare edebilmek zorunda

parçaları görmenize izin veren bir açı sağlandığı sürece etrafta hareket ettiği gibi. Tahtada kolayca belirleyebileceğiniz bir şey varsa (örn. Her köşede bir işaretleyici) yardımcı olacaktır, böylece yönünü kaybederseniz (örneğin, bir kişi kartı tamamen kameradan uzaklaştırırsa) tekrar kolayca bulabilirsiniz.

Kartın izini sürdürebilmek için, kameranın konumunu 3B alanda panele göre modellemek gerekir. Bu, sabit bir kartın etrafında hareket eden kameranın konumunu belirlemek ile aynı problemdir. Egomotion bir sorun. Çözdüğünüzde, hareketi ve izleme nesnelerini tespit eden bir sonraki aşamaya geçebilirsiniz. parçalara

problemin Bu muhtemelen daha basit kısmı

algılama hareketi. Videoda nesne algılama için birçok algoritma var. Sadece "anahtar" çerçeveleri kullanabileceğinizi de eklerim. Bununla demek istediğim, tek bir hamle öncesinde ve sonrasında yalnızca tahta gördüğünüz çerçeveleri tanımlamaktır. Örneğin. Elleri görmezden gelme hareketini görmüyorsunuz, vb. Önceden/sonra çerçeveye sahip olduktan sonra, neyin hareket ettiğini ve nereye göre kurulduğunu anlayabilirsiniz.

Sürekliliği varsa (örneğin, iyi bilinen anakartın ilk düzenlemesinden beri tüm hareketleri takip ettiyseniz), her bir parçanın şeklini tanıyamayabilirsiniz.

+0

bir son not: Eğer yapabilirsem bunun için C++ 'dan emin olurdum. Muhtemelen Python ile çok daha hızlı yapılsın.Elbette C++ 'da kullanmanız gereken gerçekten değerli bir kütüphane bulamazsınız. Bu durumda sarın ve python'dan kullanırdım. –

+0

önerileriniz için teşekkürler, C++ 'yı tamamen terk etmekten korkmuyorum, hepiniz python ile yapabilirim, daha çok fikri aradım. İlk aşamada sahip olduğum kısıtlamalardan biri, kurulun herhangi bir şekilde değiştirilmesinin gerekmemesidir (bu yüzden hiçbir belirteç veya benzeri bir şey yoktur), dolayısıyla bu yorumu dikkate alan herhangi bir yorumu gerçekten takdir ediyorum – makokal

+0

Renklere güvenebilirsiniz. parçalar siyah/beyaz mı? Eğer öyleyse, başlangıçta tahta üzerine PCA yapabilir ve iki tarafın rengini belirleyebilirsin. Ama o zamandan sonra yönünü kaybetmemek için tahtadan takip etmelisin. –

İlgili konular