take largest connected components in 2D slices and then reconstruct the 3D by stacking them

Illustration
banikr - 2022-03-07T11:09:27+00:00
Question: take largest connected components in 2D slices and then reconstruct the 3D by stacking them

Hello, I am doing some morphological image processing. I want to remove the 4 unwanted blobs from the binary object(image below) If I axially slice the image, I can take the largest connected component and exclude others like the image below: I have tried the following codes which results binary size mismatch issues. ind = 1; sz = size(bi) % bi is the 3D mask with dimension: 170x256x100 final_mask = zeros(sz) for i = 1:sz(3) %taking the 2D axial slice iterations-> 1:100 cc = bwconncomp(bi(:,:,i)); % disp(cc) S = regionprops(cc, 'Area', 'PixelIdxList');%'Centroid'); ax_slice = zeros(sz(1), sz(2)); numPixels = cellfun(@numel, cc.PixelIdxList); % disp(numPixels) [biggest,idx] = max(numPixels); % taking the largest component number of pixels and their indices ax_slice(cc.PixelIdxList{idx})= 1; final_mask(:,:,i) = ax_slice; end Please let me know how to deal with it.   

Expert Answer

Profile picture of Prashant Kumar Prashant Kumar answered . 2025-11-20

  • erode image
  • dilate image

 

clc                         % clear command window
cla                         % clear axes
bi11 = bi;                  % create copy of 'bi'
bi1 = bi(:,:,170:end);      % get top part
R = 2;                      % radius of structuring element
[x,y,z] = meshgrid(-R:R);   % X Y Z 3d matrices
el = x.^2+y.^2+z.^2 <= R^2; % sphere of radius 'R'
bi2 = imerode(bi1, el);     % erode image
bi3 = imdilate(bi2, el);    % dilate image
bi11(:,:,170:end) = bi3;    % replace original top part

isosurface(bi11,.95)        % display 3d image
axis vis3d
light
 


Not satisfied with the answer ?? ASK NOW

Get a Free Consultation or a Sample Assignment Review!