Rescale 8-bit grayscale image
5 views (last 30 days)
Show older comments
- intensity values in the range [0..63] in f become 0,
- in the range [63+1..126] are rescaled into the range [0..120],
How to rescale the image? Thanks.
0 Comments
Answers (1)
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)
See Also
Categories
Find more on Convert Image Type in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!