2010-03-19 25 views
6

En MATLAB, ¿cómo se escribe una matriz en una imagen de formato EPS?MATLAB - escribir imagen en un archivo eps

Parece imwrite no es compatible con EPS.

Convert no está funcionando en el servidor Linux que estoy utilizando:

$ convert exploss_stumps.jpg exploss_stumps.eps 
convert: missing an image filename `exploss_stumps.eps' @ convert.c/ConvertImageCommand/2838 

¿Por qué?


me trataron idea de gnovice en el modo de terminal:

figH = figure('visible','off') ; 
imshow(img,'border','tight',...  %# Display in a figure window without 
     'InitialMagnification',100); %# a border at full magnification 
print(strcat(filepath,'/', dataset,'_feature_',num2str(j), '.eps'),'-depsc2'); 
    close(figH) ; 

Sin embargo, me tiene:

??? Error al usar ==> imshow en 191
IMSHOW requiere la ejecución de Java.

error en ==> study_weaker en 122
imshow (img, 'frontera', 'apretada', ...% # Display en una ventana figura sin

191 de error (Eid, '% s requiere Java para ejecutar ', superior (mfilename));.

¿Cómo lo arreglo

+0

Pruebe lo mismo usando SciPy? Guardar primero en el texto y luego usar la asíntota o convertir el comando de Unix? –

+0

¡Gracias! convertir no está funcionando bien. – Tim

+0

Tenga en cuenta también que también puede ejecutar en modo "terminal" con Java. Simplemente inicie MATLAB con la bandera "-nodesktop" en lugar de la bandera "-nojava". –

Respuesta

6

Una posible solución es para trazar su imagen utilizando IMSHOW, a continuación, imprimir toda la figura como un .eps usando? PRINT:

img = imread('peppers.png');   %# A sample image 
imshow(img,'Border','tight',...  %# Display in a figure window without 
     'InitialMagnification',100); %# a border at full magnification 
print('new_image.eps','-deps');  %# Print the figure as a B&W eps 

Un inconveniente de esta solución es que si la imagen es demasiado grande para caber en la pantalla, IMSHOW se reducirá para que se ajuste, lo que reducirá la resolución de la pantalla de la imagen. Sin embargo, puede ajustar la resolución final de la imagen guardada usando -r<number> option for the PRINT function. Por ejemplo, puede imprimir su figura como un color PostScript encapsulado Nivel 2 con una resolución de 300 dpi de la siguiente manera:

print('new_image.eps','-depsc2','-r300'); 

EDIT: Si no puede utilizar IMSHOW (ya sea porque usted don' t tiene el Image Processing Toolbox o porque está utilizando un modo de MATLAB que no lo permite), aquí es una manera alternativa de crear e imprimir la figura:

img = imread('peppers.png');  %# A sample image 
imagesc(img);      %# Plot the image 
set(gca,'Units','normalized',... %# Set some axes properties 
     'Position',[0 0 1 1],... 
     'Visible','off'); 
set(gcf,'Units','pixels',...  %# Set some figure properties 
     'Position',[100 100 size(img,2) size(img,1)]); 
print(gcf,'new_image.eps','-depsc2','-r300'); %# Print the figure 

también puede echar un vistazo a ver cómo this documentation trabajos de impresión sin una pantalla.

+1

Para evitar cambios en la resolución, probablemente pueda obtener el tamaño de la matriz y especificar el tamaño del eje en píxeles. – yuk

+0

mejor que sea '-depsc2' – AVB

+0

@AB: Esa opción depende del OP, según el tipo de archivo .eps que quieran/necesiten. – gnovice

0

Debería funcionar usando imwrite. Sin embargo, debería agregar un mapa de color para que funcione.

Sin embargo, al consultar las páginas de ayuda veo que NO es posible usar imwrite para escribir un archivo EPS.

+0

ejemplo, por favor? – Tim

0

El siguiente código puede ayudarte a convertir archivos png a eps.

fileName = 'FarmerStats'; % your FILE NAME as string 

A = imread(fileName,'png'); 
set(gcf,'visible','off') %suppress figure 
image(A);     
axis image    % resolution based on image 
axis off     % avoid printing axis 
set(gca,'LooseInset',get(gca,'TightInset')); % removing extra white space in figure 
saveas(gcf,fileName,'epsc'); % save as COLOR eps file