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.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值