how to fix the rescale slope with own pixel

5 views (last 30 days)
mohd akmal masud
mohd akmal masud on 1 Nov 2018
Commented: Rik on 1 Nov 2018
Anybody please help me
This is code for get the x, y, z(slice number), and pixel value. Then the second one below is my code to get the rescale slope for each slice.
My question is how to set up the pixel value is automatically multiply with theor own rescale slope?
Because the rescale slope and the pixel value have extract seperately.
P = zeros(256, 256, 47);
for K = 20 : 31
petname = sprintf('PETWB001_PT%03d.dcm', K);
P(:,:,K) = dicomread(petname);
end
numOfPixels = numel(P(:));
max(P(:));
sum(P(:));
mask = (P >= 20000 & P <= 32767);
numPixelsInRange = sum(mask(:));
sum(P(P>=20000 & P<=32767));
[r,c,slice] = findND(P >= 20000 & P <= 32767)
val=P(P(:)>=20000 & P(:)<=32767 );
if true
% code
end
for K = 47 : -1 : 1
petname = sprintf('PETWB001_PT%03d.dcm', K);
thisinfo = dicominfo(petname);
fn = fieldnames(thisinfo);
for N = 1 : length(fn)
thisfield = fn{N};
info(K).(thisfield) = thisinfo.(thisfield);
end
this_slice = dicomread(petname);
slices{K} = this_slice;
end
rescale_slopes = {info.RescaleSlope};
mask = cellfun(@isempty, rescale_slopes);
inrange_mask = cellfun(@(M) any(M(:) >= 32767 & M(:) <= 32767), slices);
idx_of_inrange = find(inrange_mask);
rescale_slope_of_inrange = rescale_slopes(inrange_mask);
rescale_slopes(mask) = {0}; %set missing entries to 0
rescale_slopes = cell2mat(rescale_slopes(:))
  1 Comment
Rik
Rik on 1 Nov 2018
The slope and intercept in dicom are scan-specific settings, not specific per slice. So what you should do is load the entire scan to a single array, pick a data type that supports your later calculations and just do this:
IM=IM*info.RescaleSlope+info.RescaleIntercept;

Sign in to comment.

Answers (0)

Community Treasure Hunt

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

Start Hunting!