Re: Masking using user defined ROIs [message #32681] |
Thu, 31 October 2002 09:35 |
David Fanning
Messages: 11724 Registered: August 2001
|
Senior Member |
|
|
John Dickson (j.dickson@rfc.ucl.ac.uk) writes:
> Thanks David, your code worked beautifully. Just to help me understand
> the code a bit better, how would I change the code to mask everything
> outside the roi to zero.
Here is the same code, with a REVERSEMASK keyword.
Set this keyword to return an image where everything
outside the ROIs is masked out.
IDL> TV, ExampleROIMask(/ReverseMask)
Cheers,
David
--
David W. Fanning, Ph.D.
Fanning Software Consulting, Inc.
Phone: 970-221-0438, E-mail: david@dfanning.com
Coyote's Guide to IDL Programming: http://www.dfanning.com/
Toll-Free IDL Book Orders: 1-888-461-0155
;*********************************************************** ******
FUNCTION ExampleROIMask, image, ReverseMask=reversemask
IF N_Elements(image) EQ 0 THEN BEGIN
; Get an image, if needed.
filename = Filepath(Subdir=['examples','data'], 'mr_knee.dcm')
image = Read_DICOM(filename)
ENDIF
; Draw ROI's on image. (Use the freehand PENCIL tool, for example.)
XROI, image, Regions_Out=rois, /Block
; Create an image mask from the ROIs you just created.
dim = Size(image, /Dimensions)
IF Keyword_Set(reversemask) THEN $
mask = BytArr(dim[0], dim[1]) ELSE $
mask = BytArr(dim[0], dim[1]) + 1B
; Cycle through the ROIs.
FOR j=0, N_Elements(rois)-1 DO BEGIN
thisROI = rois[j]
IF Obj_Valid(thisROI) THEN BEGIN
thisROI -> GetProperty, Data=polygon
indices = PolyFillV(polygon[0,*], polygon[1,*], dim[0], dim[1])
IF indices[0] NE -1 THEN BEGIN
IF Keyword_Set(reversemask) THEN $
mask[indices] = 1 ELSE $
mask[indices] = 0
ENDIF
Obj_Destroy, thisROI
ENDIF
ENDFOR
; Apply the mask to the image and return it.
RETURN, image * mask
END
;*********************************************************** ******
|
|
|
Re: Masking using user defined ROIs [message #32682 is a reply to message #32681] |
Thu, 31 October 2002 08:22  |
j.dickson
Messages: 2 Registered: October 2002
|
Junior Member |
|
|
Thanks David, your code worked beautifully. Just to help me understand
the code a bit better, how would I change the code to mask everything
outside the roi to zero.
Regards
John Dickson
David Fanning <david@dfanning.com> wrote in message news:<MPG.18285cdf16be84119899f0@news.frii.com>...
> John Dickson (j.dickson@rfc.ucl.ac.uk) writes:
>
>> I have a 2D medical image which has several cold lesions. I want to
>> draw around each of these cold lesions and mask everything inside the
>> ROIs to be zero.
>>
>> As a self-taught IDL bod with limited experience, any example code
>> which will help me achieve my aim would be greatly appreciated.
>
> There are any number of ways to do this. Here is
> one way, using XROI to create your ROIs. You can
> draw your ROIs in several ways with this tool (for
> example, select the pencil tool for drawing freehand
> ROIs). When you are finished drawing, click the Quit
> button. The image mask will be calculated, and the
> masked image will be returned to you.
>
> IDL> TV, ExampleROIMask(image)
>
> Cheers,
>
> David
>
> --
> David W. Fanning, Ph.D.
> Fanning Software Consulting, Inc.
> Phone: 970-221-0438, E-mail: david@dfanning.com
> Coyote's Guide to IDL Programming: http://www.dfanning.com/
> Toll-Free IDL Book Orders: 1-888-461-0155
>
> ;*********************************************************** *******
> FUNCTION ExampleROIMask, image
>
>
> IF N_Elements(image) EQ 0 THEN BEGIN
>
> ; Get an image, if needed.
>
> filename = Filepath(Subdir=['examples','data'], 'mr_knee.dcm')
> image = Read_DICOM(filename)
> ENDIF
>
> ; Draw ROI's on image. (Use the freehand PENCIL tool, for example.)
>
> XROI, image, Regions_Out=rois, /Block
>
> ; Create an image mask from the ROIs you just created.
>
> dim = Size(image, /Dimensions)
> mask = BytArr(dim[0], dim[1]) + 1B
>
> ; Cycle through the ROIs.
>
> FOR j=0, N_Elements(rois)-1 DO BEGIN
> thisROI = rois[j]
> IF Obj_Valid(thisROI) THEN BEGIN
> thisROI -> GetProperty, Data=polygon
> indices = PolyFillV(polygon[0,*], polygon[1,*], dim[0], dim[1])
> IF indices[0] NE -1 THEN mask[indices] = 0
> Obj_Destroy, thisROI
> ENDIF
> ENDFOR
>
> ; Apply the mask to the image and return it.
>
> RETURN, image * mask
> END
> ;*********************************************************** *******
|
|
|
Re: Masking using user defined ROIs [message #32704 is a reply to message #32682] |
Tue, 29 October 2002 07:53  |
David Fanning
Messages: 11724 Registered: August 2001
|
Senior Member |
|
|
John Dickson (j.dickson@rfc.ucl.ac.uk) writes:
> I have a 2D medical image which has several cold lesions. I want to
> draw around each of these cold lesions and mask everything inside the
> ROIs to be zero.
>
> As a self-taught IDL bod with limited experience, any example code
> which will help me achieve my aim would be greatly appreciated.
There are any number of ways to do this. Here is
one way, using XROI to create your ROIs. You can
draw your ROIs in several ways with this tool (for
example, select the pencil tool for drawing freehand
ROIs). When you are finished drawing, click the Quit
button. The image mask will be calculated, and the
masked image will be returned to you.
IDL> TV, ExampleROIMask(image)
Cheers,
David
--
David W. Fanning, Ph.D.
Fanning Software Consulting, Inc.
Phone: 970-221-0438, E-mail: david@dfanning.com
Coyote's Guide to IDL Programming: http://www.dfanning.com/
Toll-Free IDL Book Orders: 1-888-461-0155
;*********************************************************** *******
FUNCTION ExampleROIMask, image
IF N_Elements(image) EQ 0 THEN BEGIN
; Get an image, if needed.
filename = Filepath(Subdir=['examples','data'], 'mr_knee.dcm')
image = Read_DICOM(filename)
ENDIF
; Draw ROI's on image. (Use the freehand PENCIL tool, for example.)
XROI, image, Regions_Out=rois, /Block
; Create an image mask from the ROIs you just created.
dim = Size(image, /Dimensions)
mask = BytArr(dim[0], dim[1]) + 1B
; Cycle through the ROIs.
FOR j=0, N_Elements(rois)-1 DO BEGIN
thisROI = rois[j]
IF Obj_Valid(thisROI) THEN BEGIN
thisROI -> GetProperty, Data=polygon
indices = PolyFillV(polygon[0,*], polygon[1,*], dim[0], dim[1])
IF indices[0] NE -1 THEN mask[indices] = 0
Obj_Destroy, thisROI
ENDIF
ENDFOR
; Apply the mask to the image and return it.
RETURN, image * mask
END
;*********************************************************** *******
|
|
|