更复杂些的滤波算子一般是先利用高斯滤波来平滑,然后计算其1阶和2阶微分。由于它们滤除高频和低频,因此称为带通滤波器(band-pass filters)。
在介绍具体的带通滤波器前,先介绍必备的图像微分知识。
1 一阶导数
对于离散情况(图像),其导数必须用差分方差来近似,有
,前向差分 forward differencing (1.2)
,中心差分 central differencing (1.3)
1)前向差分的Matlab实现
123456789101112131415161718192021222324252627function dimg = mipforwarddiff(img,direction)
% MIPFORWARDDIFF Finite difference calculations
%
% DIMG = MIPFORWARDDIFF(IMG,DIRECTION)
%
% Calculates the forward-difference
for
a given direction
% IMG : input image
% DIRECTION :
'dx'
or
'dy'
% DIMG : resultant image
%
% See also MIPCENTRALDIFF MIPBACKWARDDIFF MIPSECONDDERIV
% MIPSECONDPARTIALDERIV
% Omer Demirkaya, Musa Asyali, Prasana Shaoo, ... 9/1/06
% Medical Image Processing Toolbox
imgPad = padarray(img,[1 1],
'symmetric'
,
'both'
);%将原图像的边界扩展
[row,col] = size(imgPad);
dimg = zeros(row,col);
switch
(direction)
case
'dx'
,
dimg(:,1:col-1) = imgPad(:,2:col)-imgPad(:,1:col-1);%x方向差分计算,
case
'dy'
,
dimg(1:row-1,:) = imgPad(2:row,:)-imgPad(1:row-1,:);
otherwise, disp(
'Direction is unknown'
);
end;
dimg = dimg(2:end-1,2:end-1);
2)中心差分的Matlab实现
12345678910111213141516171819202122232425262728function dimg = mipcentraldiff(img,direction)
% MIPCENTRALDIFF Finite difference calculations
%
% DIMG = MIPCENTRALDIFF(IMG,DIRECTION)
%
% Calculates the central-difference
for
a given direction
% IMG : input image
% DIRECTION :
'dx'
or
'dy'
% DIMG : resultant image
%
% See also MIPFORWARDDIFF MIPBACKWARDDIFF MIPSECONDDERIV
% MIPSECONDPARTIALDERIV
% Omer Demirkaya, Musa Asyali, Prasana Shaoo, ... 9/1/06
% Medical Image Processing Toolbox
img = padarray(img,[1 1],
'symmetric'
,
'both'
);
[row,col] = size(img);
dimg = zeros(row,col);
switch
(direction)
case
'dx'
,
dimg(:,2:col-1) = (img(:,3:col)-img(:,1:col-2))/2;
case
'dy'
,
dimg(2:row-1,:) = (img(3:row,:)-img(1:row-2,:))/2;
otherwise,
disp(
'Direction is unknown'
);
end
dimg = dimg(2:end-1,2:end-1);
1
实例:技术图像x方向导数
12I = imread(
'coins.png'
); figure; imshow(I);
Id = mipforwarddiff(I,
'dx'
); figure, imshow(Id);
原图像 x方向1阶导数
2 图像梯度(Image Gradient)
图像I的梯度定义为 ,其幅值为 。出于计算性能考虑,幅值也可用 来近似。
Matlab函数
1)gradient:梯度计算
2)quiver:以箭头形状绘制梯度。注意放大下面最右侧图可看到箭头,由于这里计算横竖两个方向的梯度,因此箭头方向都是水平或垂直的。
实例:仍采用上面的原始图像
12345I =
double
(imread(
'coins.png'
));
[dx,dy]=gradient(I);
magnitudeI=sqrt(dx.^2+dy.^2);
figure;imagesc(magnitudeI);colormap(gray);%梯度幅值
hold
on
;quiver(dx,dy);%叠加梯度方向
梯度幅值 梯度幅值+梯度方向
3 二阶导数
3.1 普拉斯算子(laplacian operator)
3.1.2 概念
拉普拉斯算子是n维欧式空间的一个二阶微分算子。它定义为两个梯度向量算子的内积
其在二维空间上的公式为: (3.3)
对于1维离散情况,其二阶导数变为二阶差分
2)因此,二阶差分为
对于2维离散情况(图像),拉普拉斯算子是2个维上二阶差分的和(见式3.3),其公式为:
上式对应的卷积核为
常用的拉普拉斯核有:
3.1.2 应用
拉普拉斯算子会突出像素值快速变化的区域,因此常用于边缘检测。
Matlab里有两个函数
1)del2
2)fspecial:图像处理中一般利用Matlab函数fspecial
h = fspecial('laplacian', alpha) returns a 3-by-3 filter approximating the shape of the two-dimensional Laplacian operator.
The parameter alpha controls the shape of the Laplacian and must be in the range 0.0 to 1.0. The default value for alpha is 0.2.
图像处理之一阶微分应用
一:数学背景
首先看一下一维的微分公式Δf = f(x+1) – f(x), 对于一幅二维的数字图像f(x,y)而言,需要完
成XY两个方向上的微分,所以有如下的公式:
分别对X,Y两个方向上求出它们的偏微分,最终得到梯度Delta F.
对于离散的图像来说,一阶微分的数学表达相当于两个相邻像素的差值,根据选择的梯度算
子不同,效果可能有所不同,但是基本原理不会变化。最常见的算子为Roberts算子,其它
常见还有Sobel,Prewitt等算子。以Roberts算子为例的X,Y的梯度计算演示如下图:
二:图像微分应用
图像微分(梯度计算)是图像边缘提取的重要的中间步骤,根据X,Y方向的梯度向量值,可以
得到如下两个重要参数振幅magnitude, 角度theta,计算公式如下:
Theta = tan-1(yGradient/xGradient)
magnitude表示边缘强度信息
theta预言边缘的方向走势。
假如对一幅数字图像,求出magnitude之后与原来每个像素点对应值相加,则图像边缘将被
大大加强,轮廓更加明显,是一个很典型的sharp filter的效果。
三:程序效果
X, Y梯度效果,及magnitude效果
图像微分的Sharp效果: