# how to change the interior pixel of a closed boundary surface to a different pixel using MATLAB?

1 view (last 30 days)
M.S. Khan on 4 Feb 2021
Commented: M.S. Khan on 7 Feb 2021
I have a closed boundary surface of an object. i want to fill the interior which is already zero. How can i change the zero to any other digit so that i can do some mathematical operations. Regards for all cooperation of community members.
i have used the following code to handle it but i couldnt figure out.
Perimeter=bwperim(A)
interior_filled = imfill(A,'holes')
A = 3*double(A)
interior_filled = 2*double(interior_filled)
interior_filled(Perimeter)=A(Perimeter)
The above code is giving me the closed boundary surface? Could anyone guide me how to replace the interior that is already filled as zero but i want to repalce with another number number like 2.
Thanks for all guidance in advance.
Image Analyst on 7 Feb 2021
The shape is not closed. See the apex at the left. Do you want to close it, like with bwconvhull()? Image Analyst on 7 Feb 2021
The shape is not closed but you can close it with bwconvhull() if you're okay with the shape being a convex shape, like your rectangle.
A = logical(A);
subplot(2, 1, 1);
imshow(A);
interior_filled = bwconvhull(A);
subplot(2, 1, 2);
imshow(interior_filled); M.S. Khan on 7 Feb 2021
Thanks Dear Image Analyst. As usual, you are always very helpful. Regards

KSSV on 4 Feb 2021
Yopu can exclude the boundaries by indexing right?
A = interior_filled(2:end-2,2:end-2) ;
Now you apply the given values as you have tried on A.
M.S. Khan on 5 Feb 2021
hi dear KSSV, thanks for your guidance. it doesnt work because arrays size will change and will give error.

Walter Roberson on 5 Feb 2021
fill the holes. subtract the original, and what is left will be the interiors. Multiply by constant and add to the original.
M.S. Khan on 5 Feb 2021
Thanks Walter for reply. i have zeros inside and outside the boundary surface. so multipling zero and constant will again be zero. i need to deal only the interior of the boundary.

yanqi liu on 5 Feb 2021
clear all; clc; close all;
b = im2bw(A);
b = imclose(b, strel('disk', 3));
b2 = imfill(b, 'holes');
b3 = logical(b2 - b);
A2 = im2uint8(mat2gray(A));
A2(b3) = 128;
figure;
imshowpair(A,A2,'montage'); please use different value, such as 64，100，128，……
M.S. Khan on 5 Feb 2021
Hi Dear Yani Lie, thanks for your guidance. if you see the top in image or A2, still there are some zeros which are not replaced with 128. Can we figure it out. Regards

yanqi liu on 5 Feb 2021
sir，may be use the follow code
clear all; clc; close all;
b = im2bw(A);
b = imclose(b, strel('line', 3, -45));
b2 = imfill(b, 'holes');
b3 = logical(b2 - b);
A2 = im2uint8(mat2gray(A));
A2(b) = 0;
A2(b3) = 128;
figure;
imshowpair(A,A2,'montage'); ##### 2 CommentsShowHide 1 older comment
yanqi liu on 7 Feb 2021
the reason is
at the sharp corner on the left, there is a gap that needs to be filled. may be can zoom in to check