image - 计算图像的梯度矢量场

标签 image matlab image-processing

我想读入一幅图像——一张圆的图片,并计算该图像的梯度矢量场(即矢量均匀地指向圆并垂直于圆)。我的逻辑有点让我失望,但我有:

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

my result

image that i am getting error with

最佳答案

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

u = dx;
v = dy;

不是

u = x;
v = y;

它适用于 this像魅力一样的形象!

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

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)。根据您的图像尺寸,您可能想要放大以查看渐变向量。

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

Gradient vectors of a circle in an image

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

关于image - 计算图像的梯度矢量场,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10416918/

相关文章:

css - 如何使用 CSS 在图像周围添加非矩形边框?

image - 如何从 AlexNet 中获取多个图像标签

matlab - 在主 m 文件中读取输入 m 文件

php - 我可以从 Flash 文件动态生成 300 dpi 图像吗?

python - Matlab 谱图和 matplotlib 谱图之间的区别?

performance - 如何加速这种for循环?

python - 从图像中删除抗锯齿

php - 如何获取谷歌图片

css div 将多行文本垂直和水平居中并带有背景图像

javascript - SVG : static image is visible, 中的 <image> 但动态不是