Berechnen Sie das Gradientenvektorfeld eines Bildes

Ich möchte ein Bild einlesen - ein Bild eines Kreises, und das Gradientenvektorfeld dieses Bildes berechnen (dh Vektoren, die gleichmäßig und normal zum Kreis zeigen). Meine Logik versagt mir ein bisschen, aber ich habe:

<code>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)
</code>

Wenn ich einfach das obige mache, erhalte ich ein Vektorfeld, aber es ist einfach der Gradient eines leeren Netzes (dh nur ein Vektorfeld des Gradienten y = x). Was ich eigentlich möchte, ist zu verwenden

<code>[dx,dy] = gradient(im);
</code>

um die Ränder des Kreises im Bild zu erkennen und dann das Gradientenvektorfeld aufgrund des Kreises im Bild zu berechnen. Wenn Sie u = x und v = y zuweisen, erhalte ich natürlich nur das Vektorfeld einer geraden Linie. Im Grunde möchte ich den Gradienten des Bildes in die Vektoren u und v einbetten. Wie mache ich das?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage