matlab二阶差分函数,图像处理-线性滤波-图像微分(1、2阶导数和拉普拉斯算子)(转载)...

更复杂些的滤波算子一般是先利用高斯滤波来平滑,然后计算其1阶和2阶微分。由于它们滤除高频和低频,因此称为带通滤波器(band-pass

filters)。

在介绍具体的带通滤波器前,先介绍必备的图像微分知识。

1 一阶导数

连续函数,其微分可表达为a4c26d1e5885305701be709a3d33442f.png ,或a4c26d1e5885305701be709a3d33442f.png (1.1)

对于离散情况(图像),其导数必须用差分方差来近似,有

a4c26d1e5885305701be709a3d33442f.png,前向差分 forward

differencing (1.2)

a4c26d1e5885305701be709a3d33442f.png ,中心差分 central

differencing (1.3)

1)前向差分的Matlab实现

function 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);

01

function dimg = mipforwarddiff(img,direction)

02

%

MIPFORWARDDIFF Finite difference calculations

03

%

04

% DIMG =

MIPFORWARDDIFF(IMG,DIRECTION)

05

%

06

% Calculates the

forward-difference for a given

direction

07

% IMG : input image

08

% DIRECTION : 'dx' or 'dy'

09

% DIMG : resultant image

10

%

11

% See also

MIPCENTRALDIFF MIPBACKWARDDIFF MIPSECONDDERIV

12

% MIPSECONDPARTIALDERIV

13

14

% Omer Demirkaya,

Musa Asyali, Prasana Shaoo, ... 9/1/06

15

% Medical Image

Processing Toolbox

16

17

imgPad = padarray(img,[1 1],'symmetric','both');%将原图像的边界扩展

18

[row,col] = size(imgPad);

19

dimg = zeros(row,col);

20

switch

(direction)

21

case

'dx',

22

dimg(:,1:col-1)

= imgPad(:,2:col)-imgPad(:,1:col-1);%x方向差分计算,

23

case

'dy',

24

dimg(1:row-1,:)

= imgPad(2:row,:)-imgPad(1:row-1,:);

25

otherwise, disp('Direction is unknown');

26

end;

27

dimg = dimg(2:end-1,2:end-1);

2)中心差分的Matlab实现

function 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方向导数

I = imread('coins.png'); figure; imshow(I);

Id = mipforwarddiff(I,'dx'); figure, imshow(Id);

1

I = imread('coins.png'); figure;

imshow(I);

2

Id = mipforwarddiff(I,'dx'); figure,

imshow(Id);

a4c26d1e5885305701be709a3d33442f.pnga4c26d1e5885305701be709a3d33442f.png

原图像 x方向1阶导数

2 图像梯度(Image Gradient)

图像I的梯度定义为a4c26d1e5885305701be709a3d33442f.png ,其幅值为a4c26d1e5885305701be709a3d33442f.png 。出于计算性能考虑,幅值也可用a4c26d1e5885305701be709a3d33442f.png 来近似。

Matlab函数

1)gradient:梯度计算

2)quiver:以箭头形状绘制梯度。注意放大下面最右侧图可看到箭头,由于这里计算横竖两个方向的梯度,因此箭头方向都是水平或垂直的。

实例:仍采用上面的原始图像

I = double(imread('coins.png'));

[dx,dy]=gradient(I);

magnitudeI=sqrt(dx.^2+dy.^2);

figure;imagesc(magnitudeI);colormap(gray);%梯度幅值

hold on;quiver(dx,dy);%叠加梯度方向

1

I = double(imread('coins.png'));

2

[dx,dy]=gradient(I);

3

magnitudeI=sqrt(dx.^2+dy.^2);

4

figure;imagesc(magnitudeI);colormap(gray);%梯度幅值

5

hold on;quiver(dx,dy);%叠加梯度方向

a4c26d1e5885305701be709a3d33442f.pnga4c26d1e5885305701be709a3d33442f.png

梯度幅值 梯度幅值+梯度方向

3 二阶导数

对于一维函数,其二阶导数a4c26d1e5885305701be709a3d33442f.png ,即a4c26d1e5885305701be709a3d33442f.png 。它的差分函数为

a4c26d1e5885305701be709a3d33442f.png (3.1)

3.1 普拉斯算子(laplacian operator)

3.1.2 概念

拉普拉斯算子是n维欧式空间的一个二阶微分算子。它定义为两个梯度向量算子的内积

a4c26d1e5885305701be709a3d33442f.png (3.2)

其在二维空间上的公式为: a4c26d1e5885305701be709a3d33442f.png (3.3)

对于1维离散情况,其二阶导数变为二阶差分

1)首先,其一阶差分为a4c26d1e5885305701be709a3d33442f.png

2)因此,二阶差分为

a4c26d1e5885305701be709a3d33442f.png

3)因此,1维拉普拉斯运算可以通过1维卷积核a4c26d1e5885305701be709a3d33442f.png 实现

对于2维离散情况(图像),拉普拉斯算子是2个维上二阶差分的和(见式3.3),其公式为:

a4c26d1e5885305701be709a3d33442f.png (3.4)

上式对应的卷积核为

a4c26d1e5885305701be709a3d33442f.png

常用的拉普拉斯核有:

a4c26d1e5885305701be709a3d33442f.png

3.1.2 应用

拉普拉斯算子会突出像素值快速变化的区域,因此常用于边缘检测。

Matlab里有两个函数

1)del2

计算公式:a4c26d1e5885305701be709a3d33442f.pnga4c26d1e5885305701be709a3d33442f.png

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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值