图像分割——线检测——拉普拉斯标定(Matlab)

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

 

你可能感兴趣的:(图像处理,图像分割,线检测,拉普拉斯标定)