Chcę zapisać operację imshow(im16, [WC-WW/2,WC+WW/2]); w nowej zmiennej. Jest to obraz, który wyświetlam pewien zakres, ale nie chcę używać imshow(), chcę tylko zapisać nowy obraz z pewnym zakresem wyników okna intensywności operacji WC-WW / 2, WC + WW / 2.

Pracuję z obrazami CT w Matlab (w formacie PNG) i regulacji szerokości okna i poziomu okna.

1
Eli Flowers 9 październik 2020, 02:14

1 odpowiedź

Najlepsza odpowiedź

Co imshow(im16,[WC-WW/2,WC+WW/2]) ma umieścić każdy piksel w im16 z intensywnością poniżej WC-WW/2 do czerni (0) i każdy piksel z intensywnością powyżej WC+WW/2 do białego (255), a następnie Prześlij pozostałe piksele. Jednym ze sposobów na to byłoby:

im = imread('corn.tif',3); % your image goes here

low = 0.2*255; % lower intensity that you want to put to black (WC-WW/2)
high = 0.8*255; % upper intensity that you want to put to white (WC+WW/2)

im1 = double(im); % turn into double
idxlow = im1 <= low; % index of pixels that need to be turned to black
idxhigh = im1 >= high; % index of pixels that need to be turned to white
im1(idxlow) = 0; % black
im1(idxhigh) = 255; % white
im1(~idxlow & ~idxhigh) = im1(~idxlow & ~idxhigh) - min(im1(~idxlow & ~idxhigh),[],'all'); % rescale low values
im1(~idxlow & ~idxhigh) = im1(~idxlow & ~idxhigh).*255./max(im1(~idxlow & ~idxhigh),[],'all'); % rescale high values
im1 = uint8(im1); % turn back into uint8 (or your initial format)

Tylko po to, by sprawdzić:

figure
hold on
% Show the original image
subplot(1,3,1)
imshow(im)
title('Original')
% Show the original image reranged with imshow()
subplot(1,3,2)
imshow(im,[low,high])
title('Original scaled with imshow')
% Show the new reranged image
subplot(1,3,3)
imshow(im1)
title('New image')
0
Matteo V 9 październik 2020, 07:09