matlab拉普拉斯算子锐化滤波

一. 本文主要是在给出拉普拉斯锐化算子公式的情况下,在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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。