回答
我建议做一个Blob detection并确定重心和斑点的面积。我假设图像中的旋钮会被黑色填充?如果没有,那么这一步必须在提取blob之前进行。有了这个坐标,你就可以计算点和线之间的差异。通过移动图像中的线条,您会得到不同的“错误”。见here如何计算这个误差(只是一个例子)
当minimizing这个错误,那么你有你的线。
要计算你也可以考虑先以滤除斑点的大小斑点坐标(只有差不多大小)
这是一个不错的方法。我会建议一个变体:将候选斑点投影到与测试线垂直的线上。然后,这些预测需要足够重叠,以便将这些斑点视为“在一条线上”。 (如果统计技术适合于这个问题,这甚至可以作为对blob来自单一分布的假设的测试来完成)。这会做一些与你最后一次按blob大小过滤的建议有所不同,尽管它也是一种处理不同Blob大小的方法。 – 2011-05-12 01:58:34
Ted:这是投影到线上的一种“Blob密度函数”,或者?我喜欢。 – schoetbi 2011-05-12 05:43:56
我在想,这将是一个密度投影到正交线上的子空间。 – 2011-05-12 05:58:04
至于你提到的错误,如果只有相同大小和趴在同一行(大约)是标准,那么这是另一种解决方法。
使用OpenCV函数cvFindContours(),查找连接的组件(猜测你可以松散地调用blob检测,不确定)。 This链接提供了工作代码来做到这一点。
计算每个轮廓的Bounding Rectangle,当您逐步浏览图片中存在的所有轮廓列表时。
Bounding Rectangle本质上是一个CvRect结构,它包含包围选定轮廓/特征的最小矩形的x位置,y位置,宽度和高度。
typedef struct CvRect { int x; int y; int width; int height; } CvRect;
当然,对于你的照片,我会比较轮廓的y位置是选择那些接近的。
- 此外,在结构的宽度和高度字段将告诉你在大小相似。
注:同一地区可能并不总是表示相同的尺寸。例如。 a * b = ab,也是(a/4)*(4b)= ab,但几乎没有相同的大小。代码示例是用C语言编写的,但我认为用C#编写它不会太难。希望这对你有用!
- 1. MO的算法来寻找两阵列
- 2. 算法来寻找最接近100明星原点
- 3. 算法来寻找重叠
- 4. 寻找动态算法来确定最优序列
- 5. 科学文献引用OpenCV中的斑点检测算法
- 6. 是A *最好的寻路算法吗?
- 7. 算法或公式来寻找良好的搜索调整值
- 8. 为封闭多边形寻找Douglas-Peucker算法的好起点
- 9. 寻找最好的做法来过滤模块输出DotNetNuke的
- 10. 寻找系列的当地最小值
- 11. 寻找最好的子
- 12. 寻找最短路径数的算法
- 13. 正在寻找算法来寻找颜色区域的边界
- 14. 寻找高效算法在整数列表中寻找最接近的整数
- 15. 递归算法来寻找数组中的最小元素
- 16. 使用Kruskal算法寻找图中的最小切点?
- 17. 查找图像中的最大斑点
- 18. 寻找最近点的有效方法?
- 19. 寻找相关的爱好项目入门C#
- 20. 在2D阵列中寻找最佳群体的算法
- 21. 图算法/寻找破坏图形的最节点的两个节点
- 22. 寻找最小面积覆盖X个地理点百分点的算法
- 23. 最好的方法来计算Rails中的两列
- 24. 寻找到指定点的最近点
- 25. VS 2010的最爱特点
- 26. 寻找最好的if语句结构
- 27. 寻找最好的Asp.net调查申请
- 28. 我寻找最好的方式与PHP
- 29. 寻找数组中最好的人
- 30. 寻找NLS多重系列
所有的斑点都是矩形的吗?如果只是遍历图像,找到所有的矩形,然后使用任何你想要的“相似”标准。 – soandos 2011-05-11 20:22:58