在 Matlab figure 控件中创建随鼠标运动的图形

    如果需要对载入图像的感兴趣区域(ROI)进行处理,而这些区域的尺寸大小(单位:pixel)是类似的,为了简便起见,希望通过设置以鼠标当前位置为中心并能随着鼠标移动的矩形框来框选ROI区域。这里介绍一种在载入图像后的figure中实现绘制随鼠标运动的图形的方法。

    为了实现这种交互需求,需要通过鼠标事件触发响应函数。较常见的几种鼠标响应事件如 WindowButtonDownFcn,WindowButtonMotionFcn 等。这里考虑使用ButtonMotionFcn,而WindowButtonDownFcn 用于在框选ROI后触发后续处理函数的行为。

himg = figure;  %存储图形句柄
imshow(imread('pictureName'));
set(himg,'WindowButtonMotionFcn',{@get_roi_scope,Range_r});
% Range_r代表矩形每条边到鼠标当前位置的距离,unit:像素

function  get_roi_scope(src,event,Range_r)
    global h_rectangle                   %全局变量,用于保存绘制图形句柄
    pt = get(gca,'CurrentPoint');        %获取鼠标当前位置
    pix_x = pt(1,1);                     %水平方向
    pix_y = pt(1,2);                     %垂直方向
    xlimits = get(gca,'XLim');           %获取当前坐标轴中x,y方向的最大值最小值
    ylimits = get(gca,'YLim');
    if pix_x>(xlimits(1)+Range_r) && pix_x<(xlimits(2)-Range_r)&&...
    pix_y>(ylimits(1)+Range_r) && pix_y<(ylimits(2)-Range_r)    %如果在图像边缘时不绘制
        if ~isempty(h_rectangle)                                %判断是否已经绘制了图形
            delete(h_rectangle);                                %已经绘制了就删除该图形句柄
        end    
        scope_x = [pix_x-Range_r,pix_x+Range_r,pix_x+Range_r,pix_x-Range_r,pix_x-Range_r];
        scope_y = [pix_y-Range_r,pix_y-Range_r,pix_y+Range_r,pix_y+Range_r,pix_y-Range_r];
        hold on;
        h_rectangle = plot(scope_x,scope_y,'w');                %在新的位置绘制图形
        hold off;        
    end
end

    当鼠标在选定的坐标对象中移动时,触发绘图函数,此函数判断在移动前是否已绘制了图形,若图形句柄存在,需要将前一次的绘制结果删除,并在新的位置进行图形绘制工作。这里如果将矩形框替换成其他任意曲线,也可以实现任意曲线的鼠标跟随操作。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值