Как imshow с невидимой фигурой в MATLAB, работающей под Linux

Моя цель состоит в том, чтобы:

Create an invisible figure Using subplots, plot images on it, and then Save it without having it to open.

Таким образом, я запускаю следующий код:

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 отобразить изображение на невидимой фигуре и не попытаться всплыть?

 Vinayak Agarwal09 июн. 2012 г., 06:49
Привет, я использую MATLAB R2011b.
 Amro08 июн. 2012 г., 14:53
что бы это ни стоило, вышеприведенное прекрасно работает на моей машине с Windows ..
 Amro08 июн. 2012 г., 20:28
Я думаю, вы могли бы податьbug report на MathWorks ..
 reve_etrange09 июн. 2012 г., 05:12
Какую версию MATLAB вы используете? Ваш код также отлично работает на моей машине с Linux.
 Vinayak Agarwal08 июн. 2012 г., 20:10
Спасибо Амро. Просматривая различные форумы, я знал, что это будет работать на Windows, но мне действительно интересно запускать это на Linux.

Ответы на вопрос(3)

Для тех, кто приземляется здесь. После борьбы с этим мне удалось заручиться поддержкой математики. Решение простое. Вам также нужно отключить видимость осей.

Например.

f = figure('Visible', 'off');
a = axes('Visible','off');  ### <-- added this line of code
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');

Это будет работать,

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');

imagesc () также может использоваться вместо функции image ()

Я получаю ту же ошибку, когда запускаю Matlab в режиме nodisplay. Мой обходной путь - нарисовать сетку поверхности с изображением в качестве наложения текстуры:

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

Ваш ответ на вопрос