边缘提取和边缘检测matlab程序代码大全汇编.docx
《边缘提取和边缘检测matlab程序代码大全汇编.docx》由会员分享,可在线阅读,更多相关《边缘提取和边缘检测matlab程序代码大全汇编.docx(12页珍藏版)》请在冰豆网上搜索。
边缘提取和边缘检测matlab程序代码大全汇编
附录
Part1:
对cameraman原始图像处理的仿真程序:
clc
clearall
closeall
A=imread('cameraman.bmp');%读入图像
subplot(2,4,1);
imshow(A);title('原图');
x_mask=[10;0-1];%建立X方向的模板
y_mask=rot90(x_mask);%建立Y方向的模板
I=im2double(A);%将图像数据转化为双精度
dx=imfilter(I,x_mask);%计算X方向的梯度分量
dy=imfilter(I,y_mask);%计算Y方向的梯度分量
grad=sqrt(dx.*dx+dy.*dy);%计算梯度
grad=mat2gray(grad);%将梯度矩阵转换为灰度图像
level=graythresh(grad);%计算灰度阈值
BW=im2bw(grad,level);%用阈值分割梯度图像
subplot(2,4,2);
imshow(BW);%显示分割后的图像即边缘图像
title('Roberts');
y_mask=[-1-2-1;000;121];
x_mask=y_mask';
I=im2double(A);
dx=imfilter(I,x_mask);
dy=imfilter(I,y_mask);
grad=sqrt(dx.*dx+dy.*dy);%计算梯度
grad=mat2gray(grad);
level=graythresh(grad);
BW=im2bw(grad,level);
subplot(2,4,3);
imshow(BW);%显示分割后的图像即边缘图像
title('Sobel');
y_mask=[-1-1-1;000;111];
x_mask=y_mask';
dx=imfilter(I,x_mask);
dy=imfilter(I,y_mask);
grad=sqrt(dx.*dx+dy.*dy);%计算梯度
grad=mat2gray(grad);
level=graythresh(grad);
BW=im2bw(grad,level);%用阈值分割梯度图像
subplot(2,4,4);
imshow(BW);%显示分割后的图像即边缘图像
title('Prewitt');
mask=[0,-1,0;-1,4,-1;0,-1,0];%建立模板
dx=imfilter(I,mask);%计算梯度矩阵
grad=mat2gray(dx);%将梯度矩阵转化为灰度图像
BW=im2bw(grad,0.58);%用阈值分割梯度图像
subplot(2,4,5);
imshow(BW);%显示分割后的图像,即梯度图像
title('Laplacian');
mask=[0,0,-1,0,0;0,-1,-2,-1,0;-1,-2,16,-2,-1;0,-1,-2,-1,0;0,0,-1,0,0];%建立模板
dx=imfilter(I,mask);%计算梯度矩阵
grad=mat2gray(dx);%将梯度矩阵转化为灰度图像
BW=im2bw(grad,0.58);
subplot(2,4,6);
imshow(BW);%显示分割后的图像,即梯度图像
title('log');
BW1=edge(I,'canny');%调用canny函数
subplot(2,4,7);
imshow(BW1);%显示分割后的图像,即梯度图像
title('Canny');
mask1=[-1-2-1;000;121];%建立方向模板
mask2=[-2-10;-101;012];
mask3=[-101;-202;-101];
mask4=[012;-101;-2-10];
mask5=[121;000;-1-2-1];
mask6=[210;10-1;0-1-2];
mask7=[10-1;20-2;10-1];
mask8=[0-1-2;10-1;210];
d1=imfilter(I,mask1);%计算8个领域的灰度变化
d2=imfilter(I,mask2);
d3=imfilter(I,mask3);
d4=imfilter(I,mask4);
d5=imfilter(I,mask5);
d6=imfilter(I,mask6);
d7=imfilter(I,mask7);
d8=imfilter(I,mask8);
dd=max(abs(d1),abs(d2));%取差值变化最大的元素组成灰度变化矩阵
dd=max(dd,abs(d3));
dd=max(dd,abs(d4));
dd=max(dd,abs(d5));
dd=max(dd,abs(d6));
dd=max(dd,abs(d7));
dd=max(dd,abs(d8));
grad=mat2gray(dd);%将灰度变化矩阵转化为灰度图像
BB=grad;
FW=median(BB(:
))/0.6745;
B=BB.*BB;
B=sum(B(:
));
FX=sqrt(B/256^2);
FS=sqrt(max(FX^2-FW^2,0));
T=sqrt
(2)*FW^2/FS;%计算最佳阈值
grad=mat2gray(BB);
BW2=im2bw(grad,T);%用最佳阈值分割梯度图像
subplot(2,4,8);
imshow(BW2);%显示分割后的图像,即边缘图像
title('sobel改进算子');
Part2加入高斯噪声后的cameraman仿真程序:
clc
clearall
closeall
A=imread('cameraman.bmp');%读入图像
V=0.009;
X=imnoise(A,'gaussian',0,V);
subplot(2,4,1);
imshow(X);%添加均值为0、方差0.09的高斯噪声
x_mask=[10;0-1];%创建X方向的模板
y_mask=rot90(x_mask);%创建Y方向的模板
I=im2double(X);%图像数据双精度转化
dx=imfilter(I,x_mask);%X方向的梯度分量的计算
dy=imfilter(I,y_mask);%Y方向的梯度分量的计算
grad=sqrt(dx.*dx+dy.*dy);%梯度计算
grad=mat2gray(grad);%梯度矩阵转换成灰度图像
level=graythresh(grad);%计算灰度阈值
BW=im2bw(grad,level);%使用阈值分割梯度图像
subplot(2,4,2);
imshow(BW);%显示分割后的图像即边缘图像
title('Roberts');
y_mask=[-1-2-1;000;121];
x_mask=y_mask';
dx=imfilter(I,x_mask);
dy=imfilter(I,y_mask);
grad=sqrt(dx.*dx+dy.*dy);
grad=mat2gray(grad);%梯度矩阵转为灰度图像
level=graythresh(grad);%计算灰度阈值
BW=im2bw(grad,level);%用阈值分割梯度图像
subplot(2,4,3);
imshow(BW);%显示分割后的图像即边缘图像
title('Sobel');
y_mask=[-1-1-1;000;111];
x_mask=y_mask';
dx=imfilter(I,x_mask);
dy=imfilter(I,y_mask);
grad=sqrt(dx.*dx+dy.*dy);
grad=mat2gray(grad);
level=graythresh(grad);
BW=im2bw(grad,level);
subplot(2,4,4);
imshow(BW);%显示分割后的图像即边缘图像
title('Prewitt');
mask=[0,-1,0;-1,4,-1;0,-1,0];%建立模板
dx=imfilter(I,mask);%计算梯度矩阵
grad=mat2gray(dx);%将梯度矩阵转化为灰度图像
BW=im2bw(grad,0.58);%用阈值分割梯度图像
subplot(2,4,5);
imshow(BW);%显示分割后的图像,即梯度图像
title('Laplacian');
mask=[0,0,-1,0,0;0,-1,-2,-1,0;-1,-2,16,-2,-1;0,-1,-2,-1,0;0,0,-1,0,0];%建立模板
dx=imfilter(I,mask);%计算梯度矩阵
grad=mat2gray(dx);%将梯度矩阵转化为灰度图像
BW=im2bw(grad,0.58);%用阈值分割梯度图像
subplot(2,4,6);
imshow(BW);%显示分割后的图像,即梯度图像
title('log');
BW1=edge(I,'canny');%调用canny函数
subplot(2,4,7);
imshow(BW1);%显示分割后的图像,即梯度图像
title('Canny');
mask1=[-1-2-1;000;121];%建立方向模板
mask2=[-2-10;-101;012];
mask3=[-101;-202;-101];
mask4=[012;-101;-2-10];
mask5=[121;000;-1-2-1];
mask6=[210;10-1;0-1-2];
mask7=[10-1;20-2;10-1];
mask8=[0-1-2;10-1;210];
d1=imfilter(I,mask1);%计算8个领域的灰度变化
d2=imfilter(I,mask2);
d3=imfilter(I,mask3);
d4=imfilter(I,mask4);
d5=imfilter(I,mask5);
d6=imfilter(I,mask6);
d7=imfilter(I,mask7);
d8=imfilter(I,mask8);
dd=max(abs(d1),abs(d2));%取差值变化最大的元素组成灰度变化矩阵
dd=max(dd,abs(d3));
dd=max(dd,abs(d4));
dd=max(dd,abs(d5));
dd=max(dd,abs(d6));
dd=max(dd,abs(d7));
dd=max(dd,abs(d8));
grad=mat2gray(dd);%将灰度变化矩阵转化为灰度图像
BB=grad;
FW=median(BB(:
))/0.6745;
B=BB.*BB;
B=sum(B(:
));
FX=sqrt(B/256^2);
FS=sqrt(max(FX^2-FW^2,0));
T=sqrt
(2)*FW^2/FS;%计算最佳阈值
grad=mat2gray(BB);%将梯度矩阵转化为灰度图像
BW2=im2bw(grad,T);%用最佳阈值分割梯度图像
subplot(2,4,8);
imshow(BW2);%显示分割后的图像,即边缘图像
title('sobel改进算子');
加入椒盐噪声的边缘检测程序:
functionjingdian
I=imread('lenna.bmp');
I1=imnoise(I,'salt&pepper');%添加椒盐噪声,默认值为0.02
figure,imshow(I1);%添加均值为0、方差0.002的高斯噪声
title('添加椒盐噪声后原图')
B1=edge(I1,'roberts');
B2=edge(I1,'sobel');
B3=edge(I1,'prewitt');
B4=edge(I1,'canny');
B5=edge(I1,'log');
subplot(2,3,1);
imshow(B1);title('roberts算子检测');
subplot(2,3,2);
imshow(B2);title('sobel算子检测');
subplot(2,3,3);
imshow(B3);title('prewitt算子检测');
subplot(2,3,4);
imshow(B4);title('canny算子检测');
subplot(2,3,5)
imshow(B5);title('log算子检测');
B1=edge(I1,'roberts');%调用roberts算子检测图像
B2=edge(I1,'sobel');%调用soble算子进行边缘检测
B3=edge(I1,'prewitt');%调用prewitt算子进行边缘检测
B4=edge(I1,'canny');%调用canny算子对图像进行边缘检测
B5=edge(I1,'log');%调用log算子对图像进行边缘检测
subplot(2,3,1);%设置图像布局
imshow(B1);title('roberts算子检测');%现实图像并命名为roberts算子检测
subplot(2,3,2);
imshow(B2);title('sobel算子检测');
subplot(2,3,3);
imshow(B3);title('prewitt算子检测');
subplot(2,3,4);
imshow(B4);title('canny算子检测');
subplot(2,3,5)
imshow(B5);title('log算子检测');
mask1=[-1-2-1;000;121];%建立方向模板
mask2=[-2-10;-101;012];
mask3=[-101;-202;-101];
mask4=[012;-101;-2-10];
mask5=[121;000;-1-2-1];
mask6=[210;10-1;0-1-2];
mask7=[10-1;20-2;10-1];
mask8=[0-1-2;10-1;210];
I=im2double(I1);%将数据图像转化为双精度
d1=imfilter(I,mask1);%计算8个领域的灰度变化
d2=imfilter(I,mask2);
d3=imfilter(I,mask3);
d4=imfilter(I,mask4);
d5=imfilter(I,mask5);
d6=imfilter(I,mask6);
d7=imfilter(I,mask7);
(二)对“碧芝”自制饰品店的分析d8=imfilter(I,mask8);
dd=max(abs(d1),abs(d2));%取差值变化最大的元素组成灰度变化矩阵
木质、石质、骨质、琉璃、藏银……一颗颗、一粒粒、一片片,都浓缩了自然之美,展现着千种风情、万种诱惑,与中国结艺的朴实形成了鲜明的对比,代表着欧洲贵族风格的饰品成了他们最大的主题。
dd=max(dd,abs(d3));
dd=max(dd,abs(d4));
dd=max(dd,abs(d5));
dd=max(dd,abs(d6));
“碧芝自制饰品店”拥有丰富的不可替代的异国风采和吸引人的魅力,理由是如此的简单:
世界是每一个国家和民族都有自己的饰品文化,将其汇集进行再组合可以无穷繁衍。
dd=max(dd,abs(d7));
“碧芝”最吸引人的是那些小巧的珠子、亮片等,都是平日里不常见的。
店长梁小姐介绍,店内的饰珠有威尼斯印第安的玻璃珠、秘鲁的陶珠、奥利的施华洛世奇水晶、法国的仿金片、日本的梦幻珠等,五彩缤纷,流光异彩。
按照饰珠的质地可分为玻璃、骨质、角质、陶制、水晶、仿金、木制等种类,其造型更是千姿百态:
珠型、圆柱型、动物造型、多边形、图腾形象等,美不胜收。
全部都是进口的,从几毛钱一个到几十元一个的珠子,做一个成品饰物大约需要几十元,当然,还要决定于你的心意。
“碧芝”提倡自己制作:
端个特制的盘子到柜台前,按自己的构思选取喜爱的饰珠和配件,再把它们串成成品。
这里的饰珠和配件的价格随质地而各有同,所用的线绳价格从几元到一二十元不等,如果让店员帮忙串制,还要收取10%~20%的手工费。
dd=max(dd,abs(d8));
众上所述,我们认为:
我们的创意小屋计划或许虽然会有很多的挑战和困难,但我们会吸取和借鉴“漂亮女生”和“碧芝”的成功经验,在产品的质量和创意上多下工夫,使自己的产品能领导潮流,领导时尚。
在它们还没有打入学校这个市场时,我们要巩固我们的学生市场,制作一些吸引学生,又有使学生能接受的价格,勇敢的面对它们的挑战,使自己立于不败之地。
grad=mat2gray(dd);%将灰度变化矩阵转化为灰度图像
level=graythresh(grad);%计算灰度阈值
开了连锁店,最大的好处是让别人记住你。
“漂亮女生”一律采用湖蓝底色的装修风格,简洁、时尚、醒目。
“品牌效应”是商家梦寐以求的制胜法宝。
BW=im2bw(grad,level);%用阈值分割梯度图像
但这些困难并非能够否定我们创业项目的可行性。
盖茨是由一个普通退学学生变成了世界首富,李嘉诚是由一个穷人变成了华人富豪第一人,他们的成功表述一个简单的道理:
如果你有能力,你可以从身无分文变成超级富豪;如果你无能,你也可以从超级富豪变成穷光蛋。
BB=grad;
喜欢□一般□不喜欢□FW=median(BB(:
))/0.6745;
B=BB.*BB;
B=sum(B(:
));
FX=sqrt(B/256^2);
FS=sqrt(max(FX^2-FW^2,0));
T=sqrt
(2)*FW^2/FS;%计算最佳阈值
grad=mat2gray(BB);%将梯度矩阵转化为灰度图像
BW2=im2bw(grad,T);%用最佳阈值分割梯度图像
大学生对手工艺制作兴趣的调研subplot(2,3,6);
imshow(BW2);%显示分割后的图像,即边缘图像
title('加入椒盐噪声的sobel改进算子');