3

私の目標は次のとおりです。

  1. 目に見えない図を作成する
  2. サブプロットを使用して、その上に画像をプロットしてから、
  3. 開かずに保存します。

したがって、私は次のコードを実行しています。

f = figure('Visible', 'off');
subplot(2, 2, 1), imshow(image1);
subplot(2, 2, 2), imshow(image2);
subplot(2, 2, 3), imshow(image3);
subplot(2, 2, 4), imshow(image4);
saveas(f, 'filename');

しかし、エラーが発生します:

Error using imshow (line xxx)
IMSHOW unable to display image.

これは、imshowが画像を表示しようとしていることを意味します。imshow非表示の図に画像を表示し、ポップアップしないようにする方法はありますか?

4

3 に答える 3

1

これはうまくいくでしょう、

f = figure('Visible', 'off');
subplot(2, 2, 1), image(image1);
subplot(2, 2, 2), image(image2);
subplot(2, 2, 3), image(image3);
subplot(2, 2, 4), image(image4);
saveas(f, 'filename');

In case of gray scale images

f = figure('Visible', 'off');
subplot(2, 2, 1), image(image1),colormap(gray);
subplot(2, 2, 2), image(image2),colormap(gray);
subplot(2, 2, 3), image(image3),colormap(gray);
subplot(2, 2, 4), image(image4),colormap(gray);
saveas(f, 'filename');

image() 関数の代わりに imagesc() を使用することもできます

于 2014-03-27T08:01:09.453 に答える
0

Matlab を非表示モードで実行すると、同じエラーが発生します。私の回避策は、画像をテクスチャ マッピングとしてサーフェス メッシュを描画することでした。

function varargout = imshow_nodisp(im)
% An IMSHOW implementation that works even when Matlab runs -nodisplay.
%
% Only we don't scale the figure window to reflect the image size. Consequently
% the ugly pixel interpolation is directly apparent. IMSHOW has it too, but it
% tries to hide it by scaling the figure window at once.
%
% Input arguments:
%  IM  HxWxD image.
%
% Output arguments:
%  HND  Handle to the drawn image (optional).
%
  [h,w,~] = size(im);

  x = [0 w; 0 w] + 0.5;
  y = [0 0; h h] + 0.5;
  z = [0 0; 0 0];

  hnd = surf(x, y, z, flipud(im), 'FaceColor','texturemap', 'EdgeColor','none');

  view(2);
  axis equal tight off;

  if nargout > 0
    varargout = hnd;
  end
end
于 2015-02-25T11:00:57.487 に答える