MATLAB - 将图像写入eps文件

7

在MATLAB中,如何将矩阵写入EPS格式的图像?

看起来imwrite不支持EPS。

在我使用的Linux服务器上,转换无法正常工作:

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

为什么?


我在终端模式下尝试了gnovice的想法:

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

然而我得到了以下错误:

??? 使用 ==> imshow 时出错,位于191行
IMSHOW需要Java运行。

错误在 ==> study_weaker 中的122行
imshow(img,'border','tight',... %# 在一个图形窗口中显示,不带边框

191 error(eid,'%s需要Java运行.',upper(mfilename));

我该如何修复它?


尝试使用SciPy做同样的事情?先保存到文本,然后使用Asymptote或转换Unix命令? - Hamish Grubijan
谢谢!转换功能不太好用。 - Tim
请注意,您也可以使用Java在“终端”模式下运行MATLAB。只需使用“-nodesktop”标志启动MATLAB,而不是“-nojava”标志。 - Matthew Simoneau
3个回答

7

一种可能的解决方案是使用IMSHOW绘制图像,然后使用PRINT将整个图形打印为.eps文件:

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

这种解决方案的一个缺点是,如果图像太大而无法适应屏幕,IMSHOW 将缩小它以适应屏幕大小,这将降低图像在屏幕上的分辨率。但是,您可以使用 PRINT 函数的 -r<number> 选项来调整保存图像的最终分辨率。例如,您可以执行以下操作将您的图形打印为分辨率为300 dpi 的封装级别2彩色 PostScript:
print('new_image.eps','-depsc2','-r300');

编辑:如果您无法使用IMSHOW(可能是因为您没有安装图像处理工具箱,或者您正在使用不允许使用它的 MATLAB 模式),这里有一种替代方法来创建和打印该图:

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

您还可以查看此文档,了解如何在没有显示器的情况下进行打印。


1
为避免分辨率变化,您可以获取矩阵大小并指定轴大小(以像素为单位)。 - yuk
@AB:这个选项取决于OP,根据他们想要/需要的.eps文件类型。 - gnovice
@Tim:额外的 c 创建了一个彩色图像,而不是黑白图像。2 创建了一个 Level 2 eps,这是一种比 Level 1 更近期的格式,通常会创建比 Level 1 更小的文件。yuk 的建议涉及自己调整轴和图形大小,而不是让 IMSHOW 自动完成。这 可能 允许您制作大于屏幕的图形,但我的单显示器设置不允许我超过屏幕大小。 - gnovice
@gnovice:谢谢!我想用figure('visible','off')在终端模式下工作,但是imshow报错。这能在终端模式下工作吗?请看我对原帖的更新。 - Tim
@Tim:-r0 应该使用屏幕分辨率。有关更多信息和默认dpi值,您可以查看这两个链接:http://www.mathworks.com/access/helpdesk/help/techdoc/ref/print.html#brneyqn,http://www.mathworks.com/access/helpdesk/help/techdoc/creating_plots/f3-84337.html#f3-99727。 - gnovice
显示剩余4条评论

0

使用imwrite应该可以工作。但是,你需要添加一个颜色映射才能使其正常工作。

然而,查看帮助页面后我发现不可能使用imwrite来写入EPS文件。


0

以下代码可能会帮助您将png文件转换为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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接