FindChessboardCorners ne peut pas détecter l'échiquier sur de très grandes images par de longues lentilles de focale

Je peux utiliser FindChessboardCorners fonctions pour les images que moins de 15 Méga pixels, telles que la 2k x 1,5 k. cependant lorsque je l'utilise sur l'image du REFLEX numérique, la résolution à 3700x5300, il ne fonctionne pas.

J'ai essayé d'utiliser redimensionner() afin de réduire la taille de l'image directement, alors qu'il travaille.

Évidemment, il y a quelques codé en dur ou d'un bogue dans le OpenCV code source.

Pourriez-vous m'aider à comprendre, ou m'indiquer un patch pour cela ?

J'ai trouvé quelqu'un a posté un sujet similaire en 2006, icidonc il semble que le problème subsiste.

Le code que j'ai utilisé, c'est comme

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);

Mise à jour

Juste ici de préciser. Je pense que l'algorithme fonctionne sur la grande résolution de l'image, mais il échoue lorsque l'échiquier occupent la plus grande proportion de l'image.
Par exemple, lorsque j'utilise un 50mm fixe l'objectif sur la même position de la caméra, FindChessboardCorners n'échoue jamais. Après je l'ai changer pour 100 mm lentille fixe, la fonction commence à arrêter la détection du motif. Je pense qu'il est lié à la proportion ou la longueur focale.

L'image ci-dessous est le 100mm objectif de résultat.

Mise à jour 2

J'ai ajouté un filtre de netteté à l'image de grande taille, et il commence à résoudre le problème.

Tout d'abord j'ai utilisé

//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);

Téléchargé l'image:

Une image jpg à la résolution d'origine 3744 x 5616, si ce site convertir de force, alors assurez-vous d'utiliser la bonne résolution.

FindChessboardCorners ne peut pas détecter l'échiquier sur de très grandes images par de longues lentilles de focale

source d'informationauteur tomriddle_1234