2017-12-04 2 views
0

私は注釈が画像のループとデルタの位置である注釈付き512x512x3指紋画像を持っています。赤はループを表し、青はデルタを表します。MATLAB内の別々の配列に隣接するものをグループ化します

Red denotes loop, blue denotes delta.

私は、これらの点の位置を見つける必要があります。私はimpixel()を使ってこれを行うことができますが、もっと自動化されたアプローチが必要でした。

Iは次のように行った:

x=[]; 
y=[]; 
for i = 1:512 
    for j = 1:512 
     marked = im(i,j,:); 
     if marked(:,:,1)==255 
      x=[x i]; 
      y=[y j]; 
     end 
    end 
end 
x = unique(x); 
y = unique(y); 

と赤色がループの位置である画素の位置を得ました。

マイアレイyすべての赤色画素のY座標を保持し、このように:一見

[116 117 118 119 120 121 122 191 192 193 194 195 196 197] 

、その値が2つの赤い点について、2つのグループに分類することができることは明らかです。しかし、私は値を2つのグループに分ける方法が不明です。値の平均値を使ってしきい値を作成することを考えましたが、ポイントが近くにある場合は機能しない可能性があります。

役に立つと助かります。

答えて

0

ます(例では2)があるでしょうどのように多くの赤い点を事前に知っていれば、関数kmeansを使用することができます -

y_groups = kmeans(y',2); 

あなたはグループの数がわからない場合は、ポイント場合常に同じ画素数が含まれている、あなたはそれからそれを仕事ができる - の例では私たちは、各グループの平均値を取得するには、その後のループを追加することができますので、

npts = numel(y)/7; 
y_groups = kmeans(y',npts); 

ポイント当たり7個のピクセルがあります(多くがありますあなたがこれを調べる他の方法もgrpstatsなど):

y_means = NaN(npts,1); 
for I = 1:npts 
    y_means(I) = mean(y(y_groups == I)); 
end 
関連する問題