受图像大小影响的EmguCV形状检测

时间:2011-09-22 09:42:36

标签: image-processing emgucv

我正在使用Emgu形状检测示例应用程序来检测给定图像上的矩形。即使长宽比保持不变,调整大小的图像的尺寸似乎也会影响检测到的形状数量。这就是我的意思:

Using (400,400), actual img size == 342,400

Using (520,520), actual img size == 445,520

为什么会这样?如何确定最佳值?

由于

1 个答案:

答案 0 :(得分:3)

我回复了你关于EMGU的帖子但发现你没有回来但是就是这样。形状检测基于阈值保持不可能匹配的原理,这可以防止大量的错误分类。对于许多图像处理算法都是如此。基本上有没有完美设置,设计师必须选择最合适的设置来产生最理想的结果。 I.E.匹配最多的对象,而不是说实际上有更多的东西。

您需要单独调整每个变量以查看您获得的结果类型。开始边缘检测。

Image<Gray, Byte> cannyEdges = gray.Canny(cannyThreshold, cannyThresholdLinking);

查看较小的图像,看看检测到的矩形和非检测到的矩形之间的区别。你可能会失踪,边缘或角落,这就是为什么它没有被分类。如果你调整cannyThreshold并观察结果,如果好,那么保持它:)如果不好:(回到原始值。一旦满意调整cannyThresholdLinking并观察。

你会不断重复这个,直到你得到一个首选图像,这里的优点是你有3个项目要比较,你会继续,直到没有被识别的项目与其他两个相匹配。

如果它们相似,可能因为它是黑白图像,您需要进行霍夫线检测。

        LineSegment2D[] lines = cannyEdges.HoughLinesBinary(
            1, //Distance resolution in pixel-related units
            Math.PI / 45.0, //Angle resolution measured in radians.
            20, //threshold
            30, //min Line width
            10 //gap between lines
            )[0]; //Get the lines from the first channel

使用相同的方法一次调整一个值并观察输出,您希望找到所需的设置。切勿双脚跳入并更改所有值,因为您永远不会知道是否提高了准确性。最后,如果所有其他方法都失败了,请查看检查矩形的Hough结果的部分

                      if (angle < 80 || angle > 100)
                       {
                          isRectangle = false;
                          break;
                       }

要改变的变量少就应该为你完成所有的工作。但它仍然可以在这里完成。

我很抱歉没有直接的答案,但我希望你坚持下去并解决问题。否则,您每次都可以随时调整图像大小。

干杯

克里斯