3

私はmatlabのモンタージュ機能と一緒に225枚の画像を持っています。そして、それらをモンタージュで見せることができます。しかし、モンタージュを完全な画像として保存することはできません。助けてください。

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」の出力は単なる数値です。

4

2 に答える 2

4

より良い方法を指摘したいと思います。Benoit_11 の方法は技術的には正しいですが、画像の解像度が画面のサイズに制限されます。を使用するgetframe(gca)と、Matlab は、Figure ウィンドウの現在のサイズに関係なく、現在の Axes コンテンツのスクリーンショットを効果的に取得します。

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を参照してください。

于 2015-09-02T19:50:41.243 に答える