how to change the interior pixel of a closed boundary surface to a different pixel using MATLAB?
2 ビュー (過去 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.
1 件のコメント
Image Analyst
2021 年 2 月 7 日
The shape is not closed. See the apex at the left. Do you want to close it, like with bwconvhull()?
採用された回答
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
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
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.
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,……
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 件のコメント
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
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!