matlab和openCV中的hough变换错误?

时间:2010-12-07 00:14:06

标签: matlab opencv hough-transform

我一直在使用Matlab和OpenCV / labview在我的应用程序中使用Hough变换,发现对于某些图像,hough变换明显错误的线条拟合(始终如一)

以下是测试和叠加图像。角度似乎正确,但rho已关闭。 alt text

在下图中,您将看到顶部图像尝试在原始图像的左侧插入一条线,而底部图像在图像的右侧插入一条线。

alt text

在Matlab中,我通过

调用Hough函数
[H1D,theta1D,rho1D] = hough(img_1D_dilate,'ThetaResolution',0.2);

在C ++中,我修剪了OpenCV HoughLines函数,所以我最终得到的只是我们填充累加器的部分。请注意,因为我的θ分辨率为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); }

任何建议都将不胜感激

1 个答案:

答案 0 :(得分:1)

我想我会解决这个问题的答案。

我将rho和theta转换为m和b,然后从m和b计算x和y的值。我相信这可能会在某处造成一些精确错误。

这个错误是通过直接从rho和theta获得x和y而不是通过m和b来解决的。

功能是

y = -cos(theta)/sin(theta)*x + rho/sin(theta);