作业帮 > 英语 > 作业

用matlab 如何求一幅图像的梯度值呢,利用这个 [Ix,Iy]=gradient(I)为什么出现下面的错误呢

来源:学生作业帮 编辑:作业帮 分类:英语作业 时间:2024/07/01 11:21:58
用matlab 如何求一幅图像的梯度值呢,利用这个 [Ix,Iy]=gradient(I)为什么出现下面的错误呢
? Error using ==> rdivide
Integers can only be combined with integers of the same class, or scalar doubles.
Error in ==> gradient at 70
g(2:n-1,:) = (f(3:n,:)-f(1:n-2,:))./h(:,ones(p,1));
还是用别的函数来求梯度.
a=imread('D:\Program Files\toolbox\images\imdemos\rice.png');
>> b=gradient(double(a));
转化图像为double型,即可,gradient中h(:,ones(p,1))估计是double,我转化后可以运行,得到的是水平方向的梯度.
>>[ax,ay]=gradient(double(a));可以得到水平和垂直方向的梯度.
再问: 梯度可以是负值吗?求出来好多负值
再答: 图像梯度可以把图像看成二维离散函数,图像梯度其实就是这个二维离散函数的求导:   图像梯度: G(x,y) = dx i + dy j;   dx(i,j) = I(i+1,j) - I(i,j);   dy(i,j) = I(i,j+1) - I(i,j);   其中,I是图像像素的值(如:RGB值),(i,j)为像素的坐标。   图像梯度一般也可以用中值差分:   dx(i,j) = [I(i+1,j) + I(i-1,j)]/2;   dy(i,j) = [I(i,j+1) +I(i,j-1)]/2;   图像边缘一般都是通过对图像进行梯度运算来实现的。 梯度的正负反映其边缘的走势,相当于方向。