clc;
clear all;
close all;
%线检测测试图像(Detection of Line)
I=im2double(imread('D:\Gray Files\10-5.tif'));
[M,N]=size(I);
%%
%===============================线检测(一)===============================
KernelType=-8;
[g,edge]= LaplacianFilter(I,KernelType);
%拉普拉斯标定
%获得最小值
v_min=min(edge(:));
g0=-v_min+edge;
%获得最大值
v_max=max(g0(:));
%拉氏标定
g1=edge/v_max;
%显示标定后的图像
imshow(g1)
拉普拉斯滤波,LaplacianFilter函数如下:
%拉普拉斯算子,二阶导数,锐化图像
function [g,edge]=LaplacianFilter(I,KernelType)
%扩展区域的行列数
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
end