Subplot - linkaxes for 2 out of 3 images

2 ビュー (過去 30 日間)
Avishay Assayag
Avishay Assayag 2021 年 5 月 26 日
編集済み: Avishay Assayag 2021 年 7 月 6 日
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 件のコメント
Avishay Assayag
Avishay Assayag 2021 年 5 月 27 日
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 2021 年 5 月 27 日
if you are satisfied by that 'solution' i would post it as answer under your question

サインインしてコメントする。

採用された回答

Avishay Assayag
Avishay Assayag 2021 年 6 月 9 日
編集済み: Avishay Assayag 2021 年 7 月 6 日
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

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeSubplots についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by