最佳答案
三种可能的选择:
theta = (p_1, p_2, p_3, p_4)
,图像中面板的四个 2D 位置。我们需要一个能量函数E
最小化 wrt theta
(例如,使用带有动量的梯度下降或 RANSAC)。您可以使用许多术语,就像一些想法一样:一种。至少一些角应该是“角状的”:运行一个简单的 corner detector , 并定义能量
E_corner
这会惩罚到最近角落的距离。湾。至少一些边缘(例如
p_1
和 p_2
或 p_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 的一些变体可能是一个有用的补充(尽管在您的情况下,注意“门区域”的平滑度并不完全可取)。
关于python - 如何提取洗衣机前面板的轮廓?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56342101/