Tq Sir. Its Work!!

# How to calculate the total pixel value in volume segmentation

9 views (last 30 days)

Show older comments

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

### Accepted Answer

DGM
on 7 May 2022

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 Comments

DGM
on 8 May 2022

Edited: DGM
on 8 May 2022

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

### More Answers (1)

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!