锚点anchor位置及borderValue的改变对膨胀腐蚀的影响
腐蚀:卷积核沿着图像滑动,如果与卷积核对应的原图像的所有像素值都是 1,那么中心元素就保持原来的像素值,否则就变为零。
膨胀:与卷积核对应的原图像的像素值中只要有一个是 1,中心元素的像素值就是 1。
这个描述看起来有点生硬,为了进一步理解opencv对腐蚀与膨胀都是针对灰度图的形态学操作,还是自己操作一遍。
先看下 Python wrapper for OpenCV里的定义
1. 腐蚀膨胀自定义kernel 默认anchor=(-1,-1)
anchor – 卷积核锚点。其默认值为(-1,-1)说明位于kernel的中心位置
==>查看源码opencv-4.1.1modulesimgprocsrcfilterengine.hpp
static inline Point normalizeAnchor( Point anchor, Size ksize )
{
if( anchor.x == -1 )
anchor.x = ksize.width/2;
if( anchor.y == -1 )
anchor.y = ksize.height/2;
CV_Assert( anchor.inside(Rect(0, 0, ksize.width, ksize.height)) );
return anchor;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
首先定义一个5*5的图片矩阵表示,修改其中几个像素为1
img_5X5= np.zeros((5,5), dtype=np.uint8)
img_5X5[2,2]=1
img_5X5[3,3]=1
img_5X5[3,4]=1
- 1
- 2
- 3
- 4
它每个像素对应的值打印下如下:
再义一个3 * 3的结构元素kernel,该结构元素用3*3的矩阵表示
- 其中为1的单元,表示该单元在结构元素中有效(不参与结果运算)
kernel = np.zeros((3,3),np.uint8)
kernel[1,1]=1;
kernel[0,0]=1;
- 1
- 2
- 3
- 定义一个锚点,默认锚点为(-1,-1)表示在正中心,在单元格中用红色字体表示。黄色填充色为有效单元.
腐蚀或膨胀的操作:用结构元素(kernel)的锚点位置对齐图像的像素点,然后逐个从左到右至上而下的滑动到每个像素。结构元素中为1的各个坐标格子会与相应的像素对齐。
评论记录:
回复评论: