我正在使用Emgu形状检测示例应用程序来检测给定图像上的矩形。即使长宽比保持不变,调整大小的图像的尺寸似乎也会影响检测到的形状数量。这就是我的意思:
Using (400,400), actual img size == 342,400
Using (520,520), actual img size == 445,520
为什么会这样?如何确定最佳值?
由于
答案 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;
}
要改变的变量少就应该为你完成所有的工作。但它仍然可以在这里完成。
我很抱歉没有直接的答案,但我希望你坚持下去并解决问题。否则,您每次都可以随时调整图像大小。
干杯
克里斯