图像分割——线检测——拉普拉斯标定(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

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值