为什么这个图像 - 使用Colormap显示不能在Matlab中工作?

时间:2016-03-11 17:37:40

标签: image matlab matlab-figure

我正在考虑和扩展answer中关于的滑块,以便在Matlab的滑块中同时显示/连接两个图像,并能够通过在Matlab中使用.mat数据来更改色彩映射2016a。 因此,我必须使用imagesc,因为您可以更改色彩映射。 我想从包含变量timepotentialmatrix的.mat数据制作图像,以便我可以更改colormap / etc

带有1张图片的代码c-imshow

for k=1:2
   % loaded variables from .mat data
   img=imagesc(time, potential, matrix); 
   colormap('jet')
   signal=cat(2,signal,img);
end

windowWidth = 320;
hImg = imshow(signal(:,1:1 + windowWidth,:), ... % TODO complication here?
    'InitialMagnification', 100, 'Border', 'tight');

% End of the video code here https://stackoverflow.com/a/35924614/54964
% Not necessary for the case here!

最后,我想用imshow进行放大。 输出

Index exceeds matrix dimensions.

Error in masi (line 7)
hImg = imshow(signal(:,1:1 + windowWidth,:), ...

代码2与imagesc-write-imshow

我无法找到一种方法来进行imagesc-imshow,而无需以.png和.png图像结果写入光盘。 因此,这里只有saveasimread

for k=1:2
   % loaded variables from .mat data
   imagesc(time, potential, matrix); 
   colormap('jet');

   saveas(gcf,'/tmp/Figure','png');
   imgRGB=imread(fullfile('/tmp/','Figure.png'));

   signal=cat(2,signal,imgRGB);
end

windowWidth = 320;
hImg = imshow(signal(:,1:1 + windowWidth,:), ... 
    'InitialMagnification', 100, 'Border', 'tight');

通过写入和读取提供正确的输出。

使用print -RGBImage -rNUMBER,Suever

试验总分辨率

我正在试验Suever的总分辨率答案。我发现默认图像结果有噪音,您可以在滑块视频中轻松看到。 我认为最好的分辨率是-r95。我知道信号具有95%灵敏度的指示器,所以我直接选择它。测量中存在大约5-15%的不确定性,因此-r85也可能是好的,但我现在还不能很好地评估它。 对于我的系统中的分辨率,低边界是r55而没有生成图像(OS X 13“Macbook Air)。 一些分辨率值和我的经验

GUI中的> r124错误,表示某些上限

Struct contents reference from a non-struct array object.

Error in matlab.graphics.internal.getframeWithDecorations (line 49)
x = bi.getWidth();

Error in alternateGetframe

Error in getframe (line 84)
  x = alternateGetframe(parentFig, h, offsetRect, withinClientRect);

Error in masi (line 114)
    writeVideo(vid, getframe());

当输入信号的不确定度为5-15%时,能够估计r85,r90和r95之间的分辨率质量将是非常好的,这样我就不会从原始的1D信号中分阶段丢失它。

查看每英寸和鬼魂的单位,Suever

我得到了奇怪的结果,发现[0 0 15 15]是具有大输出图像,小鬼影和无边界伪影的最佳选择。 我尝试了一些数学因素,如sqrt(2)和pi失败。 每英寸的默认点与前者相同,但图像大约小两倍。

如何使用imagesc放大显示imshow的结果?

1 个答案:

答案 0 :(得分:1)

基本的想法似乎是你要创建一个RGB图像,它是使用imagesc 而不是实际将其首先保存到磁盘的屏幕上显示的版本。有几个完成此任务。

<强>的getFrame

可以使用getframe抓取当前轴的简单屏幕截图。这将返回一个包含两个字段的结构:cdata and colormapcdata字段是您指定的数字的RGB表示形式(如果您未指定,则为gcf。)

fr = getframe(hfig);
rgbImage = fr.cdata;

这种方法的缺点是getframe输出的分辨率只是图的大小(以像素为单位)。如果您在小屏幕上显示非常大的图像,您显然会在生成的图像中丢失很多细节。

打印

内置print功能通常用于将信息发送到打印机或图像文件;但是您可以将输出设备指定为-RGBImage,这将返回RGB版本作为输出。

rgbImage = print(hfig, '-RGBImage');

使用print的真正好处是您可以control the resolution输出图像以及许多其他因素。

biggerRGB = print(hfig, '-RGBImage', '-r300');  % 300 dpi

如果在创建图形时,您确定要指定尺寸(以英寸为单位),则无论您当时使用的是什么机器,此操作的结果都将是相同的大小。

hfig = figure('Units', 'inches', 'Position', [0 0 10 10]);

结合上面的-r300,结果总是为3000x3000像素。