Сохранить монтаж как изображение Matlab

У меня есть 225 изображений вместе с функцией монтажа в Matlab. И я могу показать их с монтажом. Но я не могу сохранить монтаж как полное изображение, пожалуйста, помогите мне.

path = uigetdir;

D=dir(fullfile(path,'*.tif'));

imcell = cell(1,numel(D));
imcropped = cell(1,numel(D));

figure(1);
title('Drag square to crop picture, end with a double click',...
  'FontSize', 15 , 'HandleVisibility' , 'off' ) ;
axis equal
set( gca , 'NextPlot' , 'replacechildren') ;
imcell1 = imread(D(50).name);
[~, rect] = imcrop(imcell1);
close(figure(1));
% 
for i = 1:numel(D)
  imcell{i} = imread(D(i).name);
  imcropped{i} = imcrop(imcell{i}, rect);
end

h=montage(cat(4,imcropped{:}),'Size', [15 15] );

Выход на монтаж "ч" просто число.

2 ответа

Решение

Ты почти там! Значение 'h' на самом деле является дескриптором объекта изображения, созданного монтажом, который вы сделали на рисунке. Что вы можете сделать, это использовать getframe для захвата содержимого рисунка (графического объекта) и сохранения его как изображения. Вот очень простой пример, когда код идет сразу после вашего

h=montage(cat(4,imcropped{:}),'Size', [15 15] );

MyMontage = getframe(gca) %// Get content of current axes. I did it with sample images.

Вывод следующий:

MyMontage = 

       cdata: [384x1024x3 uint8] % Yours will be different
    colormap: []

Следовательно, вы можете сохранить фактические данные, хранящиеся в cdata, в новом файле, и все готово!

imwrite(MyMontage.cdata,'FancyName.tif','tif');

Я хотел бы указать лучший способ сделать это. Хотя путь Benoit_11 технически верен, он ограничивает разрешение изображения размером вашего экрана. Когда вы используете getframe(gca)Matlab эффективно делает снимок экрана с текущим содержимым осей, в любом размере, в котором находится ваше окно рисунка.

Лучший способ сделать это - использовать дескриптор, так как он ссылается на фактический графический вывод montage() вместо того, что он отображает как. Чтобы сохранить изображение с ручки, вам нужно получить cdata из объекта, на который он ссылается get:

h=montage(cat(4,imcropped{:}),'Size', [15 15] );
MyMontage = get(h, 'CData');
imwrite(MyMontage, 'FancyName.tif', 'tif');

Таким образом, вы получите полное разрешение монтажа, а не только разрешение его отображения.

Для получения дополнительной информации об описателях изображений: http://www.mathworks.com/help/matlab/creating_plots/the-image-object-and-its-properties.html

Другие вопросы по тегам