フィルターのクリア

label two objects that share part of the same boundary separately

1 回表示 (過去 30 日間)
Joy
Joy 2022 年 8 月 3 日
コメント済み: Joy 2022 年 8 月 3 日
I have a matrix like this:
m = [0,1,1,1,0;1,0,0,0,1;0,1,1,1,0;0,1,0,1,0;0,0,1,0,0];
And I want to label the interior separately, which results in a matrix like this:
m1 = [0,1,1,1,0;1,2,2,2,1;0,1,1,1,0;0,1,3,1,0;0,0,1,0,0];
But I'm not sure how to do that. Any suggestion will be appreciated! Thank you!

採用された回答

Steve Eddins
Steve Eddins 2022 年 8 月 3 日
m = [0,1,1,1,0;1,0,0,0,1;0,1,1,1,0;0,1,0,1,0;0,0,1,0,0]
m = 5×5
0 1 1 1 0 1 0 0 0 1 0 1 1 1 0 0 1 0 1 0 0 0 1 0 0
Fill the holes. From your example, it looks like the background connectivity should be 4.
filled_holes = imfill(m,4,'holes')
filled_holes = 5×5
0 1 1 1 0 1 1 1 1 1 0 1 1 1 0 0 1 1 1 0 0 0 1 0 0
The pixels that were added are the holes.
hole_pixels = filled_holes & ~m
hole_pixels = 5×5 logical array
0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
Label the hole pixels.
L = bwlabel(hole_pixels,4)
L = 5×5
0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0
Add the labels (incremented by one) to the original matrix.
m_out = m;
m_out(hole_pixels) = L(hole_pixels) + 1
m_out = 5×5
0 1 1 1 0 1 2 2 2 1 0 1 1 1 0 0 1 3 1 0 0 0 1 0 0

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeDescriptive Statistics についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by