更復雜些的濾波算子一般是先利用高斯濾波來平滑,
在介紹具體的帶通濾波器前,先介紹必備的圖像微分知識。
1 一階導數
對於離散情況(圖像),其導數必須用差分方差來近似,有
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維歐式空間的一個二階微分算子。
其在二維空間上的公式為:
對於1維離散情況,其二階導數變為二階差分
2)因此,二階差分為
對於2維離散情況(圖像),
上式對應的卷積核為
常用的拉普拉斯核有:
3.1.2 應用
拉普拉斯算子會突出像素值快速變化的區域,因此常用於邊緣檢測。
Matlab裡有兩個函數
1)del2
2)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.
3.1.3 資源
http://fourier.eng.hmc.edu/