边缘提取和边缘检测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));
dd=max(dd,abs(d8));
grad=mat2gray(dd);%将灰度变化矩阵转化为灰度图像
level=graythresh(grad);%计算灰度阈值
据调查,大学生对此类消费的态度是:
手工艺制品消费比“负债”消费更得人心。
BW=im2bw(grad,level);%用阈值分割梯度图像
随着社会经济、文化的飞跃发展,人们正从温饱型步入小康型,崇尚人性和时尚,不断塑造个性和魅力的现代文化价值观念,已成为人们的追求目标。
因此,顺应时代的饰品文化显示出强大的发展势头和越来越广的市场,从事饰品销售是有着广阔的市场空间。
BB=grad;
(4)创新能力薄弱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;%计算最佳阈值
(三)大学生购买消费DIY手工艺品的特点分析grad=mat2gray(BB);%将梯度矩阵转化为灰度图像
是□否□BW2=im2bw(grad,T);%用最佳阈值分割梯度图像
2、你大部分的零用钱用于何处?
subplot(2,3,6);
(一)上海的经济环境对饰品消费的影响imshow(BW2);%显示分割后的图像,即边缘图像
(2)物品的独一无二title('加入椒盐噪声的sobel改进算子');