gpt4 book ai didi

Matlab:使用 IMRECT 选择的 ROI 的实时绘图

转载 作者:太空宇宙 更新时间:2023-11-03 19:28:52 25 4
gpt4 key购买 nike

我有一个带有两个轴的 GUI。第一个轴具有低分辨率图像。

我想做的是使用 IMRECT 在第一个轴上选择一个区域,然后在第二个轴上将该区域显示为高分辨率图像,同时在我移动 IMRECT 矩形时不断更新。

我能够做到这一点的唯一方法是使用一个带有 0.1 停顿的“for 循环”,它只运行一两分钟,同时我使用 IMRECT 选择和更改 ROI,非常麻烦。

我的想法是使用一个函数,只要鼠标在第一个轴内移动就会运行,并在该函数中使用 plotting 和 getPosition 命令。但是,我不确定如何编写这样的函数(触发轴内的鼠标移动)。

如有任何帮助,我们将不胜感激!

最佳答案

一般来说,您应该为您的imrect 分配一个回调。例如:

x = imrect();
x.addNewPositionCallback( @(x)(disp('The rect has changed')))

回调应该使用匿名函数获取额外的参数,例如图像和第二个轴。


我写了一个小代码片段来做你想要的。你应该添加边界检查,因为我没有打扰。当您移动矩形时,它会更新 CData 而不是运行 imshow,因此非常流畅。

GUI

function Zoomer
figure();

highResImage = imread('peppers.png');
lowResImage = imresize(highResImage,0.5);

a1 = subplot(2,1,1);
a2 = subplot(2,1,2);

imshow(lowResImage,'Parent',a1);
initialPosition = [10 10 100 100];
lowResRect = imrect(a1,initialPosition);

lowResRect.addNewPositionCallback( @(pos)Callback(pos,a2,highResImage));

Callback( initialPosition , a2, highResImage);
end

function Callback(position,axesHandle, highResImage)
position = position * 2;
x1 = position(1);
y1 = position(2);
x2 = position(1) + position(3);
y2 = position(2) + position(4);

highResThumbnail = highResImage( round(y1:y2),round(x1:x2),:);

if isempty( get(axesHandle,'Children'))
imshow(highResThumbnail,'Parent',axesHandle);
else
imHandle = get(axesHandle,'Children');
oldSize = size(get(imHandle,'CData'));
if ~isequal(oldSize, size(highResThumbnail))
imshow(highResThumbnail,'Parent',axesHandle);
else
set( imHandle,'CData', highResThumbnail);
end
end
end

关于Matlab:使用 IMRECT 选择的 ROI 的实时绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12408601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com