Zoom in on two images simultaneously displayed using imshowpair

16 views (last 30 days)
I have two images of the same dimensions. I'm using the code below to display them side by side.
imshowpair(imageA, imageB, "montage")
Currently if I zoom into an area of imageA in the figure ouput, it zooms solely into this area, treating the two images as one image. I want to be able to zoom into an area in imageA, and for the display to also zoom into the corresponding area of imageB at the same time, so I can compare the same areas of both images when zooming in.
Can I do this using imshowpair, the tools in the figure output, or some other way?
Thanks for the help!

Accepted Answer

Adam Danz
Adam Danz on 9 Feb 2021
Edited: Adam Danz on 9 Feb 2021
> If I zoom into an area of imageA in the figure ouput, it zooms solely into this area, treating the two images as one image
That's because the two images are merged into one image on the same axes.
To achieve a dual display with independent axis tools, you need to plot the images in different axes. Then use linkaxes to yoke the axis limits when zooming/panning.
% Read in demo image
img = imread('cameraman.tif');
fig = figure();
ax(1) = axes('Units','normalized','Position', [ .1 .1 .4 .8]);
ax(2) = axes('Units','normalized','Position', [ .5 .1 .4 .8]);
imshow(img, 'Parent', ax(1))
imshow(img, 'Parent', ax(2))
linkaxes(ax)
  4 Comments
Siddharth Pantoji
Siddharth Pantoji on 21 Dec 2022
Edited: Siddharth Pantoji on 21 Dec 2022
Hi Adam,
I cant seem to get my annotations (red lines) to appear on both the images. Any suggestions?
Hold didnt work either
fig = figure();
ax(1) = axes('Units','normalized','Position', [ .1 .1 .4 .8]);
ax(2) = axes('Units','normalized','Position', [ .5 .1 .4 .8]);
imshow(ReferenceImage2, 'Parent', ax(1))
line([0 2464],[MW_lowerlimit-1 MW_lowerlimit-1],get(gca,'Ylim'),'Color',[1 0 0],'linewidth',0.5);
line([0 2464], [MW_upperlimit+1 MW_upperlimit+1],get(gca,'Ylim'),'Color',[1 0 0],'linewidth',0.5);
line([MW_leftlimit-1 MW_leftlimit-1],[0 2056],get(gca,'Ylim'),'Color',[1 0 0],'linewidth',0.5);
line([MW_rightlimit+1 MW_rightlimit+1],[0 2056],get(gca,'Ylim'),'Color',[1 0 0],'linewidth',0.5);
line([CenterLinePosition CenterLinePosition],[0 2056],get(gca,'Ylim'),'Color',[1 0 0],'linewidth',0.5,'LineStyle','--');
imshow(ReferenceImage1, 'Parent', ax(2))
line([0 2464],[MW_lowerlimit-1 MW_lowerlimit-1],get(gca,'Ylim'),'Color',[1 0 0],'linewidth',0.5);
line([0 2464], [MW_upperlimit+1 MW_upperlimit+1],get(gca,'Ylim'),'Color',[1 0 0],'linewidth',0.5);
line([MW_leftlimit-1 MW_leftlimit-1],[0 2056],get(gca,'Ylim'),'Color',[1 0 0],'linewidth',0.5);
line([MW_rightlimit+1 MW_rightlimit+1],[0 2056],get(gca,'Ylim'),'Color',[1 0 0],'linewidth',0.5);
line([CenterLinePosition CenterLinePosition],[0 2056],get(gca,'Ylim'),'Color',[1 0 0],'linewidth',0.5,'LineStyle','--');
linkaxes(ax)
Adam Danz
Adam Danz on 21 Dec 2022
You need to specify which axis the lines should be added to .
line(ax(1), ...)
line(ax(2), ...)

Sign in to comment.

More Answers (0)

Products


Release

R2020b

Community Treasure Hunt

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

Start Hunting!