Matlab обнаруживает CheckerboardPoints несовершенство

Недавно я использовал алгоритм Matlab Single Camera Calibration App для калибровки внутренних и внешних характеристик камеры. Находя углы шахматной доски, много раз detectCheckerboardPoints Функция Matlab Out выполняет (точность) API OpenCV cv::findChessboardCornersТем не менее, на некоторых фотографиях Matlab ведет себя странно.

Например, на следующем рисунке хорошо видны углы между квадратами доски, в то время как matlab находит лишние в странных местах:

  1. Исходное изображение: // должно быть 5*8=40 внутренних угловых точек введите описание изображения здесь

  2. угловые точки найдены на неискаженном изображении: //6*9=54 найдено введите описание изображения здесь

  3. найденные точки на исходном изображении: //6*10=60... введите описание изображения здесь

Фрагмент кода Matlab прост, как показано ниже:

img=imread(fn);
[imUndist, newOrig]=undistortImage(img, cameraParams);
[pxs, bdsize]=detectCheckerboardPoints(imUndist); %or detect on 'img' directly
imMarked=insertMarker(imUndist, pxs);
imshow(imMarked);
  1. углы обнаружены с 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 ответа

Увеличьте шахматную доску! Это может случиться, и это происходит. Как правило, вы хотите, чтобы шахматная доска была частью большей части экрана. Вы решаете две проблемы с этим:

  1. В квадрате шахматной доски больше пикселей, поэтому алгоритм определения угла может найти его лучше
  2. Вы исправляете искажения лучше. Искажение камеры сильнее в углах изображения, поэтому, если шахматная доска имеет точки по всему изображению, она будет обнаруживать искажение значительно лучше, чем если бы это была маленькая вещь в середине изображения.

Лучше сделать шахматную доску большего размера с белым полем, превышающим размер квадратов, но если вы продолжите использовать эти изображения, отредактируйте их с помощью Paint и отбелите половину крайних черных квадратов и часть области вокруг шахматной доски. Это помогает улучшить обнаружение, не оказывая негативного влияния на дальнейшие вычисления. Надеюсь это работает.

Возможно, вам следует рассмотреть возможность удаления выбросов в калибровке, чтобы получить лучшие результаты (я имею в виду, какой процент ошибок был в процессе калибровки? Было ли это приемлемым?). Также попробуйте повысить резкость изображения после устранения искажений. потому что кажется, что разрешение неискаженного изображения значительно упало, и это может привести к ошибке.

Другие вопросы по тегам