Matlab - Создание фигуры разного размера. - PullRequest
1 голос
/ 09 ноября 2019

У меня есть массив изображений, и мне нужно рисовать их рядом, каждое изображение имеет разный размер. Хотя фактические размеры изображений довольно велики, я бы хотел сделать что-то вроде imresize, чтобы построить желаемый размер.

Я попытался использовать стратегию подплота, например

subplot(1, 4, 1);
imshow(...);
subplot(1, 4, 2);
imshow(...);
subplot(1, 4, 3);
imshow(...);
subplot(1, 4, 4);
imshow(...);

Но всеизображения отображаются одинакового размера. Я хочу что-то вроде этого

enter image description here

Это по какой-то причине кажется нетривиальным. Был бы очень признателен за помощь.

Ответы [ 2 ]

2 голосов
/ 09 ноября 2019

Можно создать подзаговоров разных размеров , указав многоэлементный вектор для аргумента позиции сетки p в синтаксисе subplot(m,n,p).

Ваш пример можно построитьсо следующим:

subplot(4,10,[1:4 11:14 21:24 31:34]);
subplot(4,10,[5:7 15:17 25:27]);
subplot(4,10,[8:9 18:19]);
subplot(4,10,[10]);
1 голос
/ 09 ноября 2019

Вы можете добавить 4 оси к рисунку и установить положение каждой оси:

I = imread('cameraman.tif');

scrsz = get(groot, 'ScreenSize'); %Get screen size
f = figure('Position', [scrsz(3)/10, scrsz(4)/5, scrsz(4)/2*2.4, scrsz(4)/2]); %Set figure position by screen size.
positionVector1 = [-0.25, 0.95-0.9, 0.9, 0.9]; %position vector for largest image.
positionVector2 = [0.23, 0.95-0.6, 0.6, 0.6];
positionVector3 = [0.555, 0.95-0.4, 0.4, 0.4];
positionVector4 = [0.775, 0.95-0.267, 0.267, 0.267]; %position vector for smallest image.
axes(f, 'Position', positionVector1);
imshow(I, 'border', 'tight');
axes(f, 'Position', positionVector2);
imshow(I, 'border', 'tight');
axes(f, 'Position', positionVector3);
imshow(I, 'border', 'tight');
axes(f, 'Position', positionVector4);
imshow(I, 'border', 'tight');

Установка положения вручную - не лучшее решение.
Должен быть способ вычисленияположение каждой оси.

Результат:
enter image description here

...