实现线的Hough变换

时间:2013-04-25 08:29:21

标签: opencv image-processing hough-transform

我正在尝试在已经预处理的图像中实现Hough变换以进行线检测。 所以我的输入图像是黑白边缘图像,0 - 背景和255 - 前景。我不希望OpenCV使用内置的HoughLines库。 我实际上是在创建累加器并正确增加其值。我无法弄清楚我哪里出错了,所以这是我的代码块:

int diagonal = sqrt(height * height + width * width);

IplImage *acc = cvCreateImage (cvSize(180, 2 * diagonal),IPL_DEPTH_8U, 1);
unsigned char* accData = (unsigned char *)acc->imageData;

for (int i=0; i<height; i++)
{
    for (int j=0; j<step; j++)
    {
        if (data[i*step + j] > 200)
        {
            for (int theta=0; theta<180; theta++)
            {
                int p = j * cos(theta) + i * sin(theta);
                if (p > 0)
                    accData[theta*180 + p] += 1;
            }
        }
    }
}

我在acc中获得的输出图像不是它应该是什么样子。我没有得到任何正弦曲线,而是在这里和那里只有白色斑块。任何人都可以提供任何关于我哪里出错的反馈吗?

1 个答案:

答案 0 :(得分:1)

我所看到的是你不使用带有弧度值的窦,但是使用度数值你可以改变它如下:

int p = j * cos((double)theta*PI/180) + i * sin((double)theta*PI/180);