最适合2D blob上的矩形

时间:2013-03-02 16:36:42

标签: algorithm opencv image-processing image-recognition object-recognition

我有一个二进制blob(见图),我想在它上面放一个已知宽度和高度的矩形

如何找到最佳拟合矩形,即前景像素最大的内部和背景像素的最大值在外?

(这是我最适合的初步定义,我愿意接受其他建议)

我正在寻找已知尺寸的矩形,但如果有任意尺寸的解决方案,那也会很棒。

示例blob: enter image description here

我想找到这些矩形: enter image description here

到目前为止我的想法包括

  • 从最小的封闭矩形开始;但这不适合这些blob
  • 最大封闭矩形;同样的问题,加上我没有那个算法
  • 用霍夫变换找到矩形边;数据太吵了。

我意识到同一个blob可能有多个矩形符合我的标准,理想情况下我想要一些可以找到所有候选人的算法(想想因为那可能更难,我会很满意只找到一种方法一个候选人): enter image description here enter image description here

我主要使用opencv和cvBlobLib来处理我的数据,但我愿意接受任何一般解决方案。

1 个答案:

答案 0 :(得分:1)

我已经看到一篇关于类似主题的论文(基于RGB平面的圆覆盖),基于进化方法。

  • 目标函数已明确定义(多少个方块?有多大? 它们可以重叠吗?你可能想要惩罚小或 重叠的方块)。
  • 您可以先运行k-means 算法预处理数据,即找到正方形的潜在中心点。

我记得,比较了SGA,CGA和eCGA(CGA从初始的,基于k-means的覆盖开始),SGA优于其他SGA。它们是基于每个图像运行的。大约有30个人和20代,运行时间大约几分钟。

对于SGA,交叉操作员一次需要两个父母,并将两个父母的关闭/大多数相似的圈子配对。然后,对于每一对,它将在两者之间的某个地方绘制一个儿童圆圈,半径也在两个圆圈之间。 (虽然我建议不要在父母的值之间取值,但允许+/- 15%超出范围。这样可以防止人口过早收敛。)

使用矩形,您必须略微修改方法;每个矩形可以是元组(x,y,宽度,高度,旋转),其中 x y 是中心的坐标。