Matlab обнаруживает CheckerboardPoints несовершенство
Недавно я использовал алгоритм Matlab Single Camera Calibration App для калибровки внутренних и внешних характеристик камеры. Находя углы шахматной доски, много раз detectCheckerboardPoints
Функция Matlab Out выполняет (точность) API OpenCV cv::findChessboardCorners
Тем не менее, на некоторых фотографиях Matlab ведет себя странно.
Например, на следующем рисунке хорошо видны углы между квадратами доски, в то время как matlab находит лишние в странных местах:
Исходное изображение: // должно быть 5*8=40 внутренних угловых точек
угловые точки найдены на неискаженном изображении: //6*9=54 найдено
Фрагмент кода Matlab прост, как показано ниже:
img=imread(fn);
[imUndist, newOrig]=undistortImage(img, cameraParams);
[pxs, bdsize]=detectCheckerboardPoints(imUndist); %or detect on 'img' directly
imMarked=insertMarker(imUndist, pxs);
imshow(imMarked);
- углы обнаружены с
opencv
(код ниже) на этом изображении очень точный:
// код opencv:
Mat img = imread(fpath);
int ww = 8, hh = 15;
cv::Size bsz(ww, hh);
vector<Point2f> ptvec;
bool found = cv::findChessboardCorners(img, bsz, ptvec, CALIB_CB_ADAPTIVE_THRESH + CALIB_CB_NORMALIZE_IMAGE);
cv::drawChessboardCorners(img, bsz, ptvec, found);
imshow("img", img);
waitKey();
2 ответа
Увеличьте шахматную доску! Это может случиться, и это происходит. Как правило, вы хотите, чтобы шахматная доска была частью большей части экрана. Вы решаете две проблемы с этим:
- В квадрате шахматной доски больше пикселей, поэтому алгоритм определения угла может найти его лучше
- Вы исправляете искажения лучше. Искажение камеры сильнее в углах изображения, поэтому, если шахматная доска имеет точки по всему изображению, она будет обнаруживать искажение значительно лучше, чем если бы это была маленькая вещь в середине изображения.
Лучше сделать шахматную доску большего размера с белым полем, превышающим размер квадратов, но если вы продолжите использовать эти изображения, отредактируйте их с помощью Paint и отбелите половину крайних черных квадратов и часть области вокруг шахматной доски. Это помогает улучшить обнаружение, не оказывая негативного влияния на дальнейшие вычисления. Надеюсь это работает.
Возможно, вам следует рассмотреть возможность удаления выбросов в калибровке, чтобы получить лучшие результаты (я имею в виду, какой процент ошибок был в процессе калибровки? Было ли это приемлемым?). Также попробуйте повысить резкость изображения после устранения искажений. потому что кажется, что разрешение неискаженного изображения значительно упало, и это может привести к ошибке.