辺のグラディエントを計算し、それを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);
このコードはあなたのために機能しますか?正しい出力が得られますか?あなたが探しているいくつかの具体的な改善はありますか?速度?なぜそうでない場合は?あなたが他の目標を持っていなければ、同じ仕事をするならば、クリアコードはコンパクトコードよりも優れていることが多いです。スピードを上げるために、コードプロファイラを実行して、ほとんどの時間を費やしてみることができます。 –
また、サンプル画像をリンクして、他人があなたが何を見ているかを確認できるようにすることもできます。 –
コードが機能し、正しい出力が得られます。しかし、私は矢印を削除する方法は私に複雑に見えます。簡単にする方法があるのだろうかと思います。一方、まだ投稿に画像を埋め込むことは許可されていないため、代わりにリンク(結果画像)を含めるようにしました。 –