matlab图像算子变换,拉布拉斯算子锐化图像的空域和频域--matlab实现

本文将用matlab实现拉布拉斯算子提取边缘,锐化图像。分别采用空域和频域两种方法。

空域

步骤:

1.读取图像/(标定)

2.生成空间滤波器(fspecial('laplacian',0))

3.卷积(m = imfilter(f,w,'replicate'))

clear all;

f = imread('D:\moon.tif')

%a

figure(1)

imshow(f,[]);

title('a')

% b

w = fspecial('laplacian',0); %生成空间滤波器

m = imfilter(f,w,'replicate'); %'replicate'通过复制外边界的值来扩展 默认相关

figure(2)

imshow(m,[]);

title('b')

%c

f2 = im2double(f); %标定,将负数变为0,有更好的锐化效果

n = imfilter(f2,w,'replicate');

figure(3)

imshow(n,[])

title('c')

%d

m1 = f - m;

figure(4)

imshow(m1,[]);

title('d')

%e

n1 = f2 - n;

figure(5)

imshow(n1,[]);

title('e')

频域

步骤:

1.读取图像

2.补0,使图像长、宽变为原来两倍

3.将图像移到补零后的中心

4.傅里叶变换

5.在频域进行运算

6.傅里叶逆变换取实部

7.把图像移回原来位置并取原来size的区域

%步骤1

clear all;

f = imread('D:\moon.tif')

f=double(f);

[m,n]=size(f);

%a

figure(1)

imshow(f,[]);

title('origin')

%步骤2

p=2*m;

q=2*n;

A=zeros(p,q);

for i=1:m

for j=1:n

A(i,j)=f(i,j);

end

end

%步骤3

for i=1:p

for j=1:q

A(i,j)=A(i,j)*(-1)^(i+j);

end

end

%步骤4

I2=fft2(A);

%步骤5

for i=1:p

for j=1:q

D(i,j)=sqrt((i-p/2)^2+(j-q/2)^2);

end

end

X=zeros(p,q);

%pi=3.14

for i=1:p

for j=1:q

X(i,j)=-4*pi^2*D(i,j)^2;

Y(i,j)=X(i,j)*I2(i,j);

end

end

%步骤6

gp3=real(ifft2(Y));

%步骤7

for i=1:p

for j=1:q

gp3(i,j)=gp3(i,j).*(-1).^(i+j);

end

end

figure(3);

imshow(gp3,[]);

%归一化,目的是让后面gs的第一项和第二项同一个数量级

gp3max = max(gp3(:));

g3 = gp3(1:m,1:n);

k=10; %k自己取,用来改变锐化项的比例

gs = f-k*g3/gp3max;

figure(2)

imshow(gs,[]),title('拉普拉斯锐化图')

你可能感兴趣的:(matlab图像算子变换)