How do I plot the nearest neighbour algorithm in a matrix?

14 ビュー (過去 30 日間)
Riah Wilkinson
Riah Wilkinson 2017 年 3 月 18 日
コメント済み: Walter Roberson 2017 年 3 月 27 日
Hi,
X = [0 0 0 0 0; 0 0 1 0 0; 0 0 0 0 1]
I would like to produce a coloured grid that displays the matrix elements equal to one as red. Yellow for the elements at a neighbourhood of 8 connectivity to the non-zero elements and green for the elements further away from 1.
Should I be using brute force or knnsearch or is there a better/ faster way to go about it?
Thanks
  1 件のコメント
Walter Roberson
Walter Roberson 2017 年 3 月 27 日
.... Then don't use that code.
You have forgotten that chessboard distance does not stop at distance 1 or 2.

サインインしてコメントする。

採用された回答

Walter Roberson
Walter Roberson 2017 年 3 月 18 日
編集済み: Walter Roberson 2017 年 3 月 18 日
d = bwdist(X);
t = ones(size(X));
t(d < 1.5) = 3;
t(d == 0) = 2;
cmap = [0 1 0;
1 0 0;
1 1 0];
image(t);
axis image
colormap(cmap)
  3 件のコメント
Walter Roberson
Walter Roberson 2017 年 3 月 18 日
Blue, green, what's the difference? ;-)
Walter Roberson
Walter Roberson 2017 年 3 月 18 日
Another approach:
t = imdilate(X, ones(3,3)) + 1;
t(X==1) = 3;
cmap = [0 1 0;
1 1 0;
1 0 0];
image(t)
axis equal
colormap(cmap)

サインインしてコメントする。

その他の回答 (1 件)

Chad Greene
Chad Greene 2017 年 3 月 18 日
How about bwlabel? Then you can use imagesc to display the matrix and set the colormap to red, yellow, and green by
colormap([0.9 0 0;1 1 0.08; 0.08 0.69 0.1])
  1 件のコメント
Walter Roberson
Walter Roberson 2017 年 3 月 18 日
bwlabel is not enough in this case to figure out whether you are beside a 1.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeData Distribution Plots についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by