如何提取洗衣机前面板的轮廓?

2024-04-24 06:16:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一个强大的方法来提取轮廓的前面板的洗衣机。或者只得到前面板的4个角点。 我试过颜色掩蔽,但没有找到稳定的结果。 以下是一些示例:

pic3pic2pic1


Tags: 方法示例颜色轮廓洗衣机前面板
1条回答
网友
1楼 · 发布于 2024-04-24 06:16:03

三种可能的选择:

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

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

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

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

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

    d.使用矩形内必须的知识。例如,给定四个角,您可以确定定义机器圆门的椭圆。该椭圆内的外观统计信息以及门边界处的边缘/图像渐变应该是唯一的;因此可以定义一个能量项,鼓励模型选择角点,以便内部在白色背景上有一个暗椭圆对象。你知道吗

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

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

相关问题 更多 >