2014-10-10 2 views
2

У меня есть 225 изображений, вместе с функцией монтажа в Matlab. И я могу показать их с монтажом. Но я не могу сохранить монтаж как полное изображение, пожалуйста, помогите мне.Сохранить монтаж как изображение 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]); 

Выход на монтаж «h» - это всего лишь число.

ответ

0

Вы почти у цели! Значение «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'); 
+0

Большое спасибо! –

+0

Добро пожаловать! –

+0

Сценарий, использующий getframe, сохраняет монтаж в том же размере графического интерфейса. Есть ли способ сохранить монтаж в нем реального размера? – lroca

3

Я хотел бы указать лучший способ сделать это. Хотя способ 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

Смежные вопросы