Một khả năng khác là sử dụng BWBOUNDARIES chức năng, trong đó:
vết ranh giới bên ngoài của đối tượng, cũng như ranh giới của lỗ bên trong các đối tượng này
Đó thông tin được chứa trong đầu ra thứ tư A
, một ma trận kề đại diện cho các phụ thuộc cha-con-lỗ.
%# read binary image
bw = imread('SUvif.png');
%# find all boundaries
[B,L,N,A] = bwboundaries(bw, 8, 'holes');
%# exclude inner holes
[r,~] = find(A(:,N+1:end)); %# find inner boundaries that enclose stuff
[rr,~] = find(A(:,r)); %# stuff they enclose
idx = setdiff(1:numel(B), [r(:);rr(:)]); %# exclude both
bw2 = ismember(L,idx); %# filled image
%# compare results
subplot(311), imshow(bw), title('original')
subplot(312), imshow(imfill(bw,'holes')), title('imfill')
subplot(313), imshow(bw2), title('bwboundaries')
giải pháp ấn tượng. Cảm ơn rất nhiều !! Điều nhỏ nhặt duy nhất tôi thay đổi là xóa các đối tượng không gian nhỏ hơn 2 phần trăm hình ảnh và nó hoạt động tuyệt vời !! – user1240792