matlab边缘检测算法汇总2

2019-04-13 17:35发布

4.      基于小波变换模极大值的边缘检测 具体实现步骤如下: 1 对于原始图像进行二进离散平稳小波变换; 2 通过变化系数,得到图像的水平方向和垂直方向的小波变换系数,并计算器小波变换的模值和梯度方向; 3 求局部模极大值。    clear all; load wbarb; I = ind2gray(X,map);imshow(I); I1 = imadjust(I,stretchlim(I),[0,1]);figure;imshow(I1); [N,M] = size(I); h = [0.125,0.375,0.375,0.125]; g = [0.5,-0.5]; delta = [1,0,0]; J = 3; a(1:N,1:M,1,1:J+1) = 0; dx(1:N,1:M,1,1:J+1) = 0; dy(1:N,1:M,1,1:J+1) = 0; d(1:N,1:M,1,1:J+1) = 0; a(:,:,1,1) = conv2(h,h,I,'same'); dx(:,:,1,1) = conv2(delta,g,I,'same'); dy(:,:,1,1) = conv2(g,delta,I,'same'); x = dx(:,:,1,1); y = dy(:,:,1,1); d(:,:,1,1) = sqrt(x.^2+y.^2); I1 = imadjust(d(:,:,1,1),stretchlim(d(:,:,1,1)),[0 1]);figure;imshow(I1); lh = length(h); lg = length(g); for j = 1:J+1 lhj = 2^j*(lh-1)+1; lgj = 2^j*(lg-1)+1; hj(1:lhj)=0; gj(1:lgj)=0; for n = 1:lh hj(2^j*(n-1)+1)=h(n); end for n = 1:lg gj(2^j*(n-1)+1)=g(n); end a(:,:,1,j+1) = conv2(hj,hj,a(:,:,1,j),'same'); dx(:,:,1,j+1) = conv2(delta,gj,a(:,:,1,j),'same'); dy(:,:,1,j+1) = conv2(gj,delta,a(:,:,1,j),'same'); x = dx(:,:,1,j+1); y = dy(:,:,1,j+1); dj(:,:,1,j+1) = sqrt(x.^2+y.^2); I1 = imadjust(dj(:,:,1,j+1),stretchlim(dj(:,:,1,j+1)),[0 1]);figure;imshow(I1); end
5.      基于二维有限的特定角度边缘检测 数字滤波器根据其冲击响应函数的时域特性可分为两类:IIR(无限长冲击响应滤波器)和FIR(有限长冲击响应滤波器)。运用与有限冲击响应卷积核相同的原理,可以检测任意角度的边缘。 有限冲击响应卷积核: % 输入图像,并将其转化成灰度图像 I=imread('qipan.jpg'); I=rgb2gray(I); % 构造卷积核 F2=[-1 -1 0 0 -1 0 0 1 1 1]; % 进行卷积运算 A=conv2(double(I),double(F2)); % 转换成8位无符号整型并显示 A=uint8(A); imshow(A)

检测特定角度的边缘:% 输入图像,并将其转化成灰度图像 I=imread('qipan.jpg'); I=rgb2gray(I); f=im2double(I); choice = 0; % 构造卷积核 H = [-1 -1 -1;2 2 2;-1 -1 -1]; V = [-1 2 -1;-1 2 -1;-1 2 -1]; while(choice ~= 3) choice = input('1:Horizontal 2:vertical 3:Exit Enter your choice:'); %根据不同的要求与不同的卷积核进行滤波 switch choice case 1 DH = imfilter(f,H); figure(2),imshow(f),title('原始图像'); figure(3),imshow(DH),title('水平方向'); case 2 DV = imfilter(f,V); %figure(4),imshow(I),title('原始图像'); figure(5),imshow(DV),title('垂直方向'); case 3 display('Program Exited'); otherwise display('Wrong choice!!!'); end end

6.      基于多尺度形态学梯度的边缘检测 % 读入并显示原始图像 I=imread('**.jpg'); grayI=rgb2gray(I); figure,imshow(grayI) % 利用单尺度形态学梯度进行边缘检测 se=strel('square',3); grad=imdilate(grayI,se)-imerode(grayI,se); figure,imshow(grad) % 利用多尺度形态学梯度进行边缘检测 se1=strel('square',1); se2=strel('square',3); se3=strel('square',5); se4=strel('square',7); grad1=imerode((imdilate(grayI,se2)-imerode(grayI,se2)),se1); grad2=imerode((imdilate(grayI,se3)-imerode(grayI,se3)),se2); grad3=imerode((imdilate(grayI,se4)-imerode(grayI,se4)),se3); multiscaleGrad=(grad1+grad2+grad3)/3; figure,imshow(multiscaleGrad)