我有如下圖:連接點的圖像
是否有連接點的方式(在二者之間畫一條線)使用MATLAB
?我通過傳遞圖像嘗試plot
,但沒有奏效。
謝謝。
UPDATE
我期待到連接點的方式是大致通過下面的圖像樣本中的紅色線所示:
我有如下圖:連接點的圖像
是否有連接點的方式(在二者之間畫一條線)使用MATLAB
?我通過傳遞圖像嘗試plot
,但沒有奏效。
謝謝。
UPDATE
我期待到連接點的方式是大致通過下面的圖像樣本中的紅色線所示:
有多種方式你可以做到這一點,例如如下:
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')
感謝您的回覆。對於代碼的第一部分,我得到以下錯誤:'使用delaunay的錯誤 必須提供至少三個輸入點來定義一個 三角網格.' – Simplicity
@Simplicity可能是圖像數據類型的問題。我用'im2double'語句替換了'double'轉換。 –
圖像數據類型實際上是「雙」。我真的不明白這個錯誤。 – Simplicity
要通過多個點的繪製蹤跡,你可以定義一個鄰接矩陣並使用gplot來顯示。
下面是顯示想法的片段,但您會注意到,使用這個相當簡單的代碼,輸出有點混亂。它取決於你想要如何清理一條線,如果允許交叉 - 可能有更好的創建鄰接矩陣的方法。
這假定你已經提取了你的點的位置到一個大小爲n×2的矩陣「數據」中(在這種情況下,我只需要從你的圖像中抽取200點來測試)。
基本上,最近的點與knnsearch(需要統計工具箱)一起找到,然後通過挑選起始點並確定尚未使用的最近鄰居來填充鄰接矩陣。這導致每個點最多連接兩個其他點,只要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');
你可以考慮檢查[@荷銀的答案在這裏。(http://stackoverflow.com/questions/10818392/matlab-putting-a-circled-number-onto-一個-圖)。順便說一句,我認爲圖像會變得相當混亂連接點hahaha ... – Werner
如果你可以使用一些圖像處理從圖像中的點(X,Y)座標點抓住,那麼你可以很好地將它們連接到Delaunay三角剖分。 – Dan
連接點聽起來有點模棱兩可。你能否澄清一下:你想繪製一個三角網格作爲@Dan建議或按順序繪製點作爲對排序數據的繪圖命令嗎? –