matlab实现形态学图像处理

简介: matlab实现形态学图像处理
文章和代码以及样例图片等相关资源,已经归档至【Github仓库: digital-image-processing-matlab】或者公众号【AIShareLab】回复 数字图像处理 也可获取。

目的

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

内容

膨胀的简单应用

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 函数分解结构元素的说明

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

腐蚀的说明

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 的应用

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

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)

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

%%%%%%%%%使用开运算和闭运算做形态学平滑%%%%%%%%%%%%%%%%%
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')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

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

%灰度图像形态学使用重构删除复杂图像的背景
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.](https://github.com/timerring/digital-image-processing-matlab/blob/main/reference/Digital_Image_Processing_(MATLAB_version).pdf)

[3] [冈萨雷斯. 数字图像处理(第三版)[M]. 北京:电子工业出版社, 2011.](https://github.com/timerring/digital-image-processing-matlab/blob/main/reference/Digital_Image_Processing_(Third_Edition).pdf)

目录
相关文章
|
5月前
|
计算机视觉
图像处理基础篇-形态学处理-边缘检测(matlab仿真与图像处理系列第4期)
图像处理基础篇-形态学处理-边缘检测(matlab仿真与图像处理系列第4期)
|
5月前
|
机器学习/深度学习 并行计算 算法
霍夫变换椭圆检测(matlab仿真与图像处理系列第2期)
霍夫变换椭圆检测(matlab仿真与图像处理系列第2期)
|
5月前
|
算法 计算机视觉
永磁同步电机的矢量控制PMSM仿真+simulink仿真建模(matlab仿真与图像处理)
永磁同步电机的矢量控制PMSM仿真+simulink仿真建模(matlab仿真与图像处理)
|
2月前
|
计算机视觉
【图像处理】基于灰度矩的亚像素边缘检测方法理论及MATLAB实现
基于灰度矩的亚像素边缘检测方法,包括理论基础和MATLAB实现,通过计算图像的灰度矩来精确定位边缘位置,并提供了详细的MATLAB代码和实验结果图。
79 6
|
2月前
|
计算机视觉
【图像处理】基于Zernike矩的亚像素边缘检测理论及MATLAB实现
基于Zernike矩的亚像素边缘检测理论,并提供了相应的MATLAB代码实现,包括定义7x7的Zernike模板、图像处理、边缘检测和连通域分析等步骤。
88 1
|
4月前
|
机器学习/深度学习 数据可视化 算法
探索MATLAB世界:掌握基础知识与实用技能(1. MATLAB环境与基本操作 2. 数据类型与变量 3. 条件与循环,1. 数据分析与统计 2. 图像处理与计算机视觉 3. 信号处理与控制系统)
探索MATLAB世界:掌握基础知识与实用技能(1. MATLAB环境与基本操作 2. 数据类型与变量 3. 条件与循环,1. 数据分析与统计 2. 图像处理与计算机视觉 3. 信号处理与控制系统)
46 0
|
5月前
|
机器学习/深度学习 算法 计算机视觉
霍夫变换车道线识别-车牌字符识别代码(matlab仿真与图像处理系列第5期)
霍夫变换车道线识别-车牌字符识别代码(matlab仿真与图像处理系列第5期)
|
5月前
|
编解码 并行计算 算法
如何在 MATLAB 中进行图像分割(matlab仿真与图像处理系列第7期)
如何在 MATLAB 中进行图像分割(matlab仿真与图像处理系列第7期)
|
机器学习/深度学习 传感器 算法
【红外图像】利用红外图像处理技术对不同制冷剂充装的制冷系统进行性能评估(Matlab代码实现)
【红外图像】利用红外图像处理技术对不同制冷剂充装的制冷系统进行性能评估(Matlab代码实现)
|
机器学习/深度学习 传感器 算法
【视频去噪】基于全变异正则化最小二乘反卷积是最标准的图像处理、视频去噪研究(Matlab代码实现)
【视频去噪】基于全变异正则化最小二乘反卷积是最标准的图像处理、视频去噪研究(Matlab代码实现)

热门文章

最新文章