我一直在使用Matlab和OpenCV/labview在我的应用程序中使用霍夫变换,发现对于某些图像,霍夫变换给出了明显错误的线条拟合(始终如一)hough在matlab和openCV中的转换错误?
这里是测试和覆盖图像。角度看起来不错,但是rho关闭了。
在下图中,您会看到顶部图像尝试将一条线放在原始图像的左侧,底部图像将一条线放到图像的右侧。
在Matlab中,我请霍夫功能通过
[H1D,theta1D,rho1D] = hough(img_1D_dilate,'ThetaResolution',0.2);
用C++
,我修剪OpenCV的HoughLines功能,所以我最终只有我们填充蓄能器中的一部分。请注意,因为我的theta分辨率是0.2,所以我有900个角度可供分析。 tabSin和tabCos是在函数之前定义的,因此它们只是角度的sin和cos。
请注意,这些例程通常可以很好地工作,但只是针对特定情况下它会按照我所显示的方式执行。
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和tabSin在Labview的定义与此代码 INT32 I; float64 theta_prec; float64 tabSin [180]; float64 tabCos [180];
theta_prec = 1/180 * 3.14159; for(i = 0; i < 180; i ++) { tabSin [i] = sin(i theta_prec); tabCos [i] = cos(i theta_prec); }
任何建议,将不胜感激
任何代码?我不喜欢从图像猜测:) – 2010-12-07 00:18:41