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

1 次查看(过去 30 天)
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.
A = load('Boundary_closed_1s_3s.txt')
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
Image Analyst 2021-2-7
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 = load('Boundary_closed_1s_3s.txt');
A = logical(A);
subplot(2, 1, 1);
imshow(A);
interior_filled = bwconvhull(A);
subplot(2, 1, 2);
imshow(interior_filled);

更多回答(4 个)

KSSV
KSSV 2021-2-4
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.

Walter Roberson
Walter Roberson 2021-2-5
fill the holes. subtract the original, and what is left will be the interiors. Multiply by constant and add to the original.
  1 个评论
M.S. Khan
M.S. Khan 2021-2-5
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
yanqi liu 2021-2-5
clear all; clc; close all;
A = load('Boundary_closed_1s_3s.txt');
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,……
  1 个评论
M.S. Khan
M.S. Khan 2021-2-5
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
yanqi liu 2021-2-5
sir,may be use the follow code
clear all; clc; close all;
A = load('Boundary_closed_1s_3s.txt');
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 个评论
M.S. Khan
M.S. Khan 2021-2-5
Dear Yanqi, using this method, the number of pixel of image has decreased. you replaced all pixels by 128, right. In the first code, there were 85 and 255 also. Moreover, the number of used pixels were 3818 while in the previous code, the number of pixles are 3496. Using previous code, i think, we should figure out to replace only the zeros lying inside the interior of the boundary surface by other number. Thanks for all your cooperation.
The resources link is in chinese lanaguage.
Regards
yanqi liu
yanqi liu 2021-2-7
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

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Images 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by