我有一个函数通过假设锚点是topleft或矩阵的第一个元素来进行扩张/侵蚀功能。
[ 1 1 1]
[1 1 1]
[1 1 1]
我有其他函数通过假设锚点是矩阵的中点来进行扩张/侵蚀功能。
[1 1 1]
[1 1 1]
[1 1 1]
在扩张/侵蚀操作之后是否有任何方法可以使第一个输出矩阵像第二个输出矩阵一样,即以某种方式移位图像?
答案 0 :(得分:1)
在第一种情况下,每个3 * 3掩模中的最大元素(扩张或侵蚀中的最小元素)设置为位置[-1,-1]
,而在第二种情况下,它设置为[0,0]
}。所以,如果你不考虑边界效应,你将有
I1[0:n-1,0:m-1] == I2[1:n-2,1:m-2]
其中[n,m]
是原始图片I
的大小,I1
和I2
是I
上的形态操作,其中包含所有内核的topleft anchor点和中间锚点,分别。
您可以将边界值与类似分析进行比较,或者直接使用dilate
和erode
测试结果。
答案 1 :(得分: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中的运算符括号),其中坐标将根据您的需要而定。