Matlab imshow在旧位置和放大率下更新图像

Matlab imshow在旧位置和放大率下更新图像,matlab,matlab-figure,Matlab,Matlab Figure,我目前使用Matlab的imshow在扩散滤波过程的每次迭代中输出一幅图像,即每秒多次。 有时在过滤过程中,我希望更仔细地查看特定的图像部分。 但是,当使用imshow的('Parent',handle)名称-值对时,放大率和位置会重置 是否有方法更新基础图像,但放大率和位置保持不变?您可以将当前轴中的cdata更新为新的数据矩阵,以保持所有其他设置不变。如果这是一个循环,您可能需要调用drawnow。例如: x=randn(100); figure;imagesc(x); 现在缩放/平移/执

我目前使用Matlab的imshow在扩散滤波过程的每次迭代中输出一幅图像,即每秒多次。 有时在过滤过程中,我希望更仔细地查看特定的图像部分。 但是,当使用imshow的('Parent',handle)名称-值对时,放大率和位置会重置


是否有方法更新基础图像,但放大率和位置保持不变?

您可以将当前轴中的
cdata
更新为新的数据矩阵,以保持所有其他设置不变。如果这是一个循环,您可能需要调用
drawnow
。例如:

x=randn(100);
figure;imagesc(x);
现在缩放/平移/执行您想要的任何操作

f=gca;
x=randn(100);
f.Children.CData = x;
Matlab推荐使用这种更新子数据的方法,因为这种方法比销毁axis子对象
图像
并重新创建每个帧(不记得源代码,它在一个帮助文件中)更有效

编辑:请记住,这种语法在旧版本的matlab(2015年之前)上不起作用。在这种情况下,请使用get/set语法:

set(get(gca,'Children'),'CData',x);

非常感谢你!我只是没有注意到之前手柄的结构。@Kapt.Brackbier:一开始可能会让人困惑。但对我帮助最大的不是仅仅阅读文档,而是始终对不同类型的句柄(轴句柄、图形句柄)使用
get
,并深入挖掘结构-您将了解很多可用属性,其中一些可能您甚至没有想到。例如:
f=图;图(…);get(f)
图形;图(…);hAx=gca;get(hAx)只需查看并了解:-)