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

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(例如,使用动量梯度下降

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


三种可能的选择:

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

  • 将每个图像视为一个单独的优化问题,目标是估计最可能对应于前面板的最佳矩形的参数。因此我们的模型是θ=(p_1,p_2,p_3,p_4),图像中面板的四个2D位置。我们需要一个能量函数
    E
    来最小化wrt
    theta
    (例如,使用动量梯度下降,或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。使用矩形内必须包含的内容的知识。例如,给定四个角,可以确定定义机器圆门的椭圆。该椭圆内的外观统计信息以及门边界处的边缘/图像梯度应该是唯一的;因此,您可以定义一个能量项,鼓励模型选择角点,以便内部在白色背景上有一个暗椭圆形对象

    总的来说,这种方法与类似,我认为这可能值得您研究。然而,能量最小化蛇往往不考虑他们所包围的区域内部;所以,的一些变体可能是一个有用的补充(尽管注意“门区域”的平滑度在您的情况下并不完全可取)

  • 如果您的所有机器都非常相似或几乎相同(与您发布的机器相同),那么最好在图像之间切换。(另见或)。由于机器的正面几乎是平面的,不同图像的正面必须通过单应关系进行关联。然后知道前面板在一个图像中的位置将告诉您它在所有图像中的位置。例如,请查看,其中显示了如何撤消平面的透视变换,允许您将一个图像透视扭曲到另一个图像(此处,一个投影的机器面板到另一个模板)


  • 三种可能的选择:

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

  • 将每个图像视为一个单独的优化问题,目标是估计最可能对应于前面板的最佳矩形的参数。因此我们的模型是θ=(p_1,p_2,p_3,p_4),图像中面板的四个2D位置。我们需要一个能量函数
    E
    来最小化wrt
    theta
    (例如,使用动量梯度下降,或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。使用矩形内必须包含的内容的知识。例如,给定四个角,可以确定定义机器圆门的椭圆。该椭圆内的外观统计信息以及门边界处的边缘/图像梯度应该是唯一的;因此,您可以定义一个能量项,鼓励模型选择角点,以便内部在白色背景上有一个暗椭圆形对象

    总的来说,这种方法与类似,我认为这可能值得您研究。然而,能量最小化蛇往往不考虑