基于可变中心任意形状结构元素的图像腐蚀及matlab实现
2017-11-13 10:17
771 查看
引言
一般在matlab中可以用imrode实现膨胀腐蚀,但是全都无法定义结构元素中心,本文编写了一个可以设定中心(x0,y0)的erode函数,实现可变中心的图像腐蚀。同时,通过设置SE不关心元素为0,实现任意形状的SE腐蚀。原理
类似于对二值图像的模板操作,最终的效果是使结构元素外的图像变为背景,图像范围缩小。
SE为结构元素,可以自定义任意形状,主程序中设为3*3的十字。
中心可以定义为(x0,y0)=(1,2)
%eg【0 1 0 % 1 1 1 % 0 1 0】第1行第2列元素为原点时,(x0,y0)=(1,2)
代码:
可变中心的腐蚀函数:function K=erode(I,se,x0,y0) [m,n]=size(I); [m1,n1]=size(se); J=I; K=J; % Q=K; se=se; x0=x0; y0=y0; num=sum(sum(se==1)); for i=(1+x0-1):(m-(m1-x0)) for j=(1+y0-1):(n-(n1-y0)) bmatch=false; s=0; for k=1:m1 for l=1:n1 if se(k,l)==0 %不关心的元素 continue; end if se(k,l)==1%相关元素 if J(i+(k-(m1-1))-(x0-(m1-1)),j+(l-(n1-1))-(y0-(n1-1)))==255 %以原点对结构元素遍历 s=s+1; end end if s==num bmatch=true; break; end end end if bmatch K(i,j)=255; else K(i,j)=0; end end end
主程序
I=zeros(45,45); I(22:33,22:33)=255; I(12:17,12:17)=255; I(12:14,18:22)=255; %设置3*3结构元素的原点(x0,y0) x0=1; y0=2; se=[0 1 0;1 1 1;0 1 0;];%structure element K=erode(I,se,x0,y0); subplot(121) imshow(K),title('腐蚀'); subplot(122) imshow(J),title('原图');
效果
可以看到,经过腐蚀,前景范围缩小,转折处有十字结构元素处理的单点的突出。
自己可以对照matlab的workspace内部数据,观察作用的元素。
相关文章推荐
- 图像处理中任意核卷积(matlab中conv2函数)的快速实现。
- 深度学习FPGA实现基础知识16(图像处理中任意核卷积(matlab中conv2函数)的快速实现)
- 图像处理中任意核卷积(matlab中conv2函数)的快速实现。
- matlab实现图像中,任意给定窗函数以外区域补0
- 基于PCNN的图像分割的matlab实现 推荐
- 图像去模糊算法在CUDA上的实现,基于MATLAB平台
- 灰度图像形状的识别分类算法实现matlab
- CBIR 基于内容的图像检索系统 纹理,形状,颜色和空间特征综合检索 VC++实现
- 基于一种改进的提取形状特征向量方法,实现图像检索
- Matlab实现基于内容的图像检索系统
- 基于PCNN的图像分割的matlab实现
- 基于空间相关的图像模板匹配及MATLAB实现
- 妙用0元素数组 实现大小可变结构体
- 基于VC与Matlab的混合编程实现图像的三维显示
- 基于空间相关的图像模板匹配及MATLAB实现
- 妙用0元素数组 实现大小可变结构体
- 基于Arnold变换的图像置乱-Matlab实现
- SSIM——基于结构相似性的图像质量评价(matlab)
- MATLAB实现基于邻近插值的图像旋转代码
- 基于空间相关的图像模板匹配及MATLAB实现