MATLAB: How to clear the border of matrix

connected componentsImage Processing Toolboxlabeled image

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

Best Answer

It's actually very simple using set operations:
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.