ROI object ideas
Idea 1: draw ROis
Idea 2:...
Idea 3: Profits!
_____
Goals:
1) Draw VOIs quickly using 3D vertex-based format.
- load one of a series of standard shapes (sphere, cube, amygdala), pops up either at current location or at arbitrary spot (center) resize, translate, rotate
2) Edit or Draw planar ROIs with pixel-by-pixel control.
3) Be able to use either 2D or 3D format interchangeably (?!)
4) Display and analysis are based on underlying physical dimensions (mm) of pixels, not on corresponding pixel element in array.
5) Analysis tools for extracting ROI data and statistics from e.g. PET data, for single or dynamic frames.
- inherits ROI object, interface ROI objects and image data (takes care of file formats).
- Properties: Image, ROI, returns reduced data values. (Data reduction tool object).
6) Self-explanatory file format, plain text as much as possible. (similar to PINNACLE)
- Save and Retrieve methods for ROI object, fairly extensive header.
7) Eye-popping display
8) Ability to rotate volume and/or VOI.
9) Self-contained application, easily installed.
__________
Image Display Object:
1) Large central 3D display of rendered ROI(s), planar images. Edit 3D VOI vertices, or 3D ROI using projections of vertecies onto 2D planes in 3D window.
2) 3 smaller orthogonal windows (axial, coronal, sagittal) that act as the interface between 3D and 2D editing. 3D vertex projections and outlines AND 2D pixel-by-pixel ROIs are shown here, but user can only edit the 2D ROIs. The 2D ROIs are optional, but if they exist will be used in favor of the 3D VOI for subsequent analysis.
3) One larger optional floating window to display the current 2D ROI slice of interest and edit it there. Edits here should track in the smaller 2D windows.
4) One small window with rotating orientation sign (right/left, front/back, top/bottom).
5) Small Main-level menu (load, save, quit)
6) Small mappable menu with all of the parameters (VOI appearance, colors, etc.)
7) Button menus associated with 3D display
- Draw object is top-level controller. Needs to know about (inherit) ROI(s) and also all of the diplay windows.
- Separate problems of display and ROI drawing. This program will be aimed at ROI options.
_________________
Lets Define our Objects:
1) ROI object (define and modify the ROI). One of the stored ROI files can be a standard template file. This will be an enhanced or uber-version containing RSI's ROI and ROIGroup objects, as well as some other information. Our ROI object will inherit one or more of RSI's ROIs and/or groups.
Methods:
Some methods apply to a single ROI, others to a ROI group.
- Read (group)
- Write (group)
- Chooser method (group) for selecting a single VOI from the display.
- Transform (group): Rotate, translate, and scale.
- Update header (group). ROI Group header should contain:
* modification history for each componenet ROI and for group
(creator, date created, date last modified)
* ROI components (name, creator, reference point [e.g. AC])
* File info (original ROI filename, base file used to draw ROIs,
subject name, protocol name and number, scan number, associated
filenames like PET)
- Add/Delete ROI from group. Have one level of undo for this. Also have a flag for which constituent ROI was last modified.
- Read (ROI)
- Write (ROI)
- Chooser method (ROI) for selecting a single VOI from the display.
- Transform (ROI): Rotate, translate, and scale.
- Delete vertex
- Add vertex
- Update header (ROI). Each ROI header should contain:
* modification history (creator, date created, date last
modified)
* ROI info (name, volume (mm^3), centroid, number of vertices, 2D
slices drawn?, x,y,z extents,)
- Move dependent verticies. (ROI). Sphere of influence (show it). Ability to lock some verticies. This method will include procedures for enacting "local changes", which means moving a single vertex and specifying how nearby verticies will get altered.
- One level of undo for most ROI operations. The ROI object needs to be able to reset itself to the state prior to the most recent change.
- We need a smart way of specifying points that are between verticies, like perhaps a 3D spline or polynomial fit. A spline will let us make sure that the surface passes through a vertex, whereas a fit will only make sure the vertex is near the surface, which we found frustrating with other programs. We may wind up specifying verticies for all of the edge pixels, in order to provide fine enough control. Our ultimate goal is to get at all of the pixels inside of the ROI, however this happens.
2) Display Objects:
- Image Picker: Flat image (2D)- same object for 3D rendering view, 2D flat, as well as same object for axial, coronal and sagittal. Give a pointer to an image volume, a translation matrix, center of the standard space, center of the image display space, point in image space that is within the display, and size of the image you want (in mm). This will be used by 7 (at least) views: 3 in 3D view, 1 in each of 3 2D small displays, and 1 for the larger floating 2D display.
- ROI Picker: Gets ROI outline (or fill) for desired plane.
- 2D display Object: knows how to blend the image and the ROI for display. Uses Image Picker and ROI Picker objects.
3) Object Object (coordinates VOI and display)
4) Apply Object: Apply a ROI to a (PET) image data set, extract ROI details.
- User needs to coregister data apriori, but does not necessarily have to perform reslice. Use .air file to relate PET data to ROIs. Use unit .air file if user has already perfromed reslice.
Use a structure to pass Images around:
img.ptr
img.x_dim
img.y_dim, etc
How to deal with multi-frame images?