计算图像的梯度向量场
image
image-processing
matlab
6
0

我想读一幅图像-一个圆的图片,并计算该图像的梯度矢量场(即,矢量均一地指向且垂直于该圆)。我的逻辑让我有些失望,但是我有:

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中。我该怎么做?

我的结果

我遇到错误的图像

参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

您在代码中犯了一个错误(除此之外,它可以正常工作)。您应该替换以下内容:

u = dx;
v = dy;

u = x;
v = y;

它可以像这张图片一样迷人!

编辑:如果要在图像上叠加矢量,请执行以下操作:

clear all;
im = imread('littlecircle.png');
[nr,nc]=size(im);
[dx,dy] = gradient(double(im));
[x y] = meshgrid(1:nc,1:nr);
u = dx;
v = dy;
imshow(im);
hold on
quiver(x,y,u,v)

请注意,我不会将im转换为double,因为imshow无法正确显示它(需要uint8)。根据您的图像尺寸,您可能需要放大以查看渐变矢量。

您可以在下面看到叠加在图像上的矢量的放大区域:

图像中圆的梯度向量

品质更好的图像位于http://i.stack.imgur.com/fQbwI.jpg

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号