How to calculate the Volume of the segmented tumour or ROI?
7 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I have tumour MRI images, and I segment the tumour and binarize it using another program using Matlab, I want to calculate: The signal intensity (SI) in that ROI (mean and max values) get the pixels relative frequency according to the SI histogram of this ROI with fixed pins width, and its skewness, kurtosis and 95-percentile then normalize the SI within each pixel inside the ROI to the ROI's volume cumulative frequency slope of the normalized ROI I did generate the flowing script but I do not know how to calculate the ROI' volume, also, since I new to Matlab I do not know if my script is correct
% load the images
cbfm=load_untouch_nii('singCBF.nii.gz');cbf=double(cbfm.img);
MASK=load_untouch_nii('tumour-low-bin.nii.gz'); mask=double(MASK.img);
%to show the cbf_map
reshaped_cbf=reshape(cbf, [128 128 1 20]);
montage(reshaped_cbf, [0 60]), title('cbf'), colormap(jet),colorbar
%apply the mask
masked_cbf_t=cbf.*mask;
%%to show the cbf_map, mesh of each ROI and mesh of the mean ROI
reshaped_t=reshape(masked_cbf_t, [128 128 1 20]);
figure; montage(reshaped_t, [0 60]), title('masked.t'), colormap(jet),colorbar
figure;for a=1:14; subplot(4,4,a); mesh(masked_cbf_t(:,:,a)),title('masked.cbf.t'); end
m_r_c=nanmean(reshaped_t(:,:,:,:),4);
figure; imagesc(m_r_c, [0 60]), title('masked.t'), colormap(jet),colorbar
mesh(m_r_c), title('mean.t')
%remove the zeros and NaN from the ROI and calculate the mean and the max
masked_cbf_t(isnan(masked_cbf_t))=0;masked_cbf_t=masked_cbf_t(masked_cbf_t~=0);
masked_cbf_t=masked_cbf_t(masked_cbf_t>0);
mean_t=nanmean(masked_cbf_t(:))
max_cbf_t=max(masked_cbf_t(:))
%%get the relative frequency for the t
m_cbf_t=int8(masked_cbf_t);
[n_t,xout_t]=imhist(m_cbf_t);
rf_t=(n_t/sum(n_t))*100;
cf_t=cumsum(imhist(m_cbf_t));
%
figure; bar(xout_t,rf_t),title('r.f.t'),xlim([0, 150]);figure; imhist(m_cbf_t),title('f.t'),xlim([0, 150])
;figure;bar(xout_t,cf_t),title('c.f.t'),xlim([0, 150])
percent_95_rf_t=prctile(rf_t(:),95)
kur_t=kurtosis(rf_t(:))
ske_t=skewness(rf_t(:))
%cumulative frequency slope
coefficients_t = polyfit(xout_t, cf_t,2);
slope_cf_t = coefficients_t(2)
%%to confirm that the mask in the correct location
topped=cat(4,cbf,mask,mask);
figure; montage(permute(topped,[1,2,4,3])/2,[0 60]), title('topped'), colormap(jet),colorbar
%load the normal area which is in the basal ganglia(not affect by the
%age)and remove the zeros and NaN
BG=load_untouch_nii('bg-low-bin.nii.gz');bg=double(BG.img);
masked_cbf_bg=cbf.*bg;
masked_cbf_bg(isnan(masked_cbf_bg))=0;masked_cbf_bg=masked_cbf_bg(masked_cbf_bg~=0);
mean_bg=nanmean(masked_cbf_bg(:))
max_cbf_bg=max(masked_cbf_bg(:))
%%get the relative frequency for the bg
m_cbf_bg=int8(masked_cbf_bg);
[n_bg,xout_bg]=imhist(m_cbf_bg);
rf_bg=(n_bg/sum(n_bg))*100;
cf_bg=cumsum(imhist(m_cbf_bg));
%
figure; bar(xout_bg,rf_bg),title('r.f.bg'),xlim([0, 150]);figure; imhist(m_cbf_bg),title('f.bg'),xlim([0, 150]);
figure;bar(xout_bg,cf_bg),title('c.f.bg'),xlim([0, 150])
his_rf_bg=[xout_bg,rf_bg];
his_cf_bg=[xout_bg,cf_bg];
percent_95_rf_bg=prctile(rf_bg(:),95)
kur_bg=kurtosis(rf_bg(:))
ske_bg=skewness(rf_bg(:))
%cumulative frequency slope
coefficients_bg = polyfit(xout_bg, cf_bg,2);
slope_cf_bg = coefficients_bg(2)
r_mean_bg= mean_t / mean_bg
r_max_bg= (max_cbf_t / max_cbf_bg)
r_bg=(masked_cbf_t(:))/max(masked_cbf_bg(:));
r_cbf_bg=int8(r_bg);
[n_r_bg,xout_r_bg]=imhist(r_cbf_bg);
rf_r_bg=(n_r_bg/sum(n_r_bg))*100;
cf_r_bg=cumsum(imhist(r_cbf_bg));
%
figure; bar(xout_r_bg,rf_r_bg),title('r.f.r.bg'),xlim([0, 150]);figure; imhist(r_cbf_bg),title('f.r.bg'),xlim([0, 150]);
figure;bar(xout_r_bg,cf_r_bg),title('c.f.r.bg'),xlim([0, 150])
percent_95_rf_r_bg=prctile(rf_r_bg(:),95)
kur_r_bg=kurtosis(rf_r_bg(:))
ske_r_bg=skewness(rf_r_bg(:))
%cumulative frequency slope
coefficients_r_bg = polyfit(xout_r_bg, cf_r_bg,2);
slope_cf_r_bg = coefficients_r_bg(2)
0 Kommentare
Antworten (1)
Image Analyst
am 19 Sep. 2017
I'm not sure where your segmented/binary image is in your code, but basically to get the volume, you can use regionprops() (if you have multiple blobs),
props = regionprops(labeledImage, 'Area');
or simply sum() if you have segmented it such that the tumor is the only blob in there:
volume = sum(binaryImage(:));
2 Kommentare
Siehe auch
Kategorien
Mehr zu 3-D Volumetric Image Processing finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!