Rescale 8-bit grayscale image

4 vues (au cours des 30 derniers jours)
Ben Ma
Ben Ma le 8 Sep 2021
Modifié(e) : Ben Ma le 9 Sep 2021
  1. intensity values in the range [0..63] in f become 0,
  2. in the range [63+1..126] are rescaled into the range [0..120],
How to rescale the image? Thanks.

Réponses (1)

DGM
DGM le 8 Sep 2021
Modifié(e) : DGM le 9 Sep 2021
Here's a start:
inpict = imread('cameraman.tif');
inrange = [64 126; 127 230];
outrange = [0 120; 151 255]; % you sure you don't mean 121?
m = inpict<=inrange(1,2);
outpict = zeros(size(inpict),'uint8');
outpict(m) = (double(inpict(m))-inrange(1,1))./(inrange(1,2)-inrange(1,1)) ...
.*(outrange(1,2)-outrange(1,1))+outrange(1,1);
outpict(~m) = (double(inpict(~m))-inrange(2,1))./(inrange(2,2)-inrange(2,1)) ...
.*(outrange(2,2)-outrange(2,1))+outrange(2,1);
imshow(outpict)
imhist(outpict)
You can do the same using interpolation:
inpict = imread('cameraman.tif');
inrange = [0 64 126 127 230 255];
outrange = [0 0 120 151 255 255];
outpict = uint8(interp1(inrange,outrange,double(inpict),'linear','extrap'));
imshow(outpict)
imhist(outpict)
  2 commentaires
Ben Ma
Ben Ma le 8 Sep 2021
No, not 121, will skip that middle range
Ben Ma
Ben Ma le 8 Sep 2021
Thanks a lot.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Environment and Settings dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by