Matlab实时更新imagesc图像并带有滑动条

3
我有一个3D矩阵,我想以彩色地图的形式进行图形化查看。如果我的3D矩阵是(x,y,z)的形式,我希望颜色地图显示(y,z)的2D矩阵,并且我想要一个额外的滑块来调整(x)坐标。我用imagesc实现了这个功能。
在查看了一些示例后,这是我编写的代码。
ct = 1000;
sys = squeeze(T(ct,:,:)); 

f = figure;
h = imagesc(sys);

b = uicontrol('Parent',f,'Style','slider','Position',[81,54,419,23],...
          'value',ct, 'min',1, 'max',total_time);

b.Callback = @(es,ed) updateSystem(h,squeeze(T(es.Value,:,:)));

然而,在运行代码后,我收到了以下错误信息。
“下标索引必须是实数正整数或逻辑值。” “filament_simulation>@(es,ed) updateSystem(h,squeeze(T(es.Value,:,:)))中的错误” “在评估UIControl回调时发生错误。”
这可能是因为我对“updateSystem”不太了解所以出错了,但我感到惊讶的是错误是由于无效索引引起的,那么这个索引可能在哪里呢?
我真的很感激你的帮助。提前致谢。
1个回答

2

滑块可以具有非整数值。在将其用作索引之前,您需要对其进行四舍五入。

updateSystem(h, squeeze(T(round(es.Value), :, :)))

不要尝试使用updateSystem(一个控制系统工具箱函数),你可以使用以下内容作为回调来更新图像数据。

b.Callback = @(es, ed)set(h, 'CData', squeeze(T(round(es.Value), :, :)));

啊,我简直不敢相信我竟然忽略了那个。谢谢!但是,又出现了另一个问题,错误提示说“updateSystem”不能将“matlab.graphics.primitive.Image”作为输入。有没有其他方法可以让滑块与颜色映射一起工作? - Alex Kyriazis
@AlexKyriazis updateSystem 不是MATLAB的函数,那么这一定是你自己写的,对吗? - Suever
它被用作回调函数,这就是为什么它可能不可见的原因。编辑:这里是一个直接链接到该函数的链接 http://de.mathworks.com/help/control/ref/updatesystem.html - Alex Kyriazis
@AlexKyriazis 那个函数是用于控制系统工具箱而不是一般的MATLAB GUI操作。我可以添加一个更新图像的示例。 - Suever
如果您能够做到这一点,我将非常感激!谢谢! - Alex Kyriazis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接