use*_*909 7 matlab plot roi real-time
我有一个带有两个轴的GUI.第一轴具有低分辨率图像.
我想要做的是使用IMRECT在第一个轴上选择一个区域,然后在第二个轴上将该区域显示为高分辨率图像,同时在我移动IMRECT矩形时不断更新.
我能够做到这一点的唯一方法是使用"for循环",其中有一个0.1暂停,只需运行一两分钟,而我选择并使用IMRECT更改ROI,非常繁琐.
我的想法是使用一个函数,只要鼠标在第一个轴内移动,该函数就会在该函数中使用ploting和getPosition命令.但是,我不确定如何编写这样的功能(触发轴内的鼠标移动).
任何帮助将不胜感激!
通常,您应该为您的回调分配一个回调imrect
.例如:
x = imrect();
x.addNewPositionCallback( @(x)(disp('The rect has changed')))
Run Code Online (Sandbox Code Playgroud)
回调应该通过利用匿名函数获得其他参数,例如图像和第二轴.
我写了一个小代码片段来做你想要的.你应该添加边界检查,因为我没有打扰.当你移动矩形时它会更新CData
而不是运行imshow
,所以它非常流畅.
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
Run Code Online (Sandbox Code Playgroud)