regions of interest on 3D dataset
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
All,
I've got some 3D medical data (128x128x128) in a GUI. I'd like to be able to manually draw ROIs on about 25 of the images and use these for segmentation purposes. Firstly, is there a way I could draw the ROIs for each image sequentially, and secondly after all 25 ROIs have been manually drawn, go back and adjust any ROI vertex if necessary?
My current attempt involved using a togglebutton to store the positions of the ROIs while stepping through the dataset while the togglebutton is switched "on" (I used a while loop as I may want ROIs on 23 images, or 28 images, may not always exactly 25) but is failing miserably. This is my callback:
function segmentation_togglebutton_Callback(hObject, eventdata, handles)
flag = get(hObject,'Value'); %this =1 when toggle button is "on"
i = handles.current_im;
last = handles.total_im;
images=handles.images;
while flag==1
imshow(images(:,:,i),[], 'InitialMagnification', 'fit')
h=impoly;
position = wait(h);
contours{i}=position;
i = i+1
if flag==0 %i.e. toggle button is switched "off"
break
end
end
Thanks Jim
0 comentarios
Respuesta aceptada
Sean de Wolski
el 30 de Oct. de 2012
Editada: Sean de Wolski
el 30 de Oct. de 2012
The problem is that the Toggle Button Callback does not stop the execution of the loop because the flag is never checked.
What you want to do is have the togglebutton callback throw away 'off' calls and 'enable' 'on' calls but have enabled check on each iteration if it's still on. The English on this isn't very clear I know! so here is the pseudocode
function tglbutton_callback(blha,blah)
if 'off'
return
end
while get(hObject,'value')
%check on each loop iteration if it's on
do_stuff
end
More
Consider this example function:
function example_togglin
hF = figure;
hTb = uitoolbar(hF);
hTg = uitoggletool('oncallback',@cb,'parent',hTb,'cdata',repmat(magic(16)./16^2,[1 1 3]));
function cb(src,evt)
cnt = 0;
while strcmp(get(src,'State'),'on') && cnt<20
cnt = cnt+1;
disp(['I''m on!!! Iteration: ' num2str(cnt)])
pause(0.25);
end
Save this as example_togglin.m and run it.
5 comentarios
Jim O'Doherty
el 31 de Oct. de 2012
Editada: Jim O'Doherty
el 31 de Oct. de 2012
Sean de Wolski
el 31 de Oct. de 2012
I supposed you could have the 'offcallback', explicitly grab the handle to the IMPOLY object, which you would need to store, and delete it or do whatever with it.
Más respuestas (0)
Ver también
Categorías
Más información sobre DICOM Format en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!