how to clear the border of matrix?
4 ビュー (過去 30 日間)
古いコメントを表示
I have a label image matrix
img=
1 1 1 2 2 2 3 3 3 3
1 2 2 2 9 3 3 3 3 3
1 1 9 9 9 9 9 9 3 3
1 8 8 8 8 8 8 8 8 3
1 8 8 8 7 7 7 7 7 3
1 7 7 7 7 1 1 7 7 3
1 1 1 1 1 1 1 1 1 1
I want to clear the side border and register it and clear the inside matrix with the value is same as side so turn them into 0.
side=
1 1 1 2 2 2 3 3 3 3
1 3
1 3
1 3
1 3
1 3
1 1 1 1 1 1 1 1 1 1
side =(1,2,3)
result=
0 0 0 0 0 0 0 0 0 0
0 0 0 0 9 0 0 0 0 0
0 0 9 9 9 9 9 9 0 0
0 8 8 8 8 8 8 8 8 0
0 8 8 8 7 7 7 7 7 0
0 7 7 7 7 0 0 7 7 0
0 0 0 0 0 0 0 0 0 0
0 件のコメント
採用された回答
Guillaume
2015 年 12 月 4 日
編集済み: Guillaume
2015 年 12 月 4 日
img = [1 1 1 2 2 2 3 3 3 3
1 2 2 2 9 3 3 3 3 3
1 1 9 9 9 9 9 9 3 3
1 8 8 8 8 8 8 8 8 3
1 8 8 8 7 7 7 7 7 3
1 7 7 7 7 1 1 7 7 3
1 1 1 1 1 1 1 1 1 1];
result = img;
result(ismember(result, union(result(:, [1 end]), result([1 end], :)))) = 0
union gives you the unique labels that are part of the vertical and horizontal borders. ismember tells you which labels at what position are parts of that union. You then use the logical vector generated by ismember to set the respective labels to 0.
0 件のコメント
その他の回答 (1 件)
Image Analyst
2015 年 12 月 4 日
If you want, you can just set the rows and columns to zero
img = [1 1 1 2 2 2 3 3 3 3
1 2 2 2 9 3 3 3 3 3
1 1 9 9 9 9 9 9 3 3
1 8 8 8 8 8 8 8 8 3
1 8 8 8 7 7 7 7 7 3
1 7 7 7 7 1 1 7 7 3
1 1 1 1 1 1 1 1 1 1];
result = img;
result(1,:)=0;
result(end,:)=0;
result(:,1)=0;
result(:,end)=0
4 件のコメント
Image Analyst
2015 年 12 月 4 日
I don't understand any of what you said. But whatever . . . you've accepted Guillaume's answer so I guess your problem is resolved now and that's what counts. Good luck.
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!