clc;
clear all;
I=im2double(imread('D:\Gray Files\3-33.tif'));
KernelType=4;
c=1;
%扩展区域的行列数
KernelSize=3;
len=floor(KernelSize/2);
%对原始图像进行扩展,此处采用了镜像扩展,目的是解决边缘计算的问题
f_pad=padarray(I,[len,len],'symmetric');
[M,N]=size(f_pad);
switch KernelType
case -4
L=[0 1 0;
1 -4 1;
0 1 0];
case -8
L=[1 1 1;
1 -8 1;
1 1 1];
case 4
L=[0 -1 0;
-1 4 -1;
0 -1 0];
case 8
L=[-1 -1 -1;
-1 8 -1;
-1 -1 -1];
%接下来两个是合成拉普拉斯算子
case 5
L=[0 -1 0;
-1 5 -1;
0 -1 0];
case 9
L=[-1 -1 -1;
-1 9 -1;
-1 -1 -1];
end
if KernelType>0
a=1;
else
a=-1;
end
for i=1+len:M-len
for j=1+len:N-len
%从扩展图像中,取出局部图像
Block=f_pad(i-len:i+len,j-len:j+len);
%将拉普拉斯算子的结果作用于原始图像,得到输出图像
g(i-len,j-len)=I(i-len,j-len)+ a*sum(sum(Block.*L));
%保留拉普拉斯算子的运算结果
edge(i-len,j-len)=a*sum(sum(Block.*L));
end
end
imshow(g);
title('拉氏算子滤波');