matlab自己编写代码实现二值图像‘腐蚀与膨胀’

这篇具有很好参考价值的文章主要介绍了matlab自己编写代码实现二值图像‘腐蚀与膨胀’。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 我是将 1白视为主体,0黑视为背景
  • 结构元素的中心在图像的边界的时候,会有导致结构元素的一部分在图像外,所以我在处理图像的时候先将图像放大
%BW是待处理图像
[Width,Length]=size(BW); 
BIG_BW=zeros(Width+2,Length+2);
for i=1:Width 
    for j=1:Length 
        BIG_BW(i+1,j+1)=BW(i,j);%扩大图像
    end  
end

CORE = [0 1 0;
        1 1 1;
        0 1 0];%核
CORE_num=length(find(CORE==1) );%核中1的个数
CORE_count_num=0;%遍历过程中数到的1的个数

腐蚀

一个待处理对象X,一个结构元素S,S对X的腐蚀得到的结果是由X中能够包含整个S的像素点所组成的。

我的理解:

将S的中心依次放到主体X的每个像素点上,如果S触碰到了X的外部(背景),那么这个像素点就由主体变为了背景

我的操作:

用一个结构元素扫描图像中的每一个像素,用结构元素中的每一个像素与其覆盖的像素做“与”操作,如果为1,则该像素为1,否则为0。


%---------腐蚀---------
for i=2:Width+1 
for j=2:Length+1 
    for m =-1:1
    for n =-1:1
            if (BIG_BW(i+m,j+n)&CORE(2+m,2+n) )==1
            CORE_count_num=CORE_count_num+1;
            end
    end 
    end
    if CORE_count_num<CORE_num
    img_fushi(i-1,j-1)=0;%不符合条件,被腐蚀掉 
    end
    CORE_count_num=0;
end  
end  

 文章来源地址https://www.toymoban.com/news/detail-447450.html

膨胀

S对X膨胀产生的二值图像D是由这样的点(x, y )组成的集合,如果S的原点位移到(x, y ),那么它与X的交集非空。

我的理解:

将S的中心依次放到主体X的每个像素点上,如果S触碰到了X的外部(背景),那么这个被触碰到的外部像素点,就由背景变为了主体

也就是将S'的中心依次放到背景的每个像素点上,如果S'触碰到了X,那么这个像素点就由背景变为了主体。

(S'是S关于中心的对称,因为

假设背景在主体的右下角

那么主体在背景的左上角)

我的操作:

用一个结构元素扫描图像中的每一个像素,用结构元素中的每一个像素与其覆盖的像素做“与”操作,如果存在1,则该像素为1,否则为0。

%---------膨胀---------
CORE_change=CORE;
for m =-1:1
for n =-1:1
    CORE_change(2-m,2-n)=CORE(2+m,2+n);%作核关于中心的反射
end 
end

for i=2:Width+1 
for j=2:Length+1 
    for m =-1:1
    for n =-1:1
            if (BIG_BW(i+m,j+n)&CORE(2+m,2+n) )==1
            CORE_count_num=CORE_count_num+1;
            end
    end 
    end
    if CORE_count_num~=0
    img_pengzhang(i-1,j-1)=1;%只要周围有一个点符合,就变为主体
    end
    CORE_count_num=0;
end  
end  

开运算

开运算 = 先腐蚀运算,再膨胀运算。

%---------开运算(先腐蚀,再膨胀)---------
img_open_interim=img_open;%过渡图像
BIG_open=zeros(Width+2,Length+2);

CORE_change=CORE;
for m =-1:1
for n =-1:1
    CORE_change(2-m,2-n)=CORE(2+m,2+n);%作核关于中心的反射
end 
end
%先腐蚀
for i=2:Width+1 
for j=2:Length+1 
    for m =-1:1
    for n =-1:1
            if (BIG_BW(i+m,j+n)&CORE(2+m,2+n) )==1
            CORE_count_num=CORE_count_num+1;
            end
    end 
    end
    if CORE_count_num<CORE_num
    img_open_interim(i-1,j-1)=0;
    end
    CORE_count_num=0;
end  
end  
%再膨胀
img_open=img_open_interim;
for i=1:Width 
    for j=1:Length 
        BIG_open(i+1,j+1)=img_open_interim(i,j);%扩大图像
    end  
end

for i=2:Width+1 
for j=2:Length+1 
    for m =-1:1
    for n =-1:1
            if (BIG_open(i+m,j+n)&CORE(2+m,2+n) )==1
            CORE_count_num=CORE_count_num+1;
            end
    end 
    end
    if CORE_count_num~=0
    img_open(i-1,j-1)=1;
    end
    CORE_count_num=0;
end  
end 

闭运算

闭运算 = 先膨胀运算,再腐蚀运算。

%---------闭运算(先膨胀,再腐蚀)---------
img_close_interim=img_close;%过渡图像
BIG_close=zeros(Width+2,Length+2);

CORE_change=CORE;
for m =-1:1
for n =-1:1
    CORE_change(2-m,2-n)=CORE(2+m,2+n);%作核关于中心的反射
end 
end
%先膨胀
for i=2:Width+1 
for j=2:Length+1 
    for m =-1:1
    for n =-1:1
            if (BIG_BW(i+m,j+n)&CORE(2+m,2+n) )==1
            CORE_count_num=CORE_count_num+1;
            end
    end 
    end
    if CORE_count_num~=0
    img_close_interim(i-1,j-1)=1;%只要周围有一个点符合,就变为主体
    end
    CORE_count_num=0;
end  
end  
%再腐蚀
img_close=img_close_interim;
for i=1:Width 
    for j=1:Length 
        BIG_close(i+1,j+1)=img_close_interim(i,j);%扩大图像
    end  
end
for i=2:Width+1 
for j=2:Length+1 
    for m =-1:1
    for n =-1:1
            if (BIG_close(i+m,j+n)&CORE(2+m,2+n) )==1
            CORE_count_num=CORE_count_num+1;
            end
    end 
    end
    if CORE_count_num<CORE_num
    img_close(i-1,j-1)=0;%不符合条件,被腐蚀掉 
    end
    CORE_count_num=0;
end  
end

自编写与matlab自带 效果比较

 

matlab自己编写代码实现二值图像‘腐蚀与膨胀’ 

matlab自己编写代码实现二值图像‘腐蚀与膨胀’ 

matlab自己编写代码实现二值图像‘腐蚀与膨胀’ 

matlab自己编写代码实现二值图像‘腐蚀与膨胀’ 

matlab自己编写代码实现二值图像‘腐蚀与膨胀’ 

matlab自己编写代码实现二值图像‘腐蚀与膨胀’ 

matlab自己编写代码实现二值图像‘腐蚀与膨胀’ 

matlab自己编写代码实现二值图像‘腐蚀与膨胀’ 

 

 

 

 

 

 

 

 

 

 

 

到了这里,关于matlab自己编写代码实现二值图像‘腐蚀与膨胀’的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV图像处理学习十,图像的形态学操作——膨胀腐蚀

    一.形态学操作概念 图像形态学操作是指基于形状的一系列图像处理操作的合集,主要是基于集合论基础上的形态学数学对图像进行处理。 形态学有四个基本操作:腐蚀、膨胀、开操作、闭操作,膨胀与腐蚀是图像处理中最常用的形态学操作手段。 二.形态学操作-膨胀 跟卷积

    2024年02月05日
    浏览(56)
  • Python从0到1丨了解图像形态学运算中腐蚀和膨胀

    摘要: 这篇文章将详细讲解图像形态学知识,主要介绍图像腐蚀处理和膨胀处理。 本文分享自华为云社区《[Python从零到壹] 四十七.图像增强及运算篇之腐蚀和膨胀详解》,作者: eastmount 。 数学形态学的应用可以简化图像数据,保持它们基本的形状特征,并出去不相干的结

    2024年02月06日
    浏览(58)
  • 【C++】【图像处理】形态学处理(腐蚀、膨胀)算法解析(以.raw格式的图像为基础进行图像处理、gray levels:256)

        总结 针对处理二值图图像时,腐蚀或膨胀算法的核心: 1、确定该点(假设为A点)的灰度级,是0还是255; 2、遍历以该点为中心的3x3的邻域,获取灰度级等于0或者等于255的像素点个数,使用 flag 变量记录; 3、当 flag 大于设定的数值时,则A点的灰度级将被赋值为0或者

    2024年02月05日
    浏览(58)
  • 我在Vscode学OpenCV 图像处理一(阈值处理、形态学操作【连通性,腐蚀和膨胀,开闭运算,礼帽和黑帽,内核】)

    例如,设定阈值为127,然后:  将图像内所有像素值大于 127 的像素点的值设为 255。  将图像内所有像素值小于或等于 127 的像素点的值设为 0。 cv2.threshold() 和 cv2.adaptiveThreshold() 是 OpenCV 中用于实现阈值处理的两个函数,它们之间有以下区别: 1.1.1. cv2.threshold(): 这个函数

    2024年02月05日
    浏览(60)
  • 基于FPGA的图像形态学膨胀算法实现,包括tb测试文件和MATLAB辅助验证

    目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 在FPGA中仿真结果如下所示: 将FPGA中的仿真结果导入到matlab显示二维图,效果如下: matlab2022a vivado2019.2        膨胀操作是形态学中另外一种基本的操作。膨胀操作和腐蚀操

    2024年02月07日
    浏览(37)
  • 图像处理:图片二值化学习,以及代码中如何实现

    目录 1、了解下图片二值化的含义 2、进行图像二值化处理的方法 3、如何选择合适的阈值进行二值化 4、实现图片二值化(代码) (1)是使用C++和OpenCV库实现: (2)纯C++代码实现,不要借助其他库 (3)图片处理的一个实例: 1、了解下图片二值化的含义 (1)图片二值化是

    2024年02月06日
    浏览(50)
  • 【Python】【Opencv】形态学操作cv2.morphologyEx()函数详解和示例,实现腐蚀、膨胀、闭和开等运算

    常用的形态学操作如腐蚀、膨胀、开运算、闭运算等,可以帮助我们解决一下图像不连接或消除图像中某些不想要的连接,对于图像处理使用方便,效果明显。本文通过示例对这些功能和效果进行演示,以帮助大家理解和使用。 cv2.morphologyEx 是 OpenCV 中的一个函数,用于执行

    2024年02月22日
    浏览(71)
  • 基于FPGA的图像自适应阈值二值化算法实现,包括tb测试文件和MATLAB辅助验证

    目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1Otsu方法 4.2 Adaptive Thresholding方法 4.3、FPGA实现过程 5.算法完整程序工程 Vivado2019.2 matlab2022a        图像二值化是数字图像处理中的一种常见技术,可以将灰度图像转换为黑白二值图像,突出图像

    2024年02月08日
    浏览(47)
  • opencv膨胀腐蚀

      OpenCV 是一个开源的计算机视觉库,它包含了许多图像处理的功能,其中膨胀和腐蚀是两种常用的形态学操作。 膨胀(Dilation):膨胀操作是将图像中的高亮区域(白色像素)扩张,从而填充低亮区域(黑色像素)。这可以用于消除图像中的噪声,连接相邻的物体等。在 

    2024年02月06日
    浏览(49)
  • Python与FPGA——膨胀腐蚀

      腐蚀是指周围的介质作用下产生损耗与破坏的过程,如生锈、腐烂等。而腐蚀算法也类似一种能够产生损坏,抹去部分像素的算法。   膨胀腐蚀之前需要对图像进行二值化处理,然后进行以下处理。   腐蚀: P = P 1 P 2 P 3 P 4 P 5 P 6 P 7 P 8 P 9 P = P1 P2 P3 P4 P5 P6

    2024年03月09日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包