服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - 一文详解matlab实现形态学图像处理

一文详解matlab实现形态学图像处理

2023-03-09 16:15timerring C/C++

这篇文章主要为大家介绍了matlab实现形态学图像处理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

目的

文章和代码以及样例图片等相关资源,已经归档至【Github仓库:digital-image-processing-matlab

  • 膨胀的简单应用、使用 strel 函数、腐蚀的说明
  • 函数imopen 和imclose 的应用、使用IPT函数bwhitmiss
  • 灰度图像形态学开运算和闭运算
  • 灰度图像形态学使用重构删除复杂图像的背景

内容

膨胀的简单应用

?
1
2
3
4
5
A=imread('D:\pic\DIP3E_CH04\Fig0419(a)(text_gaps_of_1_and_2_pixels).tif');
figure, imshow(A)
B=[0 1 0;1 1 1;0 1 0];
A2=imdilate(A,B);
figure,imshow(A2)

使用 strel 函数分解结构元素的说明

?
1
2
3
4
5
6
7
se=strel('diamond',5)
decomp=getsequence(se);
whos
decomp(1)
decomp(2)
decomp(3)
decomp(4)

腐蚀的说明

?
1
2
3
4
5
6
7
8
9
10
A=imread('D:\pic\DIP3E_CH09\Fig0905(a)(wirebond-mask).tif');
figure, imshow(A)%原图像
se=strel('disk',10)
A2=imerode(A,se)
figure, imshow(A2)%半径为10 的圆盘腐蚀后的图像
se=strel('disk',5)
A3=imerode(A,se)
figure, imshow(A3)%半径为5 的圆盘腐蚀后的图像
A4=imerode(A,strel('disk',20))
figure, imshow(A4)%半径为20 的圆盘腐蚀后的图像

函数imopen 和imclose 的应用

?
1
2
3
4
5
6
7
8
9
f=imread('D:\pic\DIP3E_CH09\Fig0905(a)(wirebond-mask).tif');
figure, imshow(f)%原图像
se=strel('square',20);
fo=imopen(f,se);
figure, imshow(fo)%开运算后的图像
fc=imclose(f,se);
figure, imshow(fc)%闭运算后的图像
foc=imclose(fo,se);
figure, imshow(foc)%图像A2 经闭运算后的图像

使用 IPT 函数bwhitmiss

?
1
2
3
4
5
6
f=imread('D:\pic\DIP3E_CH09\FigP0918(left).tif')
figure,imshow(f)
B1=strel([0 0 0;0 1 1;0 1 0]);
B2=strel([1 1 1;1 0 0;1 0 0]);
g=bwhitmiss(f,B1,B2);
figure,imshow(g)

灰度图像形态学开运算和闭运算

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
%%%%%%%%%使用开运算和闭运算做形态学平滑%%%%%%%%%%%%%%%%%
clear all
clc
f=imread('D:\pic\DIP3E_CH09\Fig0941(a)(wood_dowels).tif');
figure, imshow(f)%原图像
se=strel('disk',5);
fo=imopen(f,se);
figure, imshow(fo)%开运算后的图像
foc=imclose(fo,se);
figure, imshow(foc)%图像A2 经闭运算后的图像
fasf=f;
for k=2:5
    se=strel('disk',k);
    fasf=imclose(imopen(fasf,se),se);
end
figure,imshow(fasf) %%%%%% 交替顺序滤波后的图像
%%%%%%%%%%使用顶帽变换%%%%%%%%%%%%%%
clear all
clc
f=imread('D:\pic\DIP3E_CH09\Fig0940(a)(rice_image_with_intensity_gradient).tif');
figure, imshow(f)%原图像
se=strel('disk',10);
fo=imopen(f,se);
figure, imshow(fo)%经开运算处理后的图像
f2=imsubtract(f,fo);
figure, imshow(f2)
f2=imtophat(f,se);
figure, imshow(f2)
se=strel('disk',3);
g=imsubtract(imadd(f,imtophat(f,se)),imbothat(f,se));%低帽、顶帽
figure, imshow(g)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%颗粒分析%%%%%%%%%%%%%%
clear all
clc
f=imread('D:\pic\DIP3E_CH09\Fig0940(a)(rice_image_with_intensity_gradient).tif');
sumpixels=zeros(1,36);
for k=0:35
    se=strel('disk',k);
    fo=imopen(f,se);
    sumpixels(k+1)=sum(fo(:));
end
figure,plot(0:35,sumpixels);
xlabel('k');
ylabel('surface area')
figure, plot(-diff(sumpixels))
xlabel('k');
ylabel('surface area reduction')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

灰度图像形态学使用重构删除复杂图像的背景

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
%灰度图像形态学使用重构删除复杂图像的背景
clear all
clc
f=imread('D:\pic\DIP3E_CH09\Fig0944(a)(calculator).tif');
figure, imshow(f)%原图像
f_obr=imreconstruct(imerode(f,ones(1,71)),f);
figure, imshow(f_obr)
f_o=imopen(f,ones(1,71));%for comparison
figure, imshow(f_o)
f_thr=imsubtract(f,f_obr);
figure, imshow(f_thr)
f_th=imsubtract(f,f_o);%or imtophat(f,ones(1,71))
figure, imshow(f_th)
g_obr=imreconstruct(imerode(f_thr,ones(1,11)),f_thr);
figure, imshow(g_obr)
g_obrd=imdilate(g_obr,ones(1,21));
figure, imshow(g_obrd)
f2=imreconstruct(min(g_obrd,f_thr),f_thr);
figure, imshow(f2)

参考文献:

[1] Rafael C. Gonzalez, Richard E. Woods, and Steven L. Eddins. 2003. Digital Image Processing Using MATLAB. Prentice-Hall, Inc., USA.

[2] 阮秋琦. 数字图像处理(MATLAB版)[M]. 北京:电子工业出版社, 2014.

[3] 冈萨雷斯. 数字图像处理(第三版)[M]. 北京:电子工业出版社, 2011.

以上就是一文详解matlab实现形态学图像处理的详细内容,更多关于matlab形态学图像处理的资料请关注服务器之家其它相关文章!

原文链接:https://juejin.cn/post/7207824074709270587

延伸 · 阅读

精彩推荐
  • C/C++教你在VS2022 MFC程序中调用CUDA代码的方法

    教你在VS2022 MFC程序中调用CUDA代码的方法

    这篇文章主要介绍了在VS2022 MFC程序中调用CUDA代码,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的...

    simple_whu3502022-11-20
  • C/C++C语言关于注释的知识点总结

    C语言关于注释的知识点总结

    在本篇文章里小编给大家分享的是关于C语言关于注释的知识点总结,需要的朋友们可以参考学习下。...

    藏色散人6742021-08-17
  • C/C++C语言朴素模式匹配算法实例代码

    C语言朴素模式匹配算法实例代码

    朴素模式匹配算法也称为布鲁特-福斯算法,感觉很是高大上,但是实现起来很简单。这篇文章主要给大家介绍了关于C语言朴素模式匹配算法的相关资料,需...

    bfhonor8322021-11-12
  • C/C++STL中vector的使用你了解吗

    STL中vector的使用你了解吗

    这篇文章主要为大家详细介绍了STL中vector的使用,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带...

    卖寂寞的小男孩10502022-10-31
  • C/C++C语言中指针和数组试题详解分析

    C语言中指针和数组试题详解分析

    变量存放在内存中,内存其实就是一组有序字节组成的数组,每个字节有唯一的内存地址。CPU 通过内存寻址对存储在内存中的某个指定数据对象的地址进行...

    Dark And Grey3652022-02-12
  • C/C++剖析C++的面向对象编程思想

    剖析C++的面向对象编程思想

    这篇文章主要介绍了剖析C++的面向对象编程思想,C++的面向对象特性是其对C语言的重要拓展之处,需要的朋友可以参考下...

    C++教程网12822021-03-13
  • C/C++详解C++中变量的初始化规则

    详解C++中变量的初始化规则

    这篇文章详细介绍了关于C++中变量的初始化规则,C++如果不对变量初始化,可能会导致很多后果,所以学习C++变量初始化规则就很重要了,下面一起来看看...

    C++教程网9302021-04-15
  • C/C++C++实现雷霆战机可视化小游戏

    C++实现雷霆战机可视化小游戏

    这篇文章主要为大家详细介绍了C++实现雷霆战机可视化小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    木笔#11222021-10-07