次の画像があります。
を使用してドットを接続する (それらの間に線を引く) 方法はありMATLAB
ますか? 画像を渡してみplot
ましたが、うまくいきませんでした。
ありがとう。
アップデート
ドットを接続する方法は、下の画像サンプルの赤い線でおおまかに示されているとおりです。
これを行う方法はいくつかあります。たとえば、次のようにします。
img=im2double(imread('SWal5.png'));
m = bwmorph(~img,'shrink',Inf);
[ix iy] = find(m);
tri = delaunay(iy,ix);
image(img)
hold on
triplot(tri,iy,ix,'g')
set(gca,'Ydir','reverse')
axis square off
代わりに に似たものが必要な場合は、ステップplot
を実行した後にこれを試すことができます。find
[ix ii]=sort(ix);
iy = iy(ii);
imshow(img)
hold on
plot(iy,ix,'k')
set(gca,'Ydir','reverse')
多数のポイントを通る軌跡をプロットするには、隣接行列を定義し、gplotを使用して表示できます。
アイデアを示すためのスニペットを次に示しますが、このかなり単純なコードでは出力が少し乱雑であることに気付くでしょう。それは、必要な線がどれだけきれいか、およびクロスオーバーが許可されているかどうかによって異なります。おそらく、隣接行列を作成するより良い方法があります。
これは、ポイントの位置をサイズ nx 2 のマトリックス「データ」に抽出したことを前提としています (この場合、テストのために画像から 200 ポイントを取り出しました)。
基本的に、最も近いポイントはknnsearch (Statistics ツールボックスが必要) で検出され、次に開始点を選択して、まだ使用されていない最近傍を決定することによって、隣接行列が埋められます。これにより、すべてのポイントが最大 2 つの他のポイントに接続されることになります。ただし、knnsearch で見つかったポイントの数が十分であり、最も近いすべてのポイント (この場合は 100) が既に使用されているコーナーに戻ることはありません。
datal = length(data);
marked = ones(datal,1);
m = 100; % starting point - can be varied
marked(m)=0; % starting point marked as 'used'
adj = zeros(datal);
IDX = knnsearch(data, data,'K',100);
for n = 1:datal;
x = find(marked(IDX(m,:))==1,1,'first'); % nearest unused neighbour
adj(m,IDX(m,x))=1; % two points marked as connected in adj
marked(IDX(m,x))=0; % point marked as used
m = IDX(m,x);
end
gplot(adj, data); hold on; plot(data(:,1),data(:,2),'rx');