Chcę w robocie umieścić dwie kamery umieszczone w pewnej odległości od siebie. Obie maja patrzeć do przodu i maja być umieszczone prosto, tak żeby obiekty umieszczone bardzo daleko od nich widziały tak samo. Tak jak oczy u człowieka czy kota itp.
I robiąc dwa zdjęcia (jedną i druga kamerą) otrzymam dwa różniące się zdjęcia jeżeli tylko na zdjęciu znajdzie się jakiś przedmiot znajdujący się wystarczająco blisko kamer. Im bliżej kamer, tym większa różnica pomiędzy zdjęciami. I teraz chcę zastosować jakiś algorytm który będzie w stanie dysponując tymi dwoma zdjęciami wyznaczyć przeszkody i odległości od nich.
Problem polega na tym, że nie mam na razie żadnego konkretnego algorytmu. Wiem jak ma działać taki algorytm, ale żadnego konkretnego to nie mam. Algorytm po prostu ma przesuwać jedno zdjęcie względem drugiego, aż jakiś obiekt się na nich pokryje. Ilość pikseli o jaka trzeba przesunąć zdjęcie wyznacza odległość. Nie jest to zależność liniowa, ale jakaś jest i da się to skalibrować. To już mam opanowane, ale nie wiem jak program ma rozpoznawać że jakiś fragment zdjęcia akurat się pokrył. Ja jako człowiek widzę co jest na zdjęciu i mogę ręcznie je przesuwać i widzieć kiedy sie pokryje. Ale nie bardzo wiem jak to rozwiązać programowo. Tym bardziej że na zdjęciu mogą się pojawiać duże pola o identycznym kolorze na całej powierzchni i wtedy taki algorytm się zgubi, bo niezależnie o ile pixeli przesunę jedno zdjęcie, to oba fragmenty na obu fotach nadal będą takie same.
Próbowałem wyznaczać podobieństwo bloków 8x8 pixeli z różnymi przesunięciami i wybierać takie przesunięcie, przy którym podobieństwo obu bloków z każdego zdjęcia jest maksymalne. I jednocześnie odrzucać takie bloki, w których prawdopodobieństwo jest zawsze małe, niezależnie pod przesunięcia. I wywalać takie, w których podobieństwo jest duże dla kilku przesunięć. Zostawiać tylko takie dla których jest małe, małe, małe i raptem dla jednego konkretnego przesunięcia duże, co powinno oznaczać że dokładnie trafiliśmy w dobre przesunięcie, ale nic z tego nie wyszło.
Próbowałem nawet porównywać nie bezpośrednio bloki 8x8 pixeli, tylko bloki 8x8 pixeli po przeprowadzeniu transformaty DCT. Nadal efekty żadne.
Może ktoś robił coś podobnego i może mi pomóc?
To ma być do robota który będzie jeździł i omijał przeszkody. Ultradźwiękowe i inne rozwiązania mnie nie interesują.
A duża wymagana szybkość procestora i duże zurzycie pamięci RAM też nie będzie dla mnie problemem.
Właśnie znalazłem coś na ten temat:
http://www.agh.edu.pl/uczelnia/tad/Przetwarzanie_obrazow_medycznych/3D-1.ppt
Spróbuję zobaczyc co to warte.
I robiąc dwa zdjęcia (jedną i druga kamerą) otrzymam dwa różniące się zdjęcia jeżeli tylko na zdjęciu znajdzie się jakiś przedmiot znajdujący się wystarczająco blisko kamer. Im bliżej kamer, tym większa różnica pomiędzy zdjęciami. I teraz chcę zastosować jakiś algorytm który będzie w stanie dysponując tymi dwoma zdjęciami wyznaczyć przeszkody i odległości od nich.
Problem polega na tym, że nie mam na razie żadnego konkretnego algorytmu. Wiem jak ma działać taki algorytm, ale żadnego konkretnego to nie mam. Algorytm po prostu ma przesuwać jedno zdjęcie względem drugiego, aż jakiś obiekt się na nich pokryje. Ilość pikseli o jaka trzeba przesunąć zdjęcie wyznacza odległość. Nie jest to zależność liniowa, ale jakaś jest i da się to skalibrować. To już mam opanowane, ale nie wiem jak program ma rozpoznawać że jakiś fragment zdjęcia akurat się pokrył. Ja jako człowiek widzę co jest na zdjęciu i mogę ręcznie je przesuwać i widzieć kiedy sie pokryje. Ale nie bardzo wiem jak to rozwiązać programowo. Tym bardziej że na zdjęciu mogą się pojawiać duże pola o identycznym kolorze na całej powierzchni i wtedy taki algorytm się zgubi, bo niezależnie o ile pixeli przesunę jedno zdjęcie, to oba fragmenty na obu fotach nadal będą takie same.
Próbowałem wyznaczać podobieństwo bloków 8x8 pixeli z różnymi przesunięciami i wybierać takie przesunięcie, przy którym podobieństwo obu bloków z każdego zdjęcia jest maksymalne. I jednocześnie odrzucać takie bloki, w których prawdopodobieństwo jest zawsze małe, niezależnie pod przesunięcia. I wywalać takie, w których podobieństwo jest duże dla kilku przesunięć. Zostawiać tylko takie dla których jest małe, małe, małe i raptem dla jednego konkretnego przesunięcia duże, co powinno oznaczać że dokładnie trafiliśmy w dobre przesunięcie, ale nic z tego nie wyszło.
Próbowałem nawet porównywać nie bezpośrednio bloki 8x8 pixeli, tylko bloki 8x8 pixeli po przeprowadzeniu transformaty DCT. Nadal efekty żadne.
Może ktoś robił coś podobnego i może mi pomóc?
To ma być do robota który będzie jeździł i omijał przeszkody. Ultradźwiękowe i inne rozwiązania mnie nie interesują.
A duża wymagana szybkość procestora i duże zurzycie pamięci RAM też nie będzie dla mnie problemem.
Właśnie znalazłem coś na ten temat:
http://www.agh.edu.pl/uczelnia/tad/Przetwarzanie_obrazow_medycznych/3D-1.ppt
Spróbuję zobaczyc co to warte.