J'utilise la transformation de Hough dans mon application à la fois en utilisant Matlab et OpenCV/labview et a constaté que pour certaines images, la Transformée de Hough a donné un ajustement de ligne manifestement erronée (toujours)Erreur de transformation hough dans matlab et openCV?
Voici le test et superposée images. L'angle semble correct, mais le rho est éteint. Sur l'image ci-dessous, vous verrez que l'image du haut essaie de placer une ligne sur le côté gauche de l'image originale et l'image du bas correspond à une ligne du côté droit de l'image.
Dans Matlab, j'appelle la fonction Hough par
[H1D,theta1D,rho1D] = hough(img_1D_dilate,'ThetaResolution',0.2);
en C++, je parés les HoughLines OpenCV fonctionnent donc je finis avec seulement la partie que nous remplissons l'accumulateur. Notez que parce que ma résolution thêta est de 0,2, j'ai 900 angles à analyser. Les tabSin et tabCos sont définis avant la fonction de sorte qu'ils sont juste un sin et cos de l'angle. Notez que ces routines fonctionnent généralement bien, mais seulement pour des cas spécifiques, il fonctionne comme je l'ai montré.
double start_angle = 60.0;
double end_angle = 120.0;
double num_theta = 180;
int start_ang = num_theta * start_angle/180;
int end_ang = num_theta * end_angle/180;
int i,j,n,index;
for (i = 0;i<numrows;i++)
{
for (j = 0;j<numcols;j++)
{
if (img[i*numcols + j] == 100)
{
for (n = 0;n<180;n++)
{
index = cvRound((j*tabCos[n] + i * tabSin[n])) + (numrho-1)/2;
accum[(n+1) * (numrho+2) + index+1]++;
}
}
}
}
TabCos et tabSin sont définis dans Labview avec ce code int32 i; float64 theta_prec; float64 tabSin [180]; float64 tabCos [180];
theta_prec = 1/180 * 3,14159; pour (i = 0; i < 180; i ++) { tabSin [i] = sin (i theta_prec); tabCos [i] = cos (i theta_prec); }
suggestions seraient grandement appréciés
Tout code? Je n'aime pas deviner à partir d'images :) –
modifié pour ajouter du code. – Denis
Vous n'avez pas besoin d'une autre boucle pour 'numrho'? – nimcap