Je dois détecter des coins sur des images en niveaux de gris avec la plus grande précision possible. Actuellement, j'utilise la fonction OpenCV : cvFindCornerSubPix().
J'ai préparé un test simple : j'ai obtenu une image avec un coin de bords noirs/blancs :
et ensuite une série du même objet, déplacé de 1/16pixel chacun. J'ai vérifié les valeurs des pixels manuellement, les images de test sont très bien.
Les résultats de la détection ont été décevants : Bien que dans TermCrit la condition soit fixée à 100 itérations ou à un seuil de 0,005, l'erreur de détection peut atteindre 0,08 pixel.
Le graphique montre l'erreur en fonction de la position dans un pixel. Cela ne semble pas du tout aléatoire. Autre chose à noter : pour d'autres positions anulaires du coin (lorsque les bords ne sont pas horizontaux/verticaux) les résultats sont meilleurs, mais toujours pas parfaits.
Une idée, comment faire fonctionner cette fonction correctement, pourquoi elle ne fonctionne pas, ou quoi utiliser à la place ?
J'apprécierais grandement tout conseil