Я могу использовать функции FindChessboardCorners для изображений размером менее 15 мегапикселей, таких как 2k x 1.5k. однако, когда я использую его на изображении из DSLR, разрешение 3700x5300, оно не работает.
Я попытался использовать resize(), чтобы уменьшить размер изображения напрямую, затем он работает.
Очевидно, что в исходном коде OpenCV есть жесткая кодировка или ошибка.
Не могли бы вы помочь мне разобраться, или указать мне патч для этого?
Я нашел, что кто-то опубликовал аналогичную проблему в 2006 году, здесь, так что похоже, что проблема все еще остается.
Используемый мной код похож на
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);
Обновление
Просто здесь, чтобы уточнить. Я думаю, что алгоритм работает с большим разрешением изображения, но он терпит неудачу, когда шахматная доска занимает большую часть изображения. Например, когда я использую 50-миллиметровый фиксированный объектив в том же положении камеры, FindChessboardCorners никогда не сработает. После того, как я сменил его на 100-миллиметровый фиксированный объектив, функция перестает обнаруживать рисунок. Я думаю, что это связано с долей или фокусным расстоянием.
Ниже представлен результат 100 мм объектива.
Обновление 2
Я добавил фильтр резкости к большому изображению, и он начинает исправлять проблему.
Во-первых, я использовал
//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);
Загружено изображение:
Изображение в формате jpg при исходном разрешении 3744 x 5616, если это принудительное преобразование сайта, убедитесь, что вы используете его с правильным разрешением.