图像分割和形态学处理与MATLAB实现Word下载.docx
《图像分割和形态学处理与MATLAB实现Word下载.docx》由会员分享,可在线阅读,更多相关《图像分割和形态学处理与MATLAB实现Word下载.docx(19页珍藏版)》请在冰豆网上搜索。
w=[-1-1-1;
-18-1;
-1-1-1]
g=abs(imfilter(double(data),w));
t=max(g(:
));
g1=(g>
=t);
[mn]=find(g1)
figure
imshow(data)
holdon
plot(n,m,'
ro'
)
=t-200);
=t-800);
)
5.1.2效果
分析:
随着阈值的减小,所检测出的点越来越多
5.2阈值分割方法2——线检测
5.2.1程序
clear
xian.jpg'
subplot(221),imshow(data);
title('
检测指定方向线的原始图像'
w=[2-1-1;
-12-1;
-1-12];
subplot(222),imshow(g,[])
使用-45度检测器处理后的图像'
gtop=g(1:
40,1:
40);
gtop=pixeldup(gtop,4);
%piceldup函数是将图片放大相应倍数
subplot(223),imshow(gtop,[])
-45度检测后左上角放大图'
gbot=g(end-40:
end,end-40:
end);
gbot=pixeldup(gbot,4);
subplot(224),imshow(gbot,[])
-45度检测后右下角后放大图'
5.2.2处理效果
-45度方向上的直线,经过处理后效果明显,其他方向上的线比较模糊。
5.3阈值分割方法3——边缘检测
5.3.1程序
clc
f=imread('
bianyuan.jpg'
f=rgb2gray(f);
subplot(321),imshow(f);
sobel检测的原始图像'
[gv,t]=edge(f,'
sobel'
'
vertical'
%斜线因为具有垂直分量,所以也能够被检测出来
subplot(322),imshow(gv);
sobel垂直方向检测后图像'
gv=edge(f,'
0.15,'
subplot(323),imshow(gv);
sobel垂直检测0.15阈值后图像'
gboth=edge(f,'
0.15);
subplot(324),imshow(gboth);
sobel水平垂直方向阈值0.15后图像'
w45=[-2-1086-10187012];
g45=imfilter(double(f),w45,'
replicate'
T=0.3*max(abs(g45(:
)));
g45=g45>
=T;
subplot(325),imshow(g45);
sobel正45度方向上检测图'
w_45=[0-1-29510-196210];
g_45=imfilter(double(f),w_45,'
T=0.3*max(abs(g_45(:
g_45=g_45>
subplot(326),imshow(g_45);
sobel负45度方向上检测图'
5.3.2效果
5.3.2边缘检测器的比较
5.3.2.1程序
dalouj.jpg'
imshow(f)
[g_sobel_default,ts]=edge(f,'
imshow(g_sobel_default);
gsobeldefault'
[g_log_default,tlog]=edge(f,'
log'
imshow(g_log_default);
glogdefault'
[g_canny_default,tc]=edge(f,'
canny'
figure,imshow(g_canny_default);
gcannydefault'
g_sobel_best=edge(f,'
0.25);
figure,imshow(g_sobel_best);
gsobelbest'
g_log_best=edge(f,'
0.003,2.25);
figure,imshow(g_log_best);
glogbest'
g_canny_best=edge(f,'
[0.040.10],1.5);
figure,imshow(g_canny_best);
gcannybest'
5.3.2.1效果
5.2编程实现膨胀和腐蚀
5.2.1膨胀
5.2.1.1程序
A1=imread('
beitie.jpg'
A1=im2bw(A1);
B=[1111
1111
1111
1111];
A2=imdilate(A1,B);
%图像A1被结构元素B膨胀
A3=imdilate(A2,B);
A4=imdilate(A3,B);
figure,imshow(A1);
imdilate膨胀原始图像'
figure,imshow(A2);
使用B后1次膨胀后的图像'
figure,imshow(A3);
使用B后2次膨胀后的图像'
figure,imshow(A4);
使用B后3次膨胀后的图像'
5.2.1.2效果
5.2.2腐蚀
5.2.2.1程序
原始图像'
se1=strel('
disk'
2);
A2=imerode(A1,se1);
用disk
(2)腐蚀后的图像'
se2=strel('
4);
A3=imerode(A1,se2);
用disk(4)腐蚀后的图像'
se3=strel('
6);
A4=imerode(A1,se3);
用disk(6)腐蚀后的图像'
5.2.2.2效果
5.3编程实现开运算和闭运算
5.3.1开运算
5.3.1.1程序
f=im2bw(f);
%se=strel('
square'
5'
%方型结构元素
se=strel('
%圆盘型结构元素
imshow(f);
%原图像
运算原始图像'
fo=imopen(f,se);
imshow(fo);
直接开运算'
5.3.1.2效果
5.3.2闭运算
title('
fc=imclose(f,se);
%直接闭运算
figure,imshow(fc);
直接闭运算'
foc=imclose(fc,se);
%先开后闭运算
figure,imshow(foc);
先开后闭运算'
fco=imopen(fc,se);
%先闭后开运算
figure,imshow(fco);
先闭后开运算'
5.3.2.2效果
5.4编程实现提取骨架和细化
5.4.1提取骨架
5.4.1.1程序
guge.jpg'
figure,imshow(f);
骨架提取原图'
g1=bwmorph(f,'
skel'
1);
figure,imshow(g1);
骨架提取1次'
g2=bwmorph(f,'
5);
figure,imshow(g2);
骨架提取5次'
g3=bwmorph(f,'
20);
figure,imshow(g3);
骨架提取20次'
g4=bwmorph(f,'
Inf);
figure,imshow(g4);
骨架提取无穷大次'
fork=1:
5
g3=g3&
~endpoints(g3);
end
骨架提取并消除毛刺'
5.4.1.2效果
5.4.2细化
5.4.2.1程序
zhiwen.jpg'
f=~f;
指纹细化原图'
thin'
指纹细化1次'
指纹细化5次'
指纹细化无穷大次'
5.4.2.2效果