2016-06-07 4 views
0

Мне нужно сделать несколько ROI, используя функцию imfreehand в MATLAB R2015a. Мне нужно нарисовать изображение, и пользователь должен выбрать столько ROI, сколько захочет, и когда они будут сделаны, они должны нажать (правая кнопка мыши), чтобы закончить выбор. Кроме того, пользователь должен иметь возможность выбрать желаемый ROI и удалить его.Как сделать несколько ROI с помощью imfreehand?

Может кто-нибудь здесь, пожалуйста, дайте мне примеры или любое представление о том, как я могу это реализовать?

Спасибо заранее,

+0

Можете ли вы ударить бегством, а не щелкнуть правой кнопкой мыши, чтобы закончить его? – Suever

ответ

1

Вы можете сделать это, установив ButtonDownFcn обратного вызова для осей. Всякий раз, когда пользователь нажимает левую кнопку мыши, вы позволяете им начинать рисовать новый ROI. Когда они нажимают правую кнопку мыши, она останавливается и возвращает список объектов imfreehand. Когда вы щелкните правой кнопкой мыши по ROI, появится контекстное меню, которое позволит им удалить данный ROI.

function handles = multiROI() 

    hax = axes('ButtonDownFcn', @(src,evnt)buttondown(evnt)) 

    handles = []; 

    % Keep this function open until we right click 
    waitfor(gca, 'UserData') 

    function buttondown(evnt) 
     switch evnt.Button 
      case 1  
       % On a left click draw a new ROI 
       handles = cat(1, handles, imfreehand()); 
      case 3 
       % On a right click, remove empty ROIs and return 
       handles = handles(isvalid(handles)); 
       set(gca, 'UserData', 'done') 
     end 
    end 
end 

Update

Вот версия, которая не требует столько кликов, но использует ключ выхода, чтобы закончить рисунок.

handles = imfreehand(); 
lastroi = handles; 

while ~isempty(lastroi) 
    lastroi = imfreehand(); 
    handles = cat(1, handles, lastroi); 
end 

handles = handles(isvalid(handles)); 
+0

Спасибо! Но я попробовал ваш код, но кажется, что он работает неправильно. Когда я нажимаю на изображение, я нажимаю на него и нажимаю несколько кликов, пока не смогу нарисовать что-то ... – Gabs

+0

@Gabs Да, вы должны нажать, чтобы активировать 'imfreehand', а затем снова нажать и удерживать для рисования. – Suever

+0

Есть ли способ избежать так много кликов? Я имею в виду, когда я рисую рентабельность инвестиций, графический интерфейс готов нарисовать еще один, не требуя щелчка и щелчка и удерживания? – Gabs