How to calculate the total pixel value in volume segmentation
10 次查看(过去 30 天)
显示 更早的评论
Dear all,
I have code below. How to calculate the total counts (represent the pixel value) in every volume segmentation P
All the image attached.
% For binary images (png format, each pixel just have value 1 and 0.)
clc
clear all
close all
dataSetDir = fullfile('C:\Users\Akmal\Downloads\1.2.840.113619.2.280.2.1.6032022125618360.139679786-20220425T063142Z-001\1.2.840.113619.2.280.2.1.6032022125618360.139679786');
imageDir = fullfile(dataSetDir,'gradieweigbwaftersegmentationpngTCEswari');
imds = imageDatastore(imageDir);
for i = 1:45
subplot(13,11,i)
I = readimage(imds,i);
% binary
Is{i} = logical(I);
imshow3D(I)
end
% For 3D images spect
myFolder = ('C:\Users\Akmal\Downloads\1.2.840.113619.2.280.2.1.6032022125618360.139679786-20220425T063142Z-001\1.2.840.113619.2.280.2.1.6032022125618360.139679786\dcmeswariint16128x128');
filePattern = fullfile(myFolder, '*.dcm'); % Change to whatever pattern you need.
theFiles = dir(filePattern);
for K = 1 : length(theFiles)
baseFileName = theFiles(K).name;
fullFileName = fullfile(theFiles(K).folder, baseFileName);
fprintf(1, 'Now reading %s\n', fullFileName);
% Now do whatever you want with this file name,
% such as reading it in as an image array with imread()
P(:,:,K) = dicomread(fullFileName);
P(:,:,K) = (P(:,:,K)) .* int16( Is{K} );
% P(:,:,K) = double(uint8(K).*uint8(Is{K}));
end
采纳的回答
DGM
2022-5-7
I'm not quite sure if this is what you're after, but this:
pnz = nnz(P);
will give you the total number of nonzero elements in the pagewise intersection of P and Is.
So it's not necessarily the volume of Is, but the intersection of the two volumes.
2 个评论
DGM
2022-5-8
编辑:DGM
2022-5-8
Not exactly sure if you're after the volumes of the objects in Is or the sum of the regions in P intersecting those volumes. Either way, this calculates both.
It makes sense to arrange Is as a 3D array instead of as a cell array.
% For binary images (png format, each pixel just have value 1 and 0.)
dataSetDir = fullfile('');
imageDir = fullfile(dataSetDir,'gradieweigbwaftersegmentationpngTCEswari');
imds = imageDatastore(imageDir);
Is = false(128,128,45); % preallocate
for i = 1:45
%subplot(13,11,i)
I = readimage(imds,i);
% binary
Is(:,:,i) = logical(I);
%imshow3D(I)
end
% For 3D images spect
myFolder = ('dcmeswariint16128x128');
filePattern = fullfile(myFolder, '*.dcm'); % Change to whatever pattern you need.
theFiles = dir(filePattern);
P = zeros(128,128,45,'int16'); % preallocate
for K = 1 : length(theFiles)
baseFileName = theFiles(K).name;
fullFileName = fullfile(theFiles(K).folder, baseFileName);
%fprintf(1, 'Now reading %s\n', fullFileName);
% Now do whatever you want with this file name,
% such as reading it in as an image array with imread()
P(:,:,K) = dicomread(fullFileName);
% this shouldn't be needed unless it's for something else
%P(:,:,K) = (P(:,:,K)) .* int16( Is(:,:,K) );
end
% calculate things
CC = bwconncomp(Is); % default uses 26-connectivity (a full 3x3x3 nhood) for 3D images
volumes = cellfun(@numel,CC.PixelIdxList) % the volumes of the objects in Is
volumesums = zeros(CC.NumObjects,1); % sum of pixel values in P as selected by Is
for k = 1:CC.NumObjects
volumesums(k) = sum(P(CC.PixelIdxList{k}));
end
volumesums
更多回答(1 个)
Image Analyst
2022-5-8
3 个评论
Image Analyst
2022-5-9
Get the MeanIntensity (one of regionprops3 measurements) and multiply it by the Volume. This will give you the "Total Integrated Graly Level" inside the volume.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 3-D Volumetric Image Processing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!