我想读入一幅图像——一张圆的图片,并计算该图像的梯度向量场(即均匀地指向圆并垂直于圆的向量)。我的逻辑有点让我失望,但我有:
clear all;
im = im2double(imread('littlecircle.png'));
im = double(im);
[nr,nc]=size(im);
[dx,dy] = gradient(im);
[x y] = meshgrid(1:nc,1:nr);
u = x;
v = y;
quiver(x,y,u,v)
如果我只是简单地执行上述操作,我会得到一个向量场,但它只是一个空网格的梯度(即只是一个梯度 y=x 的向量场)。我真正想要的是使用
[dx,dy] = gradient(im);
检测图像中圆的边缘,然后计算由于图像中的圆而产生的梯度向量场。显然,分配 u=x 和 v=y 只会给我一条直线的向量场 - 所以基本上,我想将图像的梯度嵌入到向量 u 和 v 中。我该怎么做?