MATLAB - write image into an eps file
Asked Answered
B

3

7

In MATLAB, how do you write a matrix into an image of EPS format?

It seems imwrite does not support EPS.

Convert is not working on the Linux server I am using:

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

Why?


I tried gnovice's idea under terminal mode:

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

However I got:

??? Error using ==> imshow at 191
IMSHOW requires Java to run.

Error in ==> study_weaker at 122
imshow(img,'border','tight',... %# Display in a figure window without

191 error(eid,'%s requires Java to run.',upper(mfilename));

How can I fix it?

Brochette answered 19/3, 2010 at 15:46 Comment(3)
Try the same thing using SciPy? Save to text first and then use Asymptote or convert unix command?Rudd
Thanks! convert is not working well.Brochette
Note also that you can also run in "terminal" mode with Java. Just start MATLAB with the "-nodesktop" flag instead of the "-nojava" flag.Janeljanela
Z
7

One possible solution is to plot your image using IMSHOW, then print the entire figure as a .eps using 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

One drawback to this solution is that if the image is too big to fit on the screen, IMSHOW will shrink it to fit, which will reduce the on-screen resolution of the image. However, you can adjust the final resolution of the saved image using the -r<number> option for the PRINT function. For example, you can print your figure as an Encapsulated Level 2 Color PostScript with a resolution of 300 dpi by doing the following:

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

EDIT: If you are unable to use IMSHOW (either because you don't have the Image Processing Toolbox or because you are using a MATLAB mode that doesn't allow it), here is an alternative way to create and print the figure:

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

You can also take a look at this documentation to see how printing works without a display.

Zoology answered 19/3, 2010 at 16:4 Comment(9)
To avoid resolution change you probably can get matrix size and specify axis size in pixels.Ayurveda
@AB: That option is up to the OP, based on what type of .eps file they want/need.Zoology
Thanks! What's the difference between -depsc2 and -deps? Is the former smaller and less accurate? How is yuk's method like to keep the resolution?Brochette
@Tim: The extra c creates a color image, as opposed to black and white. The 2 creates a Level 2 eps which is a more recent format that usually creates smaller files than Level 1. The suggestion from yuk involves adjusting the axes and figure sizes yourself instead of letting IMSHOW do it. This may allow you to make figures larger than the screen, but my 1-monitor setup doesn't let me go larger than the screen size.Zoology
Nope, not working, sorry. Go with resolution as in the answer.Ayurveda
@gnovice: Thank you! I would like to work in terminal mode with figure('visible', 'off'), however imshow reports error. Can it work in terminal mode? See my update to original post.Brochette
@Tim: I updated my answer with a solution that doesn't require IMSHOW.Zoology
THanks! Will -r300 in print change the size of the image compared to the original one? Will -r0 work?Brochette
@Tim: -r0 should use whatever the screen resolution is. For more info and the default dpi values, you can check these 2 links: mathworks.com/access/helpdesk/help/techdoc/ref/…, mathworks.com/access/helpdesk/help/techdoc/creating_plots/…Zoology
D
0

It should work using imwrite. You would have to add a colormap for it to work though.

However, ckecking the help pages I see that it is NOT possible to use imwrite to write an EPS file.

Darsie answered 19/3, 2010 at 16:11 Comment(0)
I
0

Following code may help you to convert png file to 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
Impugn answered 5/5, 2017 at 12:20 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.