Mogę używać funkcji FindChessboardCorners dla obrazów mniejszych niż 15 Mega pikseli takich jak 2k x 1.5k. jednak gdy używam go na obrazie z DSLR, rozdzielczość na 3700x5300, to nie działa.FindChessboardCorners nie może wykryć szachownicy na bardzo dużych obrazach dzięki obiektywowi o długiej ogniskowej.
Próbowałem użyć funkcji resize(), aby bezpośrednio zmniejszyć rozmiar obrazu, a następnie zadziała.
Oczywiście w kodzie źródłowym OpenCV jest jakiś kod lub błąd.
Czy możesz mi pomóc rozwiązać ten problem lub wskazać mi łatkę?
Znalazłem kogoś, kto opublikował podobny problem w 2006 roku, here, więc wygląda na to, że problem nadal występuje.
Kod użyłem jest jak
found = findChessboardCorners(viewGray, boardSize, ptvec,
CV_CALIB_CB_ADAPTIVE_THRESH + CV_CALIB_CB_FILTER_QUADS + CV_CALIB_CB_NORMALIZE_IMAGE + CV_CALIB_CB_FAST_CHECK);
Aktualizacja
Właśnie tutaj wyjaśnienie. Myślę, że algorytm działa na dużą rozdzielczość obrazu, ale zawodzi, gdy szachownica zajmuje większą część obrazu. Na przykład, gdy używam soczewki o stałej długości 50 mm w tej samej pozycji kamery, FindChessboardCorners nigdy się nie zawiedzie. Po tym, jak zmienię ją na stałą soczewkę 100 mm, funkcja przestaje wykrywać wzór. Myślę, że odnosi się do proporcji lub ogniskowej.
Zdjęcie poniżej przedstawia wynik obiektywu 100 mm.
Aktualizacja 2
dodałem filtr wyostrzania do dużego obrazu, a zacznie rozwiązać problem.
pierwsze użyłem
//do a sharpen filter for the large resolution image
if (viewGray.cols > 1500)
{
Mat temp ;
GaussianBlur(viewGray,temp, Size(0,0), 105) ; //hardcoded filter size, to be tested on 50 mm lens
addWeighted(viewGray, 1.8, temp, -0.8,0,viewGray) ; //hardcoded weight, to be tested.
//imwrite("test"+ imageList[k][i], viewGray) ;
}
found = findChessboardCorners(viewGray, boardSize, ptvec,
CV_CALIB_CB_ADAPTIVE_THRESH + CV_CALIB_CB_FILTER_QUADS + CV_CALIB_CB_NORMALIZE_IMAGE + CV_CALIB_CB_FAST_CHECK);
Zamieszczone obraz:
jpg obraz w oryginalnej rozdzielczości 3744 x 5616, jeśli siła ta strona nawróconego, a następnie upewnij się, że używasz na odpowiedniej rozdzielczości .
mógłbyś przesłać obraz? Czy powoduje to awarię lub po prostu zwraca wartość false? – Sassa
@ Chris, przesłał zdjęcie –
może być problem z obrazem? z jakiego rodzaju f-stopu korzystasz? może niska głębia ostrości może zmylić algorytm? spójrz na prawy dolny róg, jest nieco rozmazany, prawda? – Alex