MATLAB Answers

Overlay two images in one axes?

37 views (last 30 days)
xi on 21 Jan 2020
Answered: Image Analyst on 22 Jan 2020
I have two images of the same object, but with different resolutions (and sizes).
I want to show the high resolution image in grey scale as the background and the low resolution image in parula colormap (for example) in the foreground, and add some adjustable transparency so that both can be visualized.
I realize that, I first need to do image registration of the two and then, I can overlay them using
imshowpair(img1,ref1,img2,ref2), where, ref1 and ref2 are image references. obtained using imref2d.
But how can I plot them in two different color scales of my own selection, in one axes? and I can freely adjust the properties of two image objects?
xi on 21 Jan 2020
Here's a workaround solution I just figured out, but I'm not happy with two images sharing the same colorbar.
Because the colormap is specified by the axes property, and there's only one sharing axis.
It would be ideal to show one colorbar on the left and another on the right, and they can be individually controlled.
img1=I1/max(max(I1)); %normalize to [0,1]
img2=-I2/max(max(I2)); %normalize to [-1,0]
img2=padarray(img2,[1830,6880],'pre'); %shift
ref1=imref2d(size(img1),0.05,0.05); %rescale to mm
ref2=imref2d(size(img2),0.0048,0.0048); %%rescale to mm
hold on
ax.CLim=[-1,1]; %set color limit
ax.Colormap=[1-gray;[[0:1/63:1]',zeros(64,2)]]; %set colormap

Sign in to comment.

Answers (2)

Walter Roberson
Walter Roberson on 21 Jan 2020
RGB = repmat(I2,1,1,3);
h2 = image([0 1], [0 1], RGB);
hold on
h1 = image([0 1], [0 1], I1, 'alphadata', 0.8);
hold off
and you can set the CData property of h1 as needed.
I2 will not appear grayscale, but that is because you are overlaying RGB on top of it.

Image Analyst
Image Analyst on 22 Jan 2020
With newer versions of MATLAB, try imoverlay().

Community Treasure Hunt

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

Start Hunting!

Translated by