Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 以特定分辨率将地物保存到文件_Image_Matlab_Matlab Figure_Resolution - Fatal编程技术网

Image 以特定分辨率将地物保存到文件

Image 以特定分辨率将地物保存到文件,image,matlab,matlab-figure,resolution,Image,Matlab,Matlab Figure,Resolution,在我的旧版本代码中,我曾经使用给定的分辨率进行硬拷贝(),即: frame = hardcopy(figHandle, ['-d' renderer], ['-r' num2str(round(pixelsperinch))]); 作为参考,硬拷贝将地物窗口保存到文件中 然后我通常会表演: ZZ = rgb2gray(frame) < 255/2; se = strel('disk',diskSize); ZZ2 = imdilate(ZZ,se); %perform dilation.

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

frame = hardcopy(figHandle, ['-d' renderer], ['-r' num2str(round(pixelsperinch))]);
作为参考,
硬拷贝
将地物窗口保存到文件中

然后我通常会表演:

ZZ = rgb2gray(frame) < 255/2;
se = strel('disk',diskSize);
ZZ2 = imdilate(ZZ,se); %perform dilation.
Surface = bwarea(ZZ2); %get estimated surface (in pixels)
但它不起作用。我怎样才能克服这个问题

编辑

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

我正在努力解决的问题是:
“调用“varargout”期间未分配一个或多个输出参数”。

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

EDIT2 好的,想好了怎么做,你需要像这样传递“-RGBImage”参数:

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

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

我认为您也必须指定formattype(-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');

看一看这个出色的功能!你以前使用过什么版本的MATLAB?截至2015b,
硬拷贝
文档包含警告“不要直接使用此功能,改用打印”-这些警告的存在是有原因的。。。使用
-r0
标志应使用当前分辨率。@Zep我不想创建地物文件,但要从地物恢复数据,并使用它估计曲面。将编辑我的问题以反映这一点。@Wolfie我使用Matlab 2011b有一段时间了。我不想使用当前的分辨率,因为我在没有图形卡的服务器上运行此操作,出于比较目的,我需要一个固定的分辨率。谢谢您的输入,但它对我不起作用。我想收集figHandle的数据以估计曲面,将编辑我的问题。您能指定要从figHandle提取的“数据”是什么吗?您是指图像的“CData”吗?是的,CData应该足够了,因为rgb2gray()在参数中采用3D数组。我想硬拷贝()也返回了cdata,但很难说,因为我不能再使用它了。谢谢您的输入。但是,关于您的编辑和使用findobj(),我如何才能以定义的分辨率从图中获取CData?Print()调用将文件转储到磁盘上,然后我需要调用imshow()设置标记并获取cdata。这比以前的hardcopy()方法要复杂得多(从执行的角度讲,也很耗时)。硬拷贝()可以动态执行此操作。当调用imshow()时,变量“a”包含图像的cdata结构。但是从磁盘上读写还是太慢了。。。。
a = imshow('peppers.png');
set(a,'Tag','mytag');