将图形保存到具有特定分辨率的文件

Save a figure to file with specific resolution

在我的旧版本代码中,我曾经使用给定的分辨率执行 hardcopy(),即:

frame = hardcopy(figHandle, ['-d' renderer], ['-r' num2str(round(pixelsperinch))]);

作为参考,hardcopy 将图 window 保存到文件。

然后我通常会执行:

ZZ = rgb2gray(frame) < 255/2;
se = strel('disk',diskSize);
ZZ2 = imdilate(ZZ,se); %perform dilation.
Surface = bwarea(ZZ2); %get estimated surface (in pixels)

这一直有效,直到我切换到 Matlab 2017,其中不推荐使用 hardcopy() 函数,我们只剩下 print() 函数。

我无法使用 print 在特定分辨率下从图形处理程序中提取数据。我尝试了很多东西,包括:

frame = print(figHandle, '-opengl', strcat('-r',num2str(round(pixelsperinch))));

但是没用。我该如何克服这个问题?

编辑

我不想'save'也不想创建图形文件,我的目的是从图形中提取数据,以便在膨胀过程后测量曲面。我只是想保留这些信息,因为我正在处理很多不同的轨迹(总共大约 1e7 个轨迹),我不想将每个文件保存到磁盘(这很昂贵,执行时间)。我 运行 这段代码在远程服务器上(没有显卡)。

我遇到的问题是:"One or more output arguments not assigned during call to "varargout"."

getframe() 不允许设置特定分辨率(据我所知它使用当前分辨率)

EDIT2 好的,知道怎么做了,你需要像这样传递'-RGBImage'参数:

frame = print(figHandle, ['-' renderer], ['-r' num2str(round(pixelsperinch))], '-RGBImage');

它还接受文档中指定的自定义分辨率和渲染器。

我认为您也必须指定格式类型(在我的例子中是 -dtiff)。我在 Matlab 2016b 中试过这个没有问题:

print(figHandle,'-dtiff', '-opengl', '-r600', 'nameofmyfig'); 

编辑: 如果您需要 CData,只需找到相应轴的句柄并获取其 CData

f = findobj('Tag','mytag')

然后根据您的 matlab 版本使用:

mycdata = get(f,'CData');

或直接

mycdta = f.CData;

编辑 2:

您可以通过编程方式设置图像的标签,然后执行我之前所说的操作:

a = imshow('peppers.png');
set(a,'Tag','mytag');