2013-10-06 15 views
9

Początkowo opublikowałem to na forach OpenCV, ale niestety nie otrzymałem zbyt wielu widoków/odpowiedzi, więc zamieszczam tutaj z nadziejami, że ktoś może wskazać kierunek, aby zasugerować ?Dopasowanie/kalibracja stereo OpenCV

Używam kamery stereofonicznej Bumblebee XB3 i ma ona 3 obiektywy. Spędziłem około trzech tygodni czytając fora, tutoriale, książkę Learning OpenCV i aktualną dokumentację OpenCV na temat korzystania z funkcji kalibracji stereo i stereo. Podsumowując, moim problemem jest to, że mam wygenerowaną dobrą mapę różnic, ale bardzo słabe chmury punktów, które wydają się być wypaczone/zgniecione i nie są reprezentatywne dla rzeczywistej sceny.

co zrobiłem do tej pory:

Używane przykłady OpenCV stereo_calibration i stereo_matching do:

kalibrowany mój aparat stereo z użyciem obrazów szachy pokładzie

1) zdjęcia Raw Scene : http://answers.opencv.org/upfiles/1380850337241986.jpg
2) Skorygowano surowe obrazy uzyskane z kamery za pomocą matryc po kalibracji kamery
: http://answers.opencv.org/upfiles/13808502665723237.png
3) Generowany obraz rozbieżność z rektyfikowanego obrazów przy użyciu Stereo dobieraniu (SGBM)
: 4) Prognozowana tych dysproporcji do 3D Punkt Chmura

Co mam zrobić, o ile eliminacja kierunku mój problem:

  • próbowałem 1 i 2 zdjęcia, a następnie 2 i 3 obiektywy i wreszcie 1 i 2.
  • ja ponownie uruchomić kalibrację mojego szachownicy przechwytuje zmieniając odległość między (bliżej/dalej)
  • użyłem ponad 20 par stereo do kalibracji
  • rozmiar
  • Różnie Szachownica używanych: mam użyłem obrazu szachownicy 9x6 do kalibracji , a teraz zmieniono na 8x5 zamiast na
  • Próbowałem używać opcji dopasowywania bloku, jak również SGBM, i otrzymałem stosunkowo podobne wyniki w postaci . Uzyskiwanie lepszych wyników dzięki SGBM do tej pory.
  • mam zmieniać dysproporcja waha, zmienił SAD rozmiar okien itp z niewielką poprawę

Co Podejrzewam, że problem jest:

Moja dysproporcja obraz wygląda stosunkowo zaakceptowania , ale następnym krokiem jest przejście do chmury punktów 3D za pomocą macierzy Q. Podejrzewam, że nie kalibruję poprawnie kamer, aby wygenerować odpowiednią macierz Q. Niestety, uderzyłem w ścianę, myśląc, co jeszcze mogę zrobić, aby uzyskać lepszą macierz Q. Czy ktoś może zasugerować, co powinienem zrobić?

Inną rzeczą, która może być problematyczna, są założenia, które robię podczas korzystania z funkcji cv :: stereoCalibrate.Obecnie indywidualnie kalibruję każdą kamerę, aby uzyskać kamerę i zniekształcenia (matryce cameraMatrix [0], distCoeffs [0] i cameraMatrix [1], distCoeffs [1]), co znacznie ułatwia złożoność funkcji stereoCalibrate.

Co więcej, myślę, że warto wspomnieć, w jaki sposób przechodzę od rozbieżności do chmury punktów. Używam cv :: reprojectImageTo3D OpenCV, a następnie zapisuję dane w strukturze chmury PCL Point. Oto odpowiedni kod:

cv::reprojectImageTo3D(imgDisparity16S, reconstructed3D, Q, false, CV_32F); 
    for (int i = 0; i < reconstructed3D.rows; i++) 
    { 
    for (int j = 0; j < reconstructed3D.cols; j++) 
    { 
     cv::Point3f cvPoint = reconstructed3D.at<cv::Point3f>(i, j); 
      //Filling in a PCL structure 
      pcl::PointXYZRGB point; 
      point.x = cvPoint.x; 
      point.y = cvPoint.y; 
      point.z = cvPoint.z; 
      point.rgb = rectified_imgRight.at<cv::Vec3b>(i,j)[0]; //Grey information 

      point_cloud_ptr->points.push_back (point); 
    } 
    } 

    point_cloud_ptr->width = (int) point_cloud_ptr->points.size(); 
    point_cloud_ptr->height = 1; 
    pcl::io::savePCDFileASCII("OpenCV-PointCloud.pts", *point_cloud_ptr); 

PS: Powodem Wybrałem przesłać te obrazy są takie, że scena ma pewną strukturę, więc byłem przewidywanie odpowiedzi mówiący scena jest zbyt jednorodna. Okładka na przegrodzie i na krześle jest dość bogata pod względem tekstury.

kilka pytań:

możesz mi pomóc usunąć płaszczyznę obrazu/rozbieżność, który wydaje się być częścią chmury punktów? Dlaczego to się dzieje?

Czy jest coś oczywistego, co robię nieprawidłowo? Chciałbym opublikować mój kod, ale jest bardzo podobny do dostarczonych przykładów OpenCV i nie myślę, że robię coś bardziej kreatywnie. Mogę, jeśli istnieje konkretna sekcja, która może dotyczyć.

W mojej naiwnej opinii wydaje się, że obraz różnic jest w porządku. Ale chmura punktów to zdecydowanie nic, czego bym się spodziewał po stosunkowo przyzwoitym obrazie dysparycyjności, ale DROGA jest gorsza.

Jeśli to pomaga, wspomniałem o macierzy Q, którą uzyskuję po kalibracji kamery, po czym coś oczywistego wyskakuje. Porównując to do książki Learning OpenCV, nie sądzę, jest coś rażąco błędna ...

Q: rows: 4 
    cols: 4 
    data: [ 1., 0., 0., -5.9767076110839844e+002, 0., 1., 0., 
     -5.0785438156127930e+002, 0., 0., 0., 6.8683948509213735e+002, 0., 
     0., -4.4965180874519222e+000, 0. ] 

Dziękuję za przeczytanie, a ja szczerze docenić żadnych propozycje w tym momencie ...

+0

Nie mogłem opublikować więcej niż 2 linków. Oto pozostałe: 3) Wygenerowano obraz różnicowy z wyprostowanych obrazów za pomocą funkcji Stereo Matching (SGBM): http://answers.opencv.org/upfiles/13808503551344959.png 4) Przewidywane różnice w stosunku do 3D Chmura punktów: http://answers.opencv.org/upfiles/13808503649376151.png i: http://answers.opencv.org/upfiles/13808503782809438.png – BumblebeeUser89

+0

Pytanie: czy będziesz zadowolony z chmury punktów w aparacie? układ współrzędnych?Jeśli tak, możesz użyć pliku kalibracyjnego Point Grey, aby uzyskać to, czego potrzebujesz (bez kalibracji szachownicą). Wyprostowane obrazy nie mają zniekształceń soczewki, więc biorąc pod uwagę różnicę wartości, przekształcasz ją na głębokość (z = Bf/d), a następnie rzutujesz ją na współrzędne kamery, używając znanej długości ogniskowej f. – killogre

Odpowiedz

0

Znalazłem podobne problemy podczas korzystania z funkcji rekonstrukcji 3D OpenCV (v.2.4.6). Niektóre osoby, takie jak Martin Peris, same wdrożyły ponownie. http://blog.martinperis.com/2012/01/3d-reconstruction-with-opencv-and-point.html

Niestety, czasami znalazłem problemy w obu implementacjach z moimi danymi. Tak, przypuszczam, że mój problem w tych przypadkach wynika z kiepskiego opisu parametrów aparatu zewnętrznego. Być może to także twoja sprawa. : -?

PS. Aby pozbyć się tła, musisz go posegmentować. Lub przynajmniej sprawdź wartości głębokości większe niż próg po rekonstrukcji. Flaga handleMissingValues ​​eliminuje tylko punkty o "nieskończoności" PS2. Poinformuj nas, jeśli rozwiążesz ten problem. Myślę, że jest to cenne dla wszystkich społeczności. Thnx

+0

Łącze jest martwe, ale ma to zasięg internetowy. –