Creating binary 3D mask from MR volume

45 visualizaciones (últimos 30 días)
banikr
banikr el 26 de Abr. de 2020
Respondida: banikr el 29 de Abr. de 2020
Hello All,
I am trying to create a 3D binary mask for MR head volume. The image has 0 intensity for background and the tissue inside the image has integers. Morphological operations provide me very noisy output.
This is after bwconncomp, thresholding and imerode options.
Are there better ways to get volumetric masks?
  8 comentarios
Image Analyst
Image Analyst el 27 de Abr. de 2020
I don't think the noise on the mask is the issue. Why did your classification routine quit classifying stuff below that line other than the blue stuff? For some reason, you have a mask that just quits below that line, and that has nothing to do with little noisy blips on it.
banikr
banikr el 27 de Abr. de 2020
Yeah you are right, the noise has nothing to do with the classification.
The classification comes from CT image which only exists for the segmented section. Now for MR images there is no specific intensity scaling mechanism like CT. For my experiment, I also need the inferior section of the head labelled in MR space.
CT image was registered on MR space.

Iniciar sesión para comentar.

Respuestas (2)

Mrutyunjaya Hiremath
Mrutyunjaya Hiremath el 27 de Abr. de 2020
Hello banikr,
I think this is what you want ... if I am not wrong.
load mri;
% load mriVolume; %3D MRI data with data variable name 'mriVolume'
mriVolume = D;
% Assuming background pixels are 0
bwMask = false(size(mriVolume));
pixIndex = find(mriVolume > 0);
bwMask(pixIndex) = 1;
  3 comentarios
Mrutyunjaya Hiremath
Mrutyunjaya Hiremath el 27 de Abr. de 2020
@ banikr,
ok got it, if MRI data is possible to share, please share. love to work on it.
banikr
banikr el 27 de Abr. de 2020

Iniciar sesión para comentar.


banikr
banikr el 29 de Abr. de 2020
I just wanted to update the finding I have(following mask image).
I used the intensity 10 for thresholding and removed objects with area under 1000.
bi = (mr>10);
% volumeViewer(bi);
stat = regionprops(bi, 'Area', 'PixelIdxList');
for nn=1:length(stat)
s = stat(nn);
if s.Area<1000
continue;
end % remove small objects
bi = zeros(sz);
bi(s.PixelIdxList) = 1;
end
volumeViewer(bi);
I tried to explain the value 10.
J = mr(mr~=0);
>> SkinMusclePrc = prctile(J,[20, 100], 'all')
SkinMusclePrc =
2×1 int16 column vector
10
626
The value 10 is on 20 percentile of the distribution.
let me know if that helps your search also.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by