在求图像边缘的时候,经常需要用到差分的概念,图像差分其实就是水平方向和竖直方向相邻像素之间的差值。matlab内部封装了许多函数,但是有时候需要自己编写差分以满足自身的使用要求,因此分享一个简单的灰度图像求差分的函数。
function [ dx dy d] = gradient( image,factor)
%dx为水平方向的差分
%dx为水平方向的差分
%dy为竖直方向的差分
%求图像梯度(差分)
%factor为影响因子,即d=factor*dx+(1-factor)*dy;
%求图像梯度(差分)
%factor为影响因子,即d=factor*dx+(1-factor)*dy;
if nargin<1||nargin>2
return;
end
[hang lie]=size(image);
image=double(image);
for i=1:hang
for j=1:lie
if j==lie
dxx(i,j)=image(i,j);
else
dxx(i,j)=image(i,j+1)-image(i,j);
end
end
end
dx=dxx;
for jj=1:lie
for ii=1:hang
if ii==hang
dyy(ii,jj)=image(ii,jj);
else
dyy(ii,jj)=image(ii+1,jj)-image(ii,jj);
end
end
end
dy=dyy;
if nargin==1
d=dx*0.5+dy*0.5;
end
if nargin==2
dx=double(dx);
dy=double(dy)
d=factor*dx+(1-factor)*dy;
end