Python 如何提取洗衣机前面板的轮廓?
我正在寻找一种稳健的方法来提取洗衣机前面板的轮廓。或者只需获得前面板的4个角点。 我尝试过颜色掩蔽,但没有找到稳定的结果。 这里有一些例子:Python 如何提取洗衣机前面板的轮廓?,python,opencv,computer-vision,image-segmentation,opencv-contour,Python,Opencv,Computer Vision,Image Segmentation,Opencv Contour,我正在寻找一种稳健的方法来提取洗衣机前面板的轮廓。或者只需获得前面板的4个角点。 我尝试过颜色掩蔽,但没有找到稳定的结果。 这里有一些例子: 三种可能的选择: 获取一组机器的图像,手动确定一个标签,上面写着门在哪里,然后训练一个卷积神经网络对每张图像的参数进行回归 将每个图像视为一个单独的优化问题,目标是估计最可能对应于前面板的最佳矩形的参数。因此我们的模型是θ=(p_1,p_2,p_3,p_4),图像中面板的四个2D位置。我们需要一个能量函数E来最小化wrttheta(例如,使用动量梯度下降
三种可能的选择:
E
来最小化wrttheta
(例如,使用动量梯度下降,或RANSAC)。正如一些想法一样,您可以使用许多术语:
a。至少有一些角点应该是“类似角点的”:运行一个简单的,并定义一个能量E_角点
,它会惩罚到最近角点的距离
b。至少一些边缘(例如,在p_1
和p_2
或p_3
之间)应该是“类似边缘的”:计算图像的梯度大小M=| \nabla I |
,并使用能量E|u边缘强制使M
的值沿着面板边缘更大。例如,对于沿一条边的x,y
,让E_边(x,y)=1/(1+M(x,y))
(尽管在这里更好)
c。使用每个门实际上是一个投影的三维矩形的事实:例如,请参见。一个有趣的想法是从一个矩形(代表面板)开始,而不是回归p_i
,而是回归仿射变换甚至透视投影变换的参数(尽管这需要算法估计深度),该变换将起始矩形映射到图像中的一个矩形。然后,可以修改估计变换的参数,以防止输出不太可能的变换
d。使用矩形内必须包含的内容的知识。例如,给定四个角,可以确定定义机器圆门的椭圆。该椭圆内的外观统计信息以及门边界处的边缘/图像梯度应该是唯一的;因此,您可以定义一个能量项,鼓励模型选择角点,以便内部在白色背景上有一个暗椭圆形对象
总的来说,这种方法与类似,我认为这可能值得您研究。然而,能量最小化蛇往往不考虑他们所包围的区域内部;所以,的一些变体可能是一个有用的补充(尽管注意“门区域”的平滑度在您的情况下并不完全可取)
三种可能的选择:
E
来最小化wrttheta
(例如,使用动量梯度下降,或RANSAC)。正如一些想法一样,您可以使用许多术语:
a。至少有一些角点应该是“类似角点的”:运行一个简单的,并定义一个能量E_角点
,它会惩罚到最近角点的距离
b。至少一些边缘(例如,在p_1
和p_2
或p_3
之间)应该是“类似边缘的”:计算图像的梯度大小M=| \nabla I |
,并使用能量E|u边缘强制使M
的值沿着面板边缘更大。例如,对于沿一条边的x,y
,让E_边(x,y)=1/(1+M(x,y))
(尽管在这里更好)
c。使用每个门实际上是一个投影的三维矩形的事实:例如,请参见。一个有趣的想法是从一个矩形(代表面板)开始,而不是回归p_i
,而是回归仿射变换甚至透视投影变换的参数(尽管这需要算法估计深度),该变换将起始矩形映射到图像中的一个矩形。然后,可以修改估计变换的参数,以防止输出不太可能的变换
d。使用矩形内必须包含的内容的知识。例如,给定四个角,可以确定定义机器圆门的椭圆。该椭圆内的外观统计信息以及门边界处的边缘/图像梯度应该是唯一的;因此,您可以定义一个能量项,鼓励模型选择角点,以便内部在白色背景上有一个暗椭圆形对象
总的来说,这种方法与类似,我认为这可能值得您研究。然而,能量最小化蛇往往不考虑