Bonjour,

Je souhaiterai dans un GUI afficher une image ainsi qu'un polygone (ROI) que l'utilisateur pourrait modifier point par point et en utilisant les flèches du clavier pour déplacer l'ensemble de la zone.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
 
function pushbutton34_Callback(hObject, eventdata, handles)
Image=getappdata(gcbf,'Image')
Position=cell2mat(handles.GestMasque.Coord(get(handles.listbox2,'value')));
fig = figure;
b = uicontrol('Position',[100 5 50 40],'String','OK',...
              'Callback','uiresume(gcbf)');
set(fig, 'KeyPressFcn', @(fig, evnt)keypress(b, evnt))                            
imagesc(Image);
axis image
caxis([getappdata(gcbf,'Seuilmin') getappdata(gcbf,'Seuilmax')])
h = drawpolygon('Position',Position);
setappdata(gcf,'pos',Position);
setappdata(gcf,'img',Image);
setappdata(gcf,'Smin',getappdata(gcbf,'Seuilmin'));
setappdata(gcf,'Smax',getappdata(gcbf,'Seuilmax'));
guidata(hObject, handles);
 
uiwait(gcf);
 
 
 
PosFinale=round(getappdata(gcf,'pos'));
delete(b)
delete(fig);
 
 
function keypress(b, evnt)
 
    cla(b)
    userdata = getappdata(gcf,'pos');
 Image=getappdata(gcf,'img');
switch lower(evnt.Key)
        case 'rightarrow'
            userdata(:,1)=userdata(:,1)+1;
        case 'leftarrow'
            userdata(:,1)=userdata(:,1)-1;
        case 'uparrow'
        userdata(:,2)=userdata(:,2)-1;
        case 'downarrow'
        userdata(:,2)=userdata(:,2)+1;
    otherwise  
end
 
imagesc(Image);
axis image
caxis([getappdata(gcf,'Smin') getappdata(gcf,'Smax')])
h=drawpolygon('Position',userdata);

Ce code permet à l'utilisateur de bouger la zone avec les flèches du clavier et de mémoriser le résultat (Posfinale) mais je ne sais pas comment mémoriser aussi les changement éventuels qu'il pourrait faire sur un ou plusieurs points du polygone.

Auriez vous une solution ?

Merci d'avance