我想计算边缘的渐变并将其绘制为Octave中的矢量,叠加到现有图像上。
我应用了Sobel算子来获得边缘。矢量似乎很好。但我想尽可能减少我的代码。并以较少的步骤实现相同的结果。
我在这里放了一些代码以便更清楚。在此先感谢您的帮助。
###########################################################################
#
# Get Panda picture
#
###########################################################################
C = imread ("C:\\Users\\Elizabeth Judith\\Desktop\\cesar\\panda.png");
###########################################################################
#
# Transform Panda picture from Colors to Gray
#
###########################################################################
G = 0.3*C(:,:,1) + 0.6*C(:,:,2) + 0.1*C(:,:,3);
imwrite(G,"C:\\Users\\Elizabeth Judith\\Desktop\\cesar\\panda_gray.png");
###########################################################################
#
# Gradient of Sobel
#
###########################################################################
Edge = edge(G,"sobel");
[gx,gy] = gradient(double(Edge));
indices = find(abs(gx)==0.5);
indices = indices(1:2:end); # To delete arrows
gx(indices) = NaN;
indices = find(abs(gx)==0.5);
indices = indices(1:2:end); # To delete arrows
gx(indices) = NaN;
indices = find(abs(gx)==0.5);
indices = indices(1:2:end); # To delete arrows
gx(indices) = NaN;
indices = find(abs(gy)==0.5);
indices = indices(1:2:end); # To delete arrows
gy(indices) = NaN;
indices = find(abs(gy)==0.5);
indices = indices(1:2:end); # To delete arrows
gy(indices) = NaN;
indices = find(abs(gy)==0.5);
indices = indices(1:2:end); # To delete arrows
gy(indices) = NaN;
###########################################################################
#
# plot gradient vectors over image
#
###########################################################################
figure;
imshow(G, []);
hold on;
###########################################################################
#
# Quiver of the gradient
#
###########################################################################
h1 = quiver(abs(gx),abs(gy));
###########################################################################
#
# To scale quiver arrows
#
###########################################################################
set(h1,'AutoScale','on', 'AutoScaleFactor', 15);
答案 0 :(得分:0)
还有另一种方法可以减少箭头绘制的箭头数量: https://www.mathworks.com/matlabcentral/newsreader/view_thread/306387
quiver(gx(1:2:end,1:2:end),gy(1:2:end,1:2:end))
问题是它会缩小图像,因为它占用了一半的梯度信息。因此,您可能也可以缩放背景图像,并以较少的步骤实现类似的结果。
最好的问候