MATLAB Answers

# How do I limit the range of a colormap when using imwrite

26 views (last 30 days)
Michael Devereux on 23 Apr 2018
Commented: Michael Devereux on 25 Apr 2018
I want to save an image with imwrite and get the same output as the code below displays on screen
figure,imagesc(rhoi),
colormap(jet)
caxis([.45*min(rhoi(:)) 0*.55*max(rhoi(:))])
Is it possible to set a caxis property for imwrite?
imwrite(rhoi,jet,'out.png')
EDIT: I have included the full code. Basically, I want the last image RGB to look the same as that displayed by imagesc at each stage.
clear all
close all
clc
Inner = 0; % inner radius of the colour ring
rOuter = 150; % outer radius of the colour ring
[x, y] = meshgrid(-rOuter:.1:rOuter);
[theta, rho] = cart2pol(x, y);
rhoi=imcomplement(rho);
cmap=jet(256);
rhoi2=rhoi;
rhoi2=(rhoi2-min(rhoi2(:)))/(max(rhoi2(:))-min(rhoi2(:)));
figure;imagesc(rhoi2),colormap(cmap);
caxis([.55 .95])
rhoi2(rhoi2<.55) = .55;
rhoi2(rhoi2> .95) = .95;
figure,imagesc(rhoi2)
colormap( cmap);
X=uint8(256*rhoi2);
figure;imagesc(X),colormap( cmap);
RGB=ind2rgb(X,cmap);
figure;imshow(RGB)
##### 3 CommentsShowHide 2 older comments
Michael Devereux on 24 Apr 2018
I have added the full code to demonstrate the problem

Sign in to comment.

### Accepted Answer

Guillaume on 24 Apr 2018
Before the call to ind2rgb (or imwrite), you need to rescale your matrix as colour indices so that the minimum is index 1 (for type double, 0 for type uint8) and maximum is index 256 (255 for uint8):
X = round(1 + (rhoi2 - min(rhoi2(:))) * 255 / (max(rhoi2(:)) - min(rhoi2(:)))); %using double
RGB = ind2rgb(X, cmap);
figure; imshow(RGB);
##### 1 CommentShowHide None
Michael Devereux on 25 Apr 2018
Thanks! This did what I need.

Sign in to comment.

### More Answers (1)

Ahmet Cecen on 23 Apr 2018
You should get the same effect if you just did:
rhoi(rhoi<.45*min(rhoi(:))) = .45*min(rhoi(:));
rhoi(rhoi> 0.55*max(rhoi(:)) = 0.55*max(rhoi(:));
##### 1 CommentShowHide None
Michael Devereux on 24 Apr 2018
Thanks! This works for viewing with imagesc without specifying caxis but does not work with imwrite or ind2rgb.

Sign in to comment.

### Community Treasure Hunt

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

Start Hunting!