美文网首页
拉布拉斯算子锐化图像的空域和频域--matlab实现

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

作者: glider312 | 来源:发表于2019-11-27 09:51 被阅读0次

本文将用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实现

      本文链接:https://www.haomeiwen.com/subject/lwoewctx.html