【问题标题】:Hough Line Transform - artifacts at 45 degree angle霍夫线变换 - 45 度角的伪影
【发布时间】:2015-11-29 13:35:18
【问题描述】:

我在 OpenCV (c++) 中实现了霍夫线变换,我在霍夫空间中得到了奇怪的伪影。下图显示了霍夫空间。距离 rho 以行表示,而 180 列表示从 0 到 179 度的角度。如果您放大第 45 列和第 135 列,您会看到一条带有交替暗像素和亮像素的垂直线。 http://imgur.com/NDtMn6S

对于较高的阈值,可以很好地检测到栅栏的线条,但是当我降低阈值时,可以在最终图片中将伪影视为 45° 或 135° 旋转线: Detected lines for medium threshold

起初我认为这是我实现霍夫线方法的错误,但使用 OpenCV 的霍夫线方法得到了中等阈值的类似线。我在使用 Canny 代替 Sobel 时也遇到了同样的问题。

所以问题是:为什么我会得到这些文物,我怎样才能摆脱它们?我无法找到有关此的任何信息,我们将不胜感激。

这是我在 OpenCV 霍​​夫线法中使用的代码:

// read in input image and convert to grayscale
Mat frame = imread("fence.png", CV_LOAD_IMAGE_COLOR);
Mat final_out;
frame.copyTo(final_out);

Mat img, gx, gy, mag, angle;
cvtColor(frame, img, CV_BGR2GRAY);

// get the thresholded maggnitude image
Sobel(img, gx, CV_64F, 1, 0);
Sobel(img, gy, CV_64F, 0, 1);
cartToPolar(gx, gy, mag, angle);

normalize(mag, mag, 0, 255, NORM_MINMAX);
mag.convertTo(mag, CV_8U);
threshold(mag, mag, 55, 255.0, THRESH_BINARY);

// apply the hough lines transform and draw the lines
vector<Vec2f> lines;
HoughLines(mag, lines, 1, CV_PI / 180, 240);
for( size_t i = 0; i < lines.size(); i++ )
{
    float rho = lines[i][0], theta = lines[i][1];
    Point pt1, pt2;

    pt1.x = 0;
    pt1.y = (rho - pt1.x * cos(theta))/sin(theta);
    pt2.x = mag.cols;
    pt2.y = (rho - pt2.x * cos(theta))/sin(theta);

    line(final_out, pt1, pt2, Scalar(0,0,255), 1, CV_AA);
}

// show the image
imshow("final_image", final_out);
cvWaitKey();

【问题讨论】:

  • 你能发布你的阈值梯度幅度图像吗?
  • 你对不同的图像观察到相同的行为吗?通常,45 度和 135 度线在横向图像中具有最大的可用空间,因此即使没有线存在,更高的累加器值的机会也更大。所以降低阈值应该首先在这些角度引入噪声线,我猜。或者 Hough 中是否有某种累加器标准化?
  • 我现在使用了一个不同的图像,它是方形的,线条简单,而对于中等阈值,45 度和 135 度线出现了。 thresholded magnitude and final output image 据我所知,霍夫没有累加器归一化,总的来说,我观察到各种图像的这种模式。

标签: c++ opencv edge-detection hough-transform


【解决方案1】:

回答这个问题 - 你无法摆脱这样的伪影 - 由于图像的离散性质和像素的网格正交性,它本质上是数学上的。唯一的方法是从分析中排除精确的 45 度。

我找到了源头——异常的明亮像素是下期产生的:

  • 红点 - 正好 45 度的亮度异常 - 您可以看到它们加倍形成楼梯图案 - 累积的像素数量加倍。
  • 蓝点 - 正好 45 度暗异常 - 制作棋盘图案
  • 绿点 - 44 度线 - 您可以看到交替的加倍和国际象棋模式 - 调节异常。

如果您查看 Hough 变换矩阵的全图,您会看到整个图像的亮度是如何缓慢变化的 - 表示根据角度缓慢地改变这个交替比。然而,由于像素网格的性质,正好在 45 度,这使得这种异常非常严重。我还不知道怎么处理...

【讨论】:

    【解决方案2】:

    偶然发现这一点,可能对未来的人有用。

    图像是倒置的;该算法正在累积白色像素,这些像素显然沿着图像的对角线更多。您要查找的线条是黑色的,这意味着它们的值为零且未被考虑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      • 2013-03-09
      相关资源
      最近更新 更多