Overlay two images in one axes?

8 次查看(过去 30 天)
xi
xi 2020-1-21
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 个评论
xi
xi 2020-1-21
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 2020-1-21
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;

请先登录,再进行评论。

回答(2 个)

Walter Roberson
Walter Roberson 2020-1-21
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.

Image Analyst
Image Analyst 2020-1-22
With newer versions of MATLAB, try imoverlay().

类别

Help CenterFile Exchange 中查找有关 Red 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by