Image 数学语言与数字

Image 数学语言与数字,image,matlab,variables,plot,screen-capture,Image,Matlab,Variables,Plot,Screen Capture,3个Matlab问题 1-是否有人知道是否存在与 #pragma GCC poison variable_name 在matlab中,也就是说,如果在代码中发现从这一点开始使用的变量_名称,会导致matlab出错 另外两个不太相关的问题,我还是不敢相信 2-是否有链接命令的方式,如 imagesc(I1_avg_crop, [bg_value multiplier2*std_value+bg_value]); 特别是一个数字,而不是做 set(0,'CurrentFigure',fig3);

3个Matlab问题

1-是否有人知道是否存在与

#pragma GCC poison variable_name
在matlab中,也就是说,如果在代码中发现从这一点开始使用的变量_名称,会导致matlab出错

另外两个不太相关的问题,我还是不敢相信

2-是否有链接命令的方式,如

imagesc(I1_avg_crop, [bg_value multiplier2*std_value+bg_value]);
特别是一个数字,而不是做

set(0,'CurrentFigure',fig3);
imagesc(I1_avg_crop, [bg_value multiplier2*std_value+bg_value]);
就在它之前

3-getframe()(或类似工具)是否可以在图形中实际获取内容,而不是“执行屏幕捕获”?因为在移动图形窗口时,它的工作不太好

(我正在编辑别人的代码,而且我是matlab新手,所以如果这些问题很愚蠢,我会提前道歉,只是我在文档中找不到我想要的东西)

编辑:额外问题 手册上说

set(0,'CurrentFigure',h);
使地物h成为当前地物,但不更改其相对于其他地物的可见性或堆叠。这是否仍然适用于Mac OS X,因为它似乎仍然将其置于顶端?

(1)不,不可能“本机”毒害变量。但是,您可以执行以下变通方法:定义这样的类:

classdef poison 
   properties (SetAccess=private)
      varName
   end
   methods
     function obj = poison(varName)
        obj.varName = varName;
     end
     function delete(obj)
        error('attempting to overwrite ''%s''',obj.varName)
     end
   end
end
然后,您可以调用
variable\u name=poison('variable\u name')
并获得相同的效果-如果
variable\u name
被覆盖,它会触发对象的delete方法并抛出错误,如果尝试索引或算术操作,则会出现一般错误

(2) 您可以在函数调用中明确设置图像的父对象(传递一个轴句柄,您可以通过
axHandle=axes('parent',图3);
)获得该句柄,这样可以避免调用图形。但是,您不能这样做,也不能设置彩色贴图缩放。因此,您必须使用

imshow(I1_avg_crop,[bg_value multiplier2*std_value+bg_value],'Parent',axHandle);
或者,如果您没有图像处理工具箱的访问权限,则需要使用
image

image(I1_avg_crop, 'CDataMapping','scaled','Parent',axHandle);
set(axHandle,'clim',[bg_value multiplier2*std_value+bg_value])
(3) 如果使用轴句柄调用
getframe
,它应该能够捕获轴的内容-除非将图形移动到第二个屏幕上,否则它将无法工作。顺便说一句:我注意到
getframe
在过去的OSX上有问题,例如与停靠的数字有关

(4) Matlab有时会出现OSX特定的问题,因为他们仍在调试一些非常基本的东西(OSX版本过去是在X-Windows中运行的Linux版本,过去几年他们一直在努力改变这一点)

第3点和第4点是因为我使用getframe来获取图像,这迫使窗口被带到前台,所以它可以做一个屏幕截图。我现在已经找到了一个解决方案,使用它远远优于getframe,因为它可以采用“图形或轴句柄h”


关闭它很重要,否则它不会保存图像。显然也没有遇到屏幕保护程序问题。

非常感谢,这太棒了^ ^ ^以防万一其他人看到这个“私人”时,应该有一个小写的“p”小树枝:你应该向MathWorks报告问题4-他们不会修复他们从未听说过的bug。因为(3)我正在使用AxeHandle,但当我看到保存的电影时,在移动窗口的帧中,它显示窗口的一些部分,以及下面的部分。@Twig:噢,很抱歉。这是作为父级必须传递的轴句柄。我正在更新答案。最好对图形使用“Resize”(调整大小)和“off”(关闭)选项,否则如果调整窗口大小,它将出错。
fig4 = figure('Position',[450 300 400 round(400*aspect_ratio)],'Name','fig4'); % figure 4
aviobj = avifile(movie_name,'compression','None');
    for i = 1:N
        aviobj = addframe(aviobj,fig4);
    end
aviobj = close(aviobj);