Вычислить векторное поле градиента изображения
Я хочу прочитать изображение - изображение круга и вычислить векторное поле градиента этого изображения (т.е. векторы, указывающие равномерно и в нормальном окружности). Моя логика немного сбивает меня, но у меня есть:
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]()
Ответы
Ответ 1
Вы ошиблись в коде (кроме этого, он отлично работает). Вы должны заменить следующее:
u = dx;
v = dy;
не
u = x;
v = y;
Он работает с этим как шармом!
EDIT:
Если вы хотите супер-навязать векторы на изображении, сделайте следующее:
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