MATLAB Answers

Overlay two images in one axes?

5 views (last 30 days)
xi
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?

  4 Comments

Show 1 older comment
Walter Roberson
Walter Roberson on 21 Jan 2020
repmat(Grey, 1,1,3) to create an rgb equivalent that does not need a colormap. image() that passing in xdata and ydata values to position it on the axes. Now you can hold on and image() the other one passing in xdata and ydata and then colormap() as appropriate
xi
xi on 21 Jan 2020
Thanks very much for your comment. Both images are Grey scale type, no RGB data. I just need to show them in two different colormaps. See sample images I1 and I2 in attached.
I want I2 to be grey scale in the background, I1 on top of I2 with some transparency, arbitrary colormap, and its CDATA can be updated.
xi
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
figure
ref1=imref2d(size(img1),0.05,0.05); %rescale to mm
ref2=imref2d(size(img2),0.0048,0.0048); %%rescale to mm
h2=imshow(img2,ref2);
hold on
h1=imshow(img1,ref1);
ax=gca;
ax.CLim=[-1,1]; %set color limit
ax.Colormap=[1-gray;[[0:1/63:1]',zeros(64,2)]]; %set colormap
colorbar
ax.XLim=[34,45];
ax.YLim=[9,20];
h1.AlphaData=0.7;

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);
colormap(parula);
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.

  0 Comments

Sign in to comment.


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

  0 Comments

Sign in to comment.


Translated by