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

???Errorusing==>rdivideIntegerscanonlybecombinedwithintegersofthesameclass,orscalardo... ??? 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));
还是用别的函数来求梯度。
展开
 我来答
酷呆爱死呆
推荐于2017-11-24 · TA获得超过4240个赞
知道大有可为答主
回答量:507
采纳率:100%
帮助的人:1150万
展开全部
>>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;
  图像边缘一般都是通过对图像进行梯度运算来实现的。
梯度的正负反映其边缘的走势,相当于方向。
东莞大凡
2024-08-07 广告
OpenCV标定板是东莞市大凡光学科技有限公司在相机标定中常用的工具。它通常由黑白格点按一定规则排列在平面上组成,如棋盘格或圆形格等。在相机标定时,将标定板置于不同位置和姿态下拍摄图像,利用OpenCV库中的函数检测标定板上的角点或圆心,进... 点击进入详情页
本回答由东莞大凡提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式