Subplot - linkaxes for 2 out of 3 images

2 vues (au cours des 30 derniers jours)
Avishay Assayag
Avishay Assayag le 26 Mai 2021
Hi,
I have 3 images, each of different dimension. I'm plotting the 3 images side by side using subplot.
The above is done in a loop - in each iteration 3 similar images are dispayed and are saved to a movie.
I would like that the middle and the right image will be displayed accodring to the real size and proportions between both images, and that the left image will be shown with the same height as the middle image (maintaining the aspect ratio of this image)
I'm using the code below.
In the first iteration everything looks fine, though in the following iterations it does not dispalyed as expected.
See 2 example pictures below:
First Iteration:
Following Iterations:
VidObj = VideoWriter(fname, 'MPEG-4'); %set your file name and video compression
open(VidObj);
for k = 1:NumOfFrames
% 800x482
h1 = subplot(1, 3, 1);
imshow(Image1(:, :, k);
% 640x480
h2 = subplot(1, 3, 2);
imshow(Image2(:, :, k));
% 1280x720
h3 = subplot(1, 3, 3);
imshow(Image3(:, :, k));
%
linkaxes([h2,h3])
f = getframe(gcf);
writeVideo(VidObj, f);
end
  5 commentaires
Avishay Assayag
Avishay Assayag le 27 Mai 2021
Thanks Jonas!
clf improved performance.
Running over 1460 frames took as follows:
Without close(gcf), runtime = 243sec
With close(gcf) ,runtime = 462sec
Without close(gcf), using clf('reset'), runtime = 288sec
Jonas
Jonas le 27 Mai 2021
if you are satisfied by that 'solution' i would post it as answer under your question

Connectez-vous pour commenter.

Réponse acceptée

Avishay Assayag
Avishay Assayag le 9 Juin 2021
Modifié(e) : Avishay Assayag le 6 Juil 2021
Hi,
I found a solution how to avoid the display problem while improving performance greatly.
The code below runs much faster, about 75sec, which is 1/3 of the time comparing to the previous code, without the original display problem.
VidObj = VideoWriter(fname, 'MPEG-4'); % Set your file name and video compression
open(VidObj);
%% Plot first image in all image arrays
subplot(1, 3, 1);
h1 = imshow(Image1(:, :, 1);
%
subplot(1, 3, 2);
h2 = imshow(Image2(:, :, 1));
%
subplot(1, 3, 3);
h3 = imshow(Image3(:, :, 1));
linkaxes([h2,h3])
%%
for k = 2:NumOfFrames
% 800x482
Image = Image1(:, :, k);
set(h1, 'CData', Image);
% 640x480
Image = Image2(:, :, k);
set(h2, 'CData', Image);
% 1280x720
Image = Image3(:, :, k);
set(h3, 'CData', Image);
%
f = getframe(gcf);
writeVideo(VidObj, f);
end

Plus de réponses (0)

Community Treasure Hunt

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

Start Hunting!

Translated by