plotを使った四分木分割をしたいです。

15 visualizaciones (últimos 30 días)
koba
koba el 19 de Sept. de 2019
Comentada: koba el 20 de Sept. de 2019
例えば点が6個あったとします。
a=[2 2 ;7 2 ; 3 7 ; 6 6 ;8 9 ;8 4]
この点を正方形で囲み四分木分割をしたいのですが、どのようにコードを書いたらいいか分かりません。
追記:四分木分割で正方形が何個も作られますが、その正方形ひとつひとつの座標が知りたいです。

Respuesta aceptada

Akira Agata
Akira Agata el 19 de Sept. de 2019
Editada: Akira Agata el 19 de Sept. de 2019
Image Processing Toolboxの関数 qtdecomp を使うのはいかがでしょうか。
以下はその一例です。
% 与えられた(x,y)座標が1(他は0)の16x16配列Iを作成
a = [2 2; 7 2; 3 7; 6 6; 8 9; 8 4];
I = zeros(16,16);
for kk = 1:size(a,1)
I(a(kk,2),a(kk,1)) = 1;
end
% 四分木分割(領域内の合計値が >1 なら分割)
func = @(x) squeeze(sum(sum(x,1),2) > 1);
S = qtdecomp(I,func);
S = full(S);
% 四分木分割の結果からラベル行列を作成
label = zeros(size(S));
[r,c] = find(S);
for kk = 1:numel(r)
n = S(r(kk),c(kk));
label(r(kk):r(kk)+n-1,c(kk):c(kk)+n-1) = kk;
end
% 結果を図示
figure
imagesc(label)
hold on
scatter(a(:,1),a(:,2),'r','filled')
ax = gca;
ax.YDir = 'normal';
  3 comentarios
Akira Agata
Akira Agata el 20 de Sept. de 2019
例えば先のプログラムを実行すると、以下のようなlabel配列が得られます。
>> label
label =
1 1 1 1 4 4 7 7 9 9 9 9 9 9 9 9
1 1 1 1 4 4 7 7 9 9 9 9 9 9 9 9
1 1 1 1 5 5 8 8 9 9 9 9 9 9 9 9
1 1 1 1 5 5 8 8 9 9 9 9 9 9 9 9
2 2 2 2 6 6 6 6 9 9 9 9 9 9 9 9
2 2 2 2 6 6 6 6 9 9 9 9 9 9 9 9
2 2 2 2 6 6 6 6 9 9 9 9 9 9 9 9
2 2 2 2 6 6 6 6 9 9 9 9 9 9 9 9
3 3 3 3 3 3 3 3 10 10 10 10 10 10 10 10
3 3 3 3 3 3 3 3 10 10 10 10 10 10 10 10
3 3 3 3 3 3 3 3 10 10 10 10 10 10 10 10
3 3 3 3 3 3 3 3 10 10 10 10 10 10 10 10
3 3 3 3 3 3 3 3 10 10 10 10 10 10 10 10
3 3 3 3 3 3 3 3 10 10 10 10 10 10 10 10
3 3 3 3 3 3 3 3 10 10 10 10 10 10 10 10
3 3 3 3 3 3 3 3 10 10 10 10 10 10 10 10
ここれをもとに以下のようにすると、例えば label = 1 の (x,y) 座標が得られます。
[r,c] = find(label == 1);
>> [r,c]
ans =
1 1
2 1
3 1
4 1
1 2
2 2
3 2
4 2
1 3
2 3
3 3
4 3
1 4
2 4
3 4
4 4
koba
koba el 20 de Sept. de 2019
素早い回答ありがとうございます。助かりました。

Iniciar sesión para comentar.

Más respuestas (0)

Productos


Versión

R2019a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!