【问题标题】:How to extract contour of the front panel the washing machine?如何提取洗衣机前面板的轮廓?
【发布时间】:2019-05-28 12:17:24
【问题描述】:

我正在寻找一种可靠的方法来提取洗衣机前面板的轮廓。或者只获取前面板的 4 个角点。 我尝试了颜色遮罩,但没有找到稳定的结果。 这里有一些例子:

【问题讨论】:

    标签: python opencv computer-vision image-segmentation opencv-contour


    【解决方案1】:

    三种可能的选择:

    1. 获取一堆机器图像,手动确定一个标明门在哪里的标签,然后训练卷积神经网络对每张图像的这些参数进行回归。

    2. 将每个图像视为一个单独的优化问题,其目标是估计最有可能对应于前面板的最佳矩形的参数。所以我们的模型是theta = (p_1, p_2, p_3, p_4),即图像中面板的四个二维位置。我们需要一个能量函数 E 来最小化 wrt theta(例如,使用带有动量的梯度下降,或 RANSAC)。您可以使用许多术语,就像一些想法一样:

      一个。至少一些角应该是“角状”:运行一个简单的corner detector,并定义一个能量E_corner,它会惩罚到最近角的距离。

      b.至少一些边缘(例如,在p_1p_2p_3 之间)应该是“类似边缘的”:计算图像M = || \nabla I || 的梯度幅度并沿面板边缘强制执行这些值M 的值应该更大,使用能量 E_edge。例如,对于沿边的x,y,让E_edge(x,y)=1/(1+M(x,y))Robust losses 在这里往往更好)。

      c。使用每个门实际上是一个投影的 3D 矩形这一事实:例如,参见 this question。一个有趣的想法是从一个矩形(代表面板)开始,而不是回归p_i,而是回归仿射变换甚至透视投影变换的参数(尽管这需要算法估计深度),映射图像中的起始矩形。然后,您可以regularize 估计变换的参数,以防止输出不太可能的变换。

      d。使用矩形内部的知识。例如,给定四个角,您可以确定定义机器圆门的椭圆。该椭圆内的外观统计信息应该有些独特,以及门边界处的边缘/图像梯度;因此,您可以定义一个能量项,鼓励模型选择角落,使内部在白色背景上有一个深色椭圆物体。

      总的来说,这种方法类似于snakes, or active contour models,我认为这可能值得你研究。然而,能量最小化的蛇往往不会考虑它们所包围区域的内部。因此,Mumford-Shah functional 的某些变体可能是一个有用的补充(尽管在您的情况下,注意“门区域”的平滑度并不完全可取)。

    3. 如果您的所有机器都非常相似或几乎相同(就像您发布的机器一样),实际上最好在图像之间使用estimate a homography。 (另见herehere)。由于机器的正面几乎是平面的,因此不同图像的正面必须通过单应性相关联。然后知道前面板在一张图像中的位置将告诉您它在所有图像中的位置。例如,查看OpenCV tutorial for homographies,他们展示了如何撤消平面表面的透视变换,从而允许您将一个图像透视变形到另一个图像(这里,一个投影的机器面板到另一个模板)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-15
      • 2015-03-10
      相关资源
      最近更新 更多