测试线程Why this imagesc-imshow with Colormap not Working in Matlab?的代码,该代码返回两个字段cdata
和colormap
的结构,其中cdata
是图形的RGB表示
hFig=figure;
imagesc(time, potential, matrix); % choose any data
%% Test Code Starts
fr = getframe(hFig);
rgbImage = fr.cdata;
figure
imshow(rgbImage)
colormap parula
%% Test Code ends
saveas(hFig, '/home/masi/image.eps', 'eps');
输出
saveas
成功saveas
失败并显示空白输出并且您在屏幕上成功输出数字磁盘上的预期输出:saveas
,并在屏幕上显示对象的引用。我不明白引用imagesc
对象引起的中断。
export_fig
Suever的提议。我成功地关注了here
filenamePng=fullfile('/home/masi/image.png');
export_fig(filenamePng, '-png', hFig); % works with right resolution
export_fig(filenamePng, '-png', '-q101', hFig ); % works
export_fig(filenamePng, '-png', '-native', hFig); % works but reduced resolution i.e. your screen resolution of 72 dpi here
export_fig(filenamePng, '-png', '-q101', '-native', hFig); % works but reduced resolution
filename=fullfile('/home/masi/image');
% '-depsc' uses eps-3 so avoiding Matlab's buggy eps-2
% '-nocrop' for no cropping of the data
% '-a1' no anti-aliasing because we do not need it
export_fig(filename, '-png', '-eps', '-depsc', '-nocrop', '-q101', '-a1', hFig); % works
% results in 0.6 MB image
% '-opengl' results in 12 MB image and aliasing so incomplete vectorisation in Matlab
export_fig(filename, '-png', '-eps', '-depsc', '-nocrop', '-opengl', ...
'-q101', hFig); % works
% have -a1, much alias, 12 MB
% have -a4, much alias, 34 MB and warning `Warning: print2array generating a 33.2M pixel image. This could be slow and might also cause memory problems.`
所以不要在Matlab中使用-opengl
。另外,想想你是否可以在Matlab中可靠地使用.eps。 [Suever,Masi]
-opengl
,渲染是否与-depsc
正确对齐?文件的大小明显较小,没有明显的别名。 TODO测试自己。门票here。系统:Linux Ubuntu 16.04 64位
硬件:Macbook Air 2013-mid
Linux内核:4.6
Linux内核选项:wl
Matlab:2016a
答案 0 :(得分:1)
我怀疑将图像保存为计算机上的EPS是一个问题。 MATLAB因创建错误的EPS文件而臭名昭着,如果您真的想使用EPS文件,我建议使用export_fig
from the MATLAB File Exchange。
此外,如果您要导出到EPS,建议不使用opengl渲染器,因为这通常会导致非常大的EPS文件未正确“矢量化”
话虽如此,在这种情况下使用EPS并没有太大的收获。
由于您基本上截取了图像的屏幕截图,然后使用imshow
显示此屏幕截图,因此您的初始图像已经失去了很多质量。相反,对于栅格数据,您可以使用无损图像格式(如PNG)来保存数据,这样可以使MATLAB在生成PNG文件时更加可靠。
同样值得使用imwrite
而不是imshow
+ saveas
来保存图片。
imwrite(fr.cdata, 'output.png')