matlab 边缘提取 代码,边缘提取和边缘检测matlab程序代码大全.doc

6894c33e9ea850e48a01b600503581d3.gif边缘提取和边缘检测matlab程序代码大全.doc

附 录Part1:对 cameraman 原始图像处理的仿真程序:clcclear allclose allA = imread( cameraman.bmp ); % 读入图像subplot(2,4,1);imshow(A);title( 原图 );x_mask = [1 0;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;0 0 0;1 2 1]; 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;0 0 0;1 1 1]; 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;0 0 0;1 2 1]; % 建立方向模板mask2=[-2 -1 0;-1 0 1;0 1 2];mask3=[-1 0 1;-2 0 2;-1 0 1];mask4=[0 1 2;-1 0 1;-2 -1 0];mask5=[1 2 1;0 0 0;-1 -2 -1];mask6=[2 1 0;1 0 -1;0 -1 -2];mask7=[1 0 -1;2 0 -2;1 0 -1]; mask8=[0 -1 -2;1 0 -1;2 1 0]; 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 仿真程序:clcclear allclose allA = imread( cameraman.bmp ); % 读入图像V=0.009;X=imnoise(A, gaussian ,0,V);subplot(2,4,1);imshow(X);%添加均值为 0、方差 0.09 的高斯噪声x_mask = [1 0;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;0 0 0;1 2 1]; 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;0 0 0;1 1 1]; 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;0 0 0;1 2 1]; % 建立方向模板mask2=[-2 -1 0;-1 0 1;0 1 2];mask3=[-1 0 1;-2 0 2;-1 0 1];mask4=[0 1 2;-1 0 1;-2 -1 0];mask5=[1 2 1;0 0 0;-1 -2 -1];mask6=[2 1 0;1 0 -1;0 -1 -2];mask7=[1 0 -1;2 0 -2;1 0 -1]; mask8=[0 -1 -2;1 0 -1;2 1 0]; 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 改进算子 );加入椒盐噪声的边缘检测程序:function jingdianI=imread( lenna.bmp );I1=imnoise(I, salt %添加椒盐噪声,默认值为 0.02figure,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;0 0 0;1 2 1]; % 建立方向模板mask2=[-2 -1 0;-1 0 1;0 1 2];mask3=[-1 0 1;-2 0 2;-1 0 1];mask4=[0 1 2;-1 0 1;-2 -1 0];mask5=[1 2 1;0 0 0;-1 -2 -1];mask6=[2 1 0;1 0 -1;0 -1 -2];mask7=[1 0 -1;2 0 -2;1 0 -1]; mask8=[0 -1 -2;1 0 -1;2 1 0]; 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;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 改进算子 );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值