美文网首页
matlab拉普拉斯算子锐化滤波

matlab拉普拉斯算子锐化滤波

作者: 瀚海星云plus | 来源:发表于2019-04-17 19:51 被阅读0次

    一. 本文主要是在给出拉普拉斯锐化算子公式的情况下,在matlab上实现代码设计。拉普拉斯算子是最简单的各向同性微分算子,有几种常用的滤波模板,本文使用的是八邻域模板,如下所示


    image.png

    其对应的计算公式为:


    image.png

    因此最后得到的锐化后的图像表示为:


    image.png
    其中,g(x,y)是输出图像,f(x,y)是原图像,c是常数,取为1.

    二. 代码实现如下

    %拉普拉斯算子锐化滤波
    %M,N是滤波器的模板,为方便,应为同型奇数,如3x3,5x5
    function dstImg=laShapeFilter(oriImg,M,N)
    
    [m,n,~] = size(oriImg);
    dstImg = zeros(m,n);
    
    %扩展
    extendOriImg = zeros(m+M-1,n+N-1);
    start = fix(M/2);
    for i = 1:m
        for j = 1:n
            extendOriImg(i+start,j+start) = oriImg(i,j);
        end
    end
    
    sum = 0;
    %算法的执行,逐行扫描
    for i = start+1:m+start
        for j = start+1:n+start
            
            for ii = -start:start
                for jj = -start:start
                    if (ii==0) && (jj==0)
                        sum = sum + 8 * extendOriImg(i+ii,j+jj);
                    else 
                       sum = sum - extendOriImg(i+ii,j+jj); 
                    end
                end
            end
           dstImg(i-start,j-start) = sum;
           sum = 0;
        end
    end
    
    

    测试编写好的之后的函数

    close all;
    clear all;
    
    oriImg = imread('your own image path');
    
    oriImg = im2double(oriImg);
    fImg = laShapeFilter(oriImg,3,3);
    
    % 标定图像到0-255
    fm = fImg - min(min(fImg));
    gImg = uint8(255 * (fm/max(max(fm))));
    
    %原图像和拉普拉斯处理后的图像相加得到锐化后的图像
    fImg = im2double(fImg);
    dstImg = oriImg + fImg;
    
    subplot(2,2,1);imshow(oriImg);title('原图像');
    subplot(2,2,2);imshow(fImg);title('未标定后的图像');
    subplot(2,2,3);imshow(gImg);title('标定后的图像');
    subplot(2,2,4);imshow(dstImg);title('锐化后的图像');
    

    结果如下:


    image.jpg

    观测结果可知,图像表面的细节明显被锐化增强了,同时背景色调也很好的保留了。

    相关文章

      网友评论

          本文标题:matlab拉普拉斯算子锐化滤波

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