Matlab图像的数学形态学处理(实验源码+截图)_matlab实现图像的处理以及用按钮实现源代码-程序员宅基地

技术标签: matlab  图像处理  MATLAB  开发语言  

1.eg1_diamond代码&截图

clc,clear,close all;
SE4=strel('diamond',100);
GN4=getnhood(SE4);
figure,title('diamondShow'),imshow(GN4);

1.eg5代码&截图

clc,clear,close all;%清空之前记录
Image=imread('A.bmp');%读入图像
BW=imbinarize(Image);%二值化图像
figure,imshow(BW),title('二值化图');
[h,w]=size(BW);%获取图像尺寸
result=zeros(h,w);%定义输出图像,初始化为0
for x=2:w-1
    for y=2:h-1
        for m=-1:1
            for n=-1:1
                if BW(y+n,x+m)
                    result(y,x)=1;%将参考点记录为前景点
                    break;
                end
            end
        end
    end
end
figure,imshow(result),title('二值图膨胀');%title放imshow后面才能显现标题
SE=strel('square',3);%创建结构元素
result1=imdilate(BW,SE);%膨胀运算
figure,imshow(result1),title('膨胀运算imdilate');

3.eg6代码&截图

clc,clear,close all;
Image=imread('menu.bmp');
BW=imbinarize(Image);%二值化图像
figure,imshow(BW),title('二值化图像');
[h,w]=size(BW);%获取图像尺寸
result=zeros(h,w);%初始化为0

for x=2:w-1
    for y=2:h-1
        for m=-1:1
            for n=-1:1
                if BW(y+n,x+m)
                    result(y,x)=1;
                    break;
                end
            end
        end
    end
end
figure,imshow(result),title('二值腐蚀图');
SE=strel('square',3);
result1=imerode(BW,SE);
figure,imshow(result1),title('二值化imroad图');

 4.Eg10代码&截图

clc,clear,close all;
Image=imread('A.bmp');
BW=imbinarize(Image);%二值化图像
SE=strel('square',6);%结构元素
result1=imdilate(imerode(BW,SE),SE);
result2=imopen(BW,SE);
figure,imshow(result1),title('开运算_imdilate方法');
figure,imshow(result2),title('开运算_imopen方法');
result3=imerode(imdilate(BW,SE),SE);
result4=imclose(BW,SE);
figure,imshow(result3),title('闭运算_imrode方法');
figure,imshow(result4),title('闭运算_imclose方法');

5.  Eg11代码&截图

clc,clear,close all;
Image=imread('cell.jpg');
TH=graythresh(Image);
OringinBW=imbinarize(Image,TH);%二值化图像
figure,imshow(OringinBW),title('原始二值化图像');
imwrite(OringinBW,'cell_1.bmp');

BW1=1-OringinBW;
SE=strel('square',6);%结构元素为一个6*6的正方形
BW2=1-imopen(BW1,SE);
figure,imshow(BW2),title('矩形块提取');
imwrite(BW2,'cell_square.bmp');

SE45=strel('line',25,45);
BW3=1-imopen(BW1,SE45);
figure,imshow(BW3),title('线段提取');
imwrite(BW3,'cell_line.bmp');

 6.  Eg13代码&截图

Image=imread('A.bmp');
BW=imbinarize(Image);
imshow(BW);
SE=strel('square',4);
result1=imclose(imopen(BW,SE),SE);               %用3×3结构元素先开后闭
figure,imshow(result1);
result2=imopen(imclose(BW,SE),SE);               %先闭后开
figure,imshow(result2);

 

 7.  Eg15代码&截图

Image=imread('menu.bmp');
BW=imbinarize(Image);
SE=strel('square',3);
result1=BW-imerode(BW,SE);               %内边界
result2=imdilate(BW,SE)-BW;               %外边界
result3=imdilate(BW,SE)-imerode(BW,SE);    %形态学梯度
figure,imshow(result1);
figure,imshow(result2);
figure,imshow(result3);
result4=bwperim(BW);
result5=bwperim(BW,8);
figure,imshow(result4);title('二值图像的边缘检测');
figure,imshow(result5);title('二值图像的边缘检测');

8.  Eg17代码&截图 

Image=imread('coin.bmp');
BW=imbinarize(Image);
imshow(BW);
result1=imfill(BW,'holes');
figure,imshow(result1);title('二值图像的区域填充');

9.  Eg19代码&截图

clc,clear,close all;
Image=zeros(12,12);   %定义目标图像Image
Image(2:6,3:5)=1;
Image(9:11,4:6)=1;
Image(3:5,8:10)=1;
Image(8:9,9:10)=1;
Image(2,10)=1;
Image(3,11)=1;
SE1=[0 0 0 0 0    %定义结构元素SE1
          0 1 1 1 0
          0 1 1 1 0
          0 1 1 1 0
          0 0 0 0 0];      
SE2=[1 1 1 1 1    %定义结构元素SE2
          1 0 0 0 1
          1 0 0 0 1
          1 0 0 0 1
          1 1 1 1 1];      
result1=imerode(Image,SE1); %结构元素SE1探测图像内部,结果为result1
Image1=~Image;  %目标图像Image求补
result2=imerode(Image1,SE2); %结构元素SE2检测图像外部,结果为result2
result=result1 & result2; %求出击中与否变换的结果result        
figure,imshow(result),title('击中与否变换结果');

 

10.  Eg20代码&截图 

clc,clear,close all;
Image=imread('A.bmp');
BW=imbinarize(Image);
figure,imshow(BW);
interval=[-1  -1  -1  -1  -1
        -1  -1  -1  -1  -1
        -1  -1  1   1   1
        -1  -1  1   1   1
        -1  -1  1   1   1]; %定义结构元素对
result=bwhitmiss(BW,interval); %击中击不中操作
figure,imshow(result);

11.  Eg23代码&截图

clc,clear,close all;
Image=imread('menu.bmp');
BW=imbinarize(Image);
figure,imshow(BW);title('原始二值图像');
result1=bwmorph(BW,'thin',1);             %细化一次
result2=bwmorph(BW,'thin',Inf);            %细化到目标只有一个像素
figure,imshow(result1);title('细化一次');
figure,imshow(result2);title('细化至只有一个像素宽');

 

12.  Eg26代码&截图

clc,clear,close all;
Image=(imread('maleman.gif'));
se=strel('ball',5,5);%选取球形结构元素
result1=imdilate(Image,se);%膨胀灰度图像
result2=imerode(Image,se); %腐蚀灰度图像
imshow(Image);title('原始灰度图像');
figure,imshow(result1);title('膨胀后的图像');
figure,imshow(result2);title('腐蚀后的图像');
imwrite(result1,'ym1.bmp');
imwrite(result2,'ym2.bmp');

 

13.  Eg27代码&截图

clc,clear,close all;
image=imread('A1.jpg');
[width,height,z]=size(image);

result2=image;
subplot(1,2,1)
imshow(image);
title('原图');

%k1、k2作为判断临界点
k1=0.2;
k2=0.2;
%rand(m,n)是随机生成m行n列的矩阵,每个矩阵元素都在0-1之间
%这里k都是0.2,所以小于k的元素在矩阵中为1,反之为0
a1=rand(width,height)<k1;
a2=rand(width,height)<k2;
%合成彩色图像
t1=result2(:,:,1);
t2=result2(:,:,2);
t3=result2(:,:,3);
%分成黑点 白点 随机
t1(a1&a2)=0;
t2(a1&a2)=0;
t3(a1&a2)=0;
t1(a1& ~a2)=255;
t2(a1& ~a2)=255;
t3(a1& ~a2)=255;
result2(:,:,1)=t1;
result2(:,:,2)=t2;
result2(:,:,3)=t3;
subplot(1,2,2)
imshow(result2);
title('加椒盐噪声后');

 

14.  Eg28代码&截图

clc,clear,close all;
Image=imread('maleman.gif');
imshow(Image),title('原始灰度图像');
Image1=imnoise(Image,'salt & pepper',0.04);
figure,imshow(Image1),title('椒盐噪声图像');
se=strel('disk',2);%选取半径为2的圆盘结构元素
result1=imopen(imclose(Image1,se),se);
result2=imclose(imopen(Image1,se),se);
figure,imshow(result1);title('先闭后开运算后的图像');
figure,imshow(result2);title('先开后闭运算后的图像');
imwrite(Image1,'spnoise.bmp');
imwrite(result1,'colvbo.bmp');
imwrite(result2,'oclvbo.bmp');

 

15.  Eg29代码&截图

clc,clear,close all;
Image=imread('A1.jpg');
figure,imshow(Image),title('原图');
SE=strel('disk',1);
H1=[-1 -2 -1;0 0 0;1 2 1]; H2=[-1 0 1;-2 0 2;-1 0 1]; 
R1=imfilter(Image,H1);
R2=imfilter(Image,H2);
result1=abs(R1)+abs(R2); 
figure,imshow(result1),title(' Sobel图像');
imwrite(result1,'Scirc.bmp');
result2=imdilate(Image,SE)-imerode(Image,SE);    %形态学梯度
figure,imshow(result2);
imwrite(result2,'Xcirc.bmp');

 

 16.  Eg29代码&截图

clc,clear,close all;
Image1=imread('A1.jpg');%哆啦A梦
Image2=imread('A.bmp');%字母A
imshow(Image1);title('原始A1图像');
figure,imshow(Image2);title('原始clock图像');
se=strel('disk',23);%选取半径为2的圆盘结构元素
result1=imtophat(Image1,se);%Top-hat变换
result2=imbothat(Image2,se);%Bottom-hat变换
figure,imshow(result1);title('Top-hat变换');
figure,imshow(result2);title('Bottom-hat变换');
rr1=imadjust(result1);%进行灰度线性拉伸
rr2=imadjust(result2);%进行灰度线性拉伸
figure,imshow(rr1);title('基于Top-hat的对比度增强');
figure,imshow(rr2);title('基于Bottom-hat的对比度增强');
imwrite(result1,'cell1.bmp');
imwrite(result2,'clock1.bmp');
imwrite(rr1,'cell2.bmp');
imwrite(rr2,'clock2.bmp');

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_58619891/article/details/127395545

智能推荐

存储系统及存储器-程序员宅基地

文章浏览阅读5.8k次,点赞3次,收藏48次。存储系统及存储器概述。

鸿蒙下个模式是什么,鸿蒙2.0是什么系统_ 鸿蒙2.0到底是什么-程序员宅基地

文章浏览阅读310次。鸿蒙2.0系统现在是比较的火的,那么这个系统它怎么样呢?鸿蒙2.0这款系统是来自哪家品牌呢?相信很多小伙伴会有这样的疑问吧。那么我们就一起来了解一下吧。1.鸿蒙2.0系统是什么官方介绍“鸿蒙系统(HongmengOS)是一款“面向未来”的操作系统,一款基于微内核的面向全场景的分布式操作系统,现已适配智慧屏,未来它将适配手机、平板、电脑、智能汽车、可穿戴设备等多终端设备“。可以看到这是一场大的布局,..._什么是鸿蒙2.0

最易懂的数据库异地多活方案-程序员宅基地

文章浏览阅读293次。Java面试笔试面经、Java技术每天学习一点Java面试关注不迷路作者:莫那·鲁道来源:http://thinkinjava.cn/前言随着业务发展越来越快,数据量越来越多,用户也越来..._异地存活java

Android 应用集成友盟统计_apk文件中友盟appkey-程序员宅基地

文章浏览阅读896次,点赞3次,收藏4次。一、根据友盟官网的介绍引入依赖dependencies { implementation fileTree(include:['*.jar'], dir:'libs') // 下面各SDK根据宿主App是否使用相关业务按需引入。 // 友盟统计SDK implementation 'com.umeng.umsdk:common:9.4.7'// 必选 implementation 'com.umeng.umsdk:asms:1.4.1'// 必选 _apk文件中友盟appkey

Pytorch手撸交叉熵CrossEntropyLoss并修改one-hot输入_torch cross_entropy onehot-程序员宅基地

文章浏览阅读4.2k次,点赞17次,收藏37次。目录1 前言2 交叉熵的实现过程3完整的自定义交叉熵4.使用自己one-hot的交叉熵1 前言楼主最近要修改一下one-hot然后送入交叉熵中,由于pytorch的torch.nn.CrossEntropyLoss()已经封装好了one-hot,所以需要自定义重写交叉熵,这里主要是多级交叉熵,而不是二分类交叉熵。2 交叉熵的实现过程首先看多级交叉熵的计算过程:L=−1N∑iN∑c=1Myiclog(pic)L = -\frac{1}{N}\displaystyle\sum_i^N\display_torch cross_entropy onehot

Android 8.0后台执行限制_android 后台数据 多长时间生效-程序员宅基地

文章浏览阅读890次。Android O对应用在后台运行时可以执行的操作施加了限制,称为后台执行限制(Background Execution Limits),这可以大大减少应用的内存使用和耗电量,提高用户体验。后台执行限制分为两个部分:后台服务限制(Background Service Limitations)、广播限制(BroadcastLimitations)。后台服务限制如何才算是后台应用?除了下面情况外都是后..._android 后台数据 多长时间生效

随便推点

需求分析模板_人人都是视频大师:视频“拍摄编辑”功能分析-程序员宅基地

文章浏览阅读484次。本文从用户需求满足的使用场景出发,从市场背景、产品逻辑、产品需求和产品功能几个方面对“拍摄编辑”功能展开了分析,探讨“拍摄编辑”功能在功能和策略方面的迭代优化,与大家分享。五年前,我想做视频字幕,需要把视频录制好并上传到电脑然后打开PR每分每秒的添加字幕,花费一小时甚至更长时间。今天,我只需要打开一个APP的自动字幕功能,几秒就可以搞定。现在,人人都可以是视频大师。01 分析目的目前内容类产品(长..._在线课程拍摄 需求分析方案怎么写

uniapp 电商app 手机充值页面_uniapp 充值页面-程序员宅基地

文章浏览阅读3.5k次。电商app支持手机充值现在很多的电商app都是支持手机充值的,我们公司也实现了这个功能。功能很简单,写文章主要是为了记录,没有什么技术难点。获取手机充值配置页面加载的时候,需要展示一个默认运营商的手机充值配置,我们公司默认的是联通的配置。获取配置的接口可以写在onload函数中。函数触发流程:先判断公司是否有可用余额,这是一个接口。在获取默认联通的手机配置信息,并渲染。获取手机运营商获取手机运营商的信息,一般都是通过手机号前3位或者前4位,所以统一一下,当手机位数超过4位时,进行手_uniapp 充值页面

PyCharm/IDEA等工具使用git时设置不要提交系统文件,或者忽略提交文件夹_idea workspace.xml不提交-程序员宅基地

文章浏览阅读1w次,点赞3次,收藏22次。一、在PyCharm/IDEA等工具中安装.ignore插件忽略不必要提交的文件在使用Pycharm或者IDEA时,git提交项目到本地仓库的时候,会把类似下面代码提交,不要将多余的代码提交,类似用IDE工具写代码的时候,会默认生成配置文件 编译的时候会生成本地编译后的target文件 单位测试后会生成test文件 本地的log日志文件这里面放的是一些项目的配置信息,包括历史记录..._idea workspace.xml不提交

通过Navicat导入SQLServer的MDF文件和LDF文件-程序员宅基地

文章浏览阅读2.7k次。由于项目需要,我仅有MDF和LDF文件,使用第三方工具进行导入数据库。1.采用windows连接2.新建查询:EXEC sp_attach_db @dbname = '你的数据库名', @filename1 = 'mdf文件路径(包缀名)', @filename2 = 'Ldf文件路径(包缀名)'例如 :EXEC sp_attach_..._navicat sqlserver mdf文件

【Linux】进程的优先级及linux下进程的调度于切换-程序员宅基地

文章浏览阅读854次,点赞30次,收藏29次。优先级决定了进程享受资源的前后,如果进程的优先级很小,调度器cpu在短时间内较大概率会频繁的调度这个进程,导致调度不太平衡,导致优先级高的优先得到资源,后续还有源源不断的进程产生,最后会导致常规进程很难得到cpu资源,意味着这个进程很长时间不被调度,作为一个要运行的进程,变得很卡顿,而其他优先级高的进程很快就跑完了,所以,这种情况称之为“进程饥饿”,就像去打饭长由于被插队长时间打不到饭。为什么需要运行队列,cpu只有一个。当前进程的信息都在寄存器保存,如果进程运行时间片到了,进程切换时,将临时数据带走,

vue打包报错处理_at root._error (e:\working\vue_project\vue-h5\node-程序员宅基地

文章浏览阅读821次。npm run build 打包vue项目报如下错误Module build failed: Error: Node Sass does not yet support your current environment: Windows 64-bit with Unsupported runtime解决:由于NodeSass版本过低1 找到项目node_modules目录下的node-sass文件夹,删除掉node-sass文件夹2 在node-sass文件夹所在目录,输入cmd,执行._at root._error (e:\working\vue_project\vue-h5\node_modules\postcss-selector-

推荐文章

热门文章

相关标签