【发布时间】:2026-02-23 23:05:02
【问题描述】:
我正在使用 Emgu 形状检测示例应用程序来检测给定图像上的矩形。即使纵横比保持不变,调整后图像的尺寸似乎也会影响检测到的形状数量。这就是我的意思:
Using (400,400), actual img size == 342,400
Using (520,520), actual img size == 445,520
为什么会这样?以及如何确定最优值?
谢谢
【问题讨论】:
我正在使用 Emgu 形状检测示例应用程序来检测给定图像上的矩形。即使纵横比保持不变,调整后图像的尺寸似乎也会影响检测到的形状数量。这就是我的意思:
Using (400,400), actual img size == 342,400
Using (520,520), actual img size == 445,520
为什么会这样?以及如何确定最优值?
谢谢
【问题讨论】:
我回复了您在 EMGU 上的帖子,但认为您还没有回来查看,但就是这样。形状检测的工作原理是阈值保持不太可能的匹配,这可以防止大量错误分类。对于许多图像处理算法来说都是如此。基本上没有没有完美的设置,设计师必须选择最合适的设置才能产生最理想的结果。 IE。匹配最多的对象,而不用说比实际更多。
您需要单独调整每个变量以查看您获得的结果类型。从边缘检测开始。
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;
}
需要更改的变量更少,因为应该可以为您完成所有工作。但在这里一切都可以解决。
很抱歉没有直截了当的答案,但我希望您能坚持下去并解决问题。否则,您可以随时调整图像大小。
干杯
克里斯
【讨论】: