MATLAN图像处理之拉普拉斯图像增强

先看一下结果

关于离散拉普拉斯卷积核的推到见https://www.cnblogs.com/wangduo/p/5979706.html

MATLAN图像处理之拉普拉斯图像增强

图1和图4相比   显然得到了清晰化,下面先介绍一下简单的线性空间滤波原理,其后 由代码生成上述结果

 

 

 

%线性空间滤波
%直接对像素上某领域的像素进行计算,线性计算就是线性空间滤波(空间卷积),否则非线性空间滤波
%将邻域中每个像素与其对应的系数相乘,把结果累加,从而得到(x,y)处的响应
%若邻域大小 m*n 共需要m*n个系数。 将这些系数排列成一个矩阵
%称为 滤波器、掩模、滤波掩模、核、模板、窗口
%为简便起见,常用卷积滤波、掩模、核等术语

%掩模大小均为基数的原则,有意义掩模的最小尺寸3*3
%线性空间滤波,有两个概念必须理解  相关   卷积
%相关是指掩模按一定方式在图像f中的移动过程中计算
%卷积在移动前要将核也就是掩模先旋转180度 在进行移动计算

%MATLAB提供imfilter(f,w,filtering_mode,boundary_options,size_options)
%f原图像  w滤波掩模,g滤波结果,其他参数如下
%滤波类型
%'corr'    相关
%'conv'    卷积
%边界选择(也就是说要不要给原图的边界补零,可以使得运算过程中w的中心和图像第一个像素重合)
%p   输入图像的边界通过值p 来填充,扩展, 默认值是0
%'replicate'  图像大小通过复制到外边界的值来扩充
%'symmetric'  图像大小通过镜像反射其边界来扩充
%'circular'   图像大小通过将图像堪称是一个二维周期函数的一个周期来扩充
%大小选项
%'full'       输出图像的大小与被扩展图像的大小相同
%'same'       输出图像的大小与输入图像的大小相同

%filtering_modey用于指定在滤波过程中是使用相关(corr)还是卷积(conv)
%boundary_options用于处理边界是否填0的问题,边界大小由滤波器大小决定
%size_options可以是'same' 'full'
%imfilter的通用语法  g=imfilter(f,w,'replicate')
%在实现标准线性空间滤波时,会用到上语句,imfilter函数默认使用相关  卷积需要将w旋转180°


%非线性空间滤波
%对领域的计算不是线性的
%工具箱提供了 colfilt函数  该函数占内存大  但是高效
%g=colfilt(f,[m,n],'sliding',@fun,parameters)
%m,n是滤波区域的维数,'sliding'表示处理过程是在输入图像f中逐个像素地滑动该m*n区域
%@fun 引用一个函数
%parameters 表示函数fun可能需要的参数{由逗号分开}

%非线性空间滤波需要对图像进行填充后操作
%对图像填充用padarray函数
%fp=padarray(f,[r c],method,direction)
%f为输入图像  fp为填充后的图像  [r c] 用于给出填充f的行数 列数
%方法
%'symmetric'  (对称)图像大小通过围绕边界的镜像反射来填充
%'replicate'  图像大小通过复制边界中的值来扩展
%'circular'   图像大小铜鼓瓯江图像看成是一个周期函数的一个周期来扩展
% 方向
% 'pre'         在每一维的第一个元素的填充
% 'post'        在每一维的最后一个元素后填充
% 'both'        在每一维的第一个元素前和最后一个元素后填充
%若  f=[1 2;3 4]    fp=padarray(f,[3 2],'replicate','post') 生成结果如下
%fp=1 2 2 2 
%   3 4 4 4 
%   3 4 4 4 
%   3 4 4 4 
%   3 4 4 4 


%图像处理工具箱标准空间滤波器
%工具箱支持预定义的二维线性空间滤波器
%空间滤波器可以通过函数  fspecial来实现,用来生成w的函数fspecial语法
%w=fspecial('type',parameters)
%其中'type'代表滤波器类型
%'parameters'进一步定义了指定的滤波器,由函数fspecial支持的空间滤波器如下表
% 'average'    fspecial('average',[r c]) 大小为r c的一个矩形平均滤波器 默认值 3*3
% 'disk'       fspecial('disk',r)   一个圆形平均滤波器 包含在2*r+2 大小的正方形内 默认半径5
% 'gaussian'   fspecial('gaussian',[r c],sig) 一个大小为 r*c的高斯滤波器 标准偏差 sig(正) 默认为3*3  0.5
% 'laplacian'  fspecial('laplacian',alpha) 一个大小为3*3的拉普拉斯滤波器 形状由alpha指定  默认0.5  范围0-1
% 'log'        fspecial('log',[r c],sig)  一个大小为r*c的高斯拉普拉斯滤波器 标准偏差sig(正) 默认 5*5  0.5
% 'motion'     fspecial('motion',len,theta) 围绕一幅有着len个像素的图像线性运算,输出一个滤波器,运动方向为 theta
%     其单位为度,即从水平方向逆时针转动的角度  默认值为 9和0  表示沿 水平方向由9个像素运动

%下面例子用laplacian 来对图像增强

clc 
clear
f=imread('D:\研究生课程\其他\MATLAB图像处理\亮度调节与空间滤波\6.jpg');
subplot(3,2,2)
imshow(f)
title('原图')
w=fspecial('laplacian',0);%生成标准的laplacian卷积核
g1=imfilter(f,w,'replicate');%对原图进行滤波
%由于卷积核是负值  输出的图像中  负值会被裁掉  变为0所以图二可以理解是黑色的 但凸显处了边缘
subplot(3,2,1)
imshow(g1)
title('u8类型的拉普拉斯核中心-4滤波')
f2=im2double(f);%变成double类型 保留负值
g2=imfilter(f2,w,'replicate');
subplot(3,2,3)
imshow(g2)
title('double类型的拉普拉斯核中心-4滤波')
g=f2-g2;%将负值减去  相当于加了值  这样做可以增强图像
subplot(3,2,4)
imshow(g)
title('拉普拉斯核中心-4的图像增强')
w1=[1 1 1;1 -8 1;1 1 1];%拉普拉斯的另一个卷积核 可以得到更清晰的图像
g3=imfilter(f2,w1,'replicate');
subplot(3,2,5)
imshow(g3)
title('double类型的拉普拉斯核中心-8滤波')
f3=f2-g3;
subplot(3,2,6)
imshow(f3)
title('拉普拉斯核中心-84的图像增强')