Rescale 8-bit grayscale image

4 views (last 30 days)
Ben Ma
Ben Ma on 8 Sep 2021
Edited: Ben Ma on 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.

Answers (1)

DGM
DGM on 8 Sep 2021
Edited: DGM on 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 Comments
Ben Ma
Ben Ma on 8 Sep 2021
No, not 121, will skip that middle range

Sign in to comment.

Categories

Find more on Environment and Settings in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!