jjzjj

MATLAB形态学的基本运算膨胀和腐蚀(开、闭运算)

Studying 开龙wu 2024-02-05 原文

  形态学中两种基本的操作是膨胀和腐蚀,膨胀是指在图像中为其边界添加像素点,而腐蚀是其逆过程。对应的添加和移除像素点数依赖于处理图像结构元素矩阵的大小和形式。

一.膨胀处理

  膨胀的运算符为⊕, A用B来膨胀写作A⊕B,MATLAB中提供了预定义的形态函数bwmorph,imdilate函数用于实现膨胀处理。

1.利用预定义的形态函数bwmorph对二值图像进行膨胀处理

clc;                %clc的作用就是清屏幕
clear;              %clear是删除所有的变量
close all;          %close all是将所有打开的图片关掉。
I=imread('4.jpg');                 %读取图像
subplot(1,3,1);
subimage(I);
title('原始图像');
J=im2bw(I);
BW1=bwmorph(J, 'dilate');         %对二值图像进行膨胀处理
subplot(1,3,2);
subimage(J);
title('二值处理的图像');
subplot(1,3,3);
subimage(BW1);
title('使用bwmorph函数膨胀')


2.对灰度图像进行膨胀处理。

clc;                %clc的作用就是清屏幕
clear;              %clear是删除所有的变量
close all;          %close all是将所有打开的图片关掉。
I=imread('4.jpg');                 %读取图像
i=rgb2gray(I);
se=strel('ball',6,6);
i2=imdilate(i, se);             %进行膨胀处理
subplot(1,2,1);
imshow(i);
title('原始图像') ;
subplot(1,2,2);
imshow(i2);
title('膨胀处理后的图像')

二、腐蚀处理

  腐蚀的运算符为Θ, A用B来腐蚀,写作AΘ B,imerode函数用于实现腐蚀处理。

1.对二值图像进行腐蚀处理。

clc;                %clc的作用就是清屏幕
clear;              %clear是删除所有的变量
close all;          %close all是将所有打开的图片关掉。
I=imread('4.jpg');                 %读取图像
i=im2bw(I);
se=strel('line',11,90);
bw=imerode(i, se);                %进行腐蚀处理
subplot(1,2,1);
imshow(i);
title('原始图像') ;
subplot(1,2,2);
imshow(bw);
title('二值图像腐蚀处理后') ;

2.对灰度图像进行腐蚀

clc;                %clc的作用就是清屏幕
clear;              %clear是删除所有的变量
close all;          %close all是将所有打开的图片关掉。
I=imread('4.jpg');                 %读取图像
i=rgb2gray(I);
se=strel('ball',5,5);
i2=imerode(i, se);          %对灰度图像进行腐蚀
subplot(1,2,1);
imshow(i);
title('原始图像') ;
subplot(1,2,2);
imshow(i2);
title('灰度图像腐蚀处理') ;

三.膨胀和腐蚀组合

  膨胀和腐蚀是两种基本的形态运算,它们可以组合成复杂的形态运算,比如开启和闭合运算等。使用同一个结构元素对图像先进行腐蚀运算然后再进行膨胀的运算称为开启。先进行膨胀运算然后再进行腐蚀的运算称为闭合。

1.图像的开运算
  先腐蚀后膨胀的运算称为开运算。开启的运算符为“◦”, A 用 B 来开启记为 A◦B。imopen函数用于实现图像的开运算。

clc;                %clc的作用就是清屏幕
clear;              %clear是删除所有的变量
close all;          %close all是将所有打开的图片关掉。
I=imread('1.jpg');                 %读取图像
i=rgb2gray(I);
subplot(1,2,1);
imshow(i);
title('原始图像') ;
se=strel('disk',7);
i0=imopen(i, se);
subplot(1,2,2);
imshow(i0);                         %开运算
title('开运算') ;


2.图像的闭运算

  A被B闭运算就是A被B膨胀后的结果再被B腐蚀。设A是原始图像B是结构元素图像,则集合A被结构元素B作闭运算,记为A· B。imclose函数用于实现图像的闭运算。

clc;                %clc的作用就是清屏幕
clear;              %clear是删除所有的变量
close all;          %close all是将所有打开的图片关掉。
i=imread('1.jpg');                 %读取图像
subplot(1,2,1);
imshow(i);
title('原始图像') ;

se=strel('disk',10);
bw=imclose(i, se);              %闭运算
subplot(1,2,2);
imshow(bw);
title('闭运算') ;

3.将开启和闭合结合起来构成形态学噪声滤除器对图像进行除噪

        clc;                %clc的作用就是清屏幕
        clear;              %clear是删除所有的变量
        close all;          %close all是将所有打开的图片关掉。
        
        I1=imread('2.jpg');                 %读取图像

        I2=im2bw(I1);
        I2=double(I2);
        
        I3=imnoise(I2, 'salt & pepper');       %加入椒盐噪声
        I4=bwmorph(I3, 'open');              %开启操图像
        I5=bwmorph(I4, 'close');             %关闭操的图
        subplot(2,2,1);
        subimage(I2);
        title('二值处理的图像');
        subplot(2,2,2);
        subimage(I3);
        title('加入椒盐噪声的图像')
        subplot(2,2,3);
        subimage(I4);
        title('开启操图像');
        subplot(2,2,4);
        subimage(I5);
        title('关闭操的图像')


4.对图像分别进行膨胀和腐蚀处理、开闭运算

        clc;                %clc的作用就是清屏幕
        clear;              %clear是删除所有的变量
        close all;          %close all是将所有打开的图片关掉。
        I=imread('4.jpg');                 %读取图像

        level=graythresh(I);              %得到合适的阈值
     
        bw=im2bw(I, level);               %二值化
        
        SE=strel('square',3);             %设置膨胀结构元素
        BW1=imdilate(bw, SE);             %膨胀
        SE1=strel('arbitrary', eye(5));   %设置腐蚀结构元素
        BW2=imerode(bw, SE1);             %腐蚀
        BW3=bwmorph(bw, 'open');          %开运算
        BW4=bwmorph(bw, 'close');         %闭运算
        subplot(2,3,1);
        imshow(I);
        title('原始图像') ;
        subplot(2,3,2);
        imshow(bw);
        title('二值处理的图像');
        subplot(2,3,3);
        imshow(BW1);
        title('膨胀处理的图像');
        subplot(2,3,4);
        imshow(BW2);
        title('腐蚀处理的图像');
        subplot(2,3,5);
        imshow(BW3);
        title('开运算');
        subplot(2,3,6);
        imshow(BW4);
        title('闭运算');


有关MATLAB形态学的基本运算膨胀和腐蚀(开、闭运算)的更多相关文章

  1. ruby - 触发器 ruby​​ 中 3 点范围运算符和 2 点范围运算符的区别 - 2

    请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是

  2. Matlab imread()读到了什么 (浅显 当复习文档了) - 2

    matlab打开matlab,用最简单的imread方法读取一个图像clcclearimg_h=imread('hua.jpg');返回一个数组(矩阵),往往是a*b*cunit8类型解释一下这个三维数组的意思,行数、数和层数,unit8:指数据类型,无符号八位整形,可理解为0~2^8的数三个层数分别代表RGB三个通道图像rgb最常用的是24-位实现方法,即RGB每个通道有256色阶(2^8)。基于这样的24-位RGB模型的色彩空间可以表现256×256×256≈1670万色当imshow传入了一个二维数组,它将以灰度方式绘制;可以把图像拆分为rgb三层,可以以灰度的方式观察它figure(1

  3. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  4. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

  5. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  6. ruby-on-rails - 使用 HTTParty 的非常基本的 Rails 4.1 API 调用 - 2

    Rails相对较新。我正在尝试调用一个API,它应该向我返回一个唯一的URL。我的应用程序中捆绑了HTTParty。我已经创建了一个UniqueNumberController,并且我已经阅读了几个HTTParty指南,直到我想要什么,但也许我只是有点迷路,真的不知道该怎么做。基本上,我需要做的就是调用API,获取它返回的URL,然后将该URL插入到用户的数据库中。谁能给我指出正确的方向或与我分享一些代码? 最佳答案 假设API为JSON格式并返回如下数据:{"url":"http://example.com/unique-url"

  7. ruby - 带括号和 splat 运算符的并行赋值 - 2

    我明白了:x,(y,z)=1,*[2,3]x#=>1y#=>2z#=>nil我想知道为什么z的值为nil。 最佳答案 x,(y,z)=1,*[2,3]右侧的splat*是内联扩展的,所以它等同于:x,(y,z)=1,2,3左边带括号的列表被视为嵌套赋值,所以它等价于:x=1y,z=23被丢弃,而z被分配给nil。 关于ruby-带括号和splat运算符的并行赋值,我们在StackOverflow上找到一个类似的问题: https://stackoverflow

  8. ruby - 定义自定义 Ruby 运算符 - 2

    问题是:除了在“OperatorExpressions”?例如:1%!2 最佳答案 是的,可以创建自定义运算符,但有一些注意事项。Ruby本身并不直接支持它,但是superatorsgem做了一个巧妙的把戏,将运算符链接在一起。这允许您创建自己的运算符,但有一些限制:$geminstallsuperators19然后:require'superators19'classArraysuperator"%~"do|operand|"#{self}percent-tilde#{operand}"endendputs[1]%~[2]#Out

  9. ruby-on-rails - Rails 基本 Base64 身份验证 - 2

    我正在尝试复制此GETcurl请求:curl-D--XGET-H"Authorization:BasicdGVzdEB0YXByZXNlYXJjaC5jb206NGMzMTg2Mjg4YWUyM2ZkOTY2MWNiNWRmY2NlMTkzMGU="-H"Content-Type:application/json"http://staging.example.com/api/v1/campaigns在Ruby中,通过电子邮件+apikey生成身份验证:auth="Basic"+Base64::encode64("test@example.com:4c3186288ae23fd9661c

  10. ruby - Ruby 中 <=> 运算符的名称是什么?他们怎么调用它? - 2

    在Ruby中有运算符(operator)。在API中,他们没有命名它的名字,只是:Theclassmustdefinetheoperator...Comparableusestoimplementtheconventionalcomparison......theobjectsinthecollectionmustalsoimplementameaningfuloperator...它叫什么名字? 最佳答案 参见上面的@Tony。然而,它也被称为(俚语)“宇宙飞船运算符(operator)”。

随机推荐