【问题标题】:Dilate/erode - anchor point in matrix kernel topleft vs. middle扩张/侵蚀 - 矩阵内核左上角与中间的锚点
【发布时间】:2014-02-23 04:45:01
【问题描述】:

我有一个函数通过假设锚点是左上角或矩阵的第一个元素来执行扩张/侵蚀函数。

[1 1 1]

[1 1 1]

[1 1 1]

我有其他函数通过假设锚点是矩阵的中点来执行扩张/侵蚀功能。

[1 1 1]

[1 1 1]

[1 1 1]

在扩张/腐蚀操作之后有什么方法可以使第一个输出矩阵像第二个输出一样,即以某种方式移动图像?

【问题讨论】:

    标签: opencv image-processing matrix computer-vision


    【解决方案1】:

    第一种情况,锚点应该设置为[0,0],第二种情况应该设置在中心,也就是[1,1]。如果您使用 [-1,-1] 作为锚点,它将默认位于掩码的中心,例如在测试不同的内核大小时很有用。 (见http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=dilate#dilate

    其余的你可以查看教程: http://docs.opencv.org/doc/tutorials/imgproc/erosion_dilatation/erosion_dilatation.html

    关于您的具体问题, 除了边界的情况,您可以获得输出矩阵的子矩阵(使用来自 cv::Mat 的运算符括号),其中的坐标将根据您的需要。

    【讨论】:

      【解决方案2】:

      在您的第一种情况下,每个 3*3 掩码内的最大元素(膨胀或侵蚀中的最小元素)设置为位置[-1,-1],而在第二种情况下,它设置为[0,0]。所以如果你不考虑边界效应,你就会有

      I1[0:n-1,0:m-1] == I2[1:n-2,1:m-2]
      

      其中[n,m]是原始图像的大小II1I2是对I的形态学运算,分别是左上锚点和中间锚点的全1核。

      您可以将边界值与类似的分析进行比较,或者直接使用dilateerode 测试结果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-24
        • 1970-01-01
        • 2012-09-22
        • 1970-01-01
        • 2013-06-24
        • 2020-02-15
        • 2011-06-17
        • 2019-06-21
        相关资源
        最近更新 更多