Stereo Renderer Demo
Features
Loads left intrinsics, right intrinsics, left-to-right extrinsics
Loads a set of models, using a single .json file
Plays video, or loads a single static image
Overlays models on top of video
Creates 2 windows.
One for interacting
One for a stereo display, either interlaced or stacked
Allows interacting with models, changing the model-to-world transform
Camera defaults to origin
Usage
Create .json descriptor
A set of models (.vtk, .vtp, .stl, .ply) can be loaded. Rather than have many command line args, we use a .json file. The format is:
{
"surfaces": {
"kidney": {
"file": "kidney.vtk",
"colour": [213, 142, 119],
"opacity": 0.5,
"visibility": true,
"pickable": true
},
"artery": {
"file": "artery.vtk",
"colour": [203, 81, 54],
"opacity": 0.5,
"visibility": true,
"pickable": false
},
"cyst": {
"file": "cyst.vtk",
"colour": [144, 221, 157],
"opacity": 0.5,
"visibility": true,
"pickable": false
},
"renalsinusfat": {
"file": "renalSinusFat.vtk",
"colour": [161, 115, 220],
"opacity": 0.5,
"visibility": true,
"pickable": false
},
"vein": {
"file": "vein.vtk",
"colour": [54, 109, 188],
"opacity": 0.5,
"visibility": true,
"pickable": false
}
}
}
Note: There should only ever be 1 “pickable” object. The pickable object is the one you interact with.
You can set colour [R, G, B], opacity [0, 1] and visibility [true|false], as shown above.
Calibration Files
Camera calibration files should be plain text, ASCII files, as would
be compatible with numpy.loadtxt(filename).
Intrinsics: [3x3]
Stereo extrinsics: [4x4]
Note: We do not load distortion parameters. Therefore, video must be undistorted.
Usage
If you have pip install-ed the whole package, you can see the usage message by
running the sksurgerystereorenderer entry point with -h.
For example:
promt% sksurgerystereorenderer -h
usage: sksurgerystereorenderer [-h] -li LEFT_INTRINSICS -ri RIGHT_INTRINSICS -l2r LEFT_TO_RIGHT -m MODELS -r CLIPPING_RANGE -lv LEFT_VIDEO -rv RIGHT_VIDEO [-m2w MODEL_TO_WORLD] [-c2w CAMERA_TO_WORLD]
[-s {stacked,interlaced}] [-v]
sksurgerystereorenderer - Stereo augmented reality renderer with interactive model manipulation.
options:
-h, --help show this help message and exit
-li, --left_intrinsics LEFT_INTRINSICS
File path to left camera 3x3 intrinsics matrix.
-ri, --right_intrinsics RIGHT_INTRINSICS
File path to right camera 3x3 intrinsics matrix.
-l2r, --left_to_right LEFT_TO_RIGHT
File path to 4x4 stereo left-to-right extrinsic matrix.
-m, --models MODELS Path to models .json configuration file.
-r, --clipping_range CLIPPING_RANGE
Near,far clipping range (e.g. '1,1000').
-lv, --left_video LEFT_VIDEO
Left video source: integer device index, video file path, or static image (.png/.jpg).
-rv, --right_video RIGHT_VIDEO
Right video source: integer device index, video file path, or static image (.png/.jpg).
-m2w, --model_to_world MODEL_TO_WORLD
File path to a 4x4 model-to-world matrix applied to all models on startup.
-c2w, --camera_to_world CAMERA_TO_WORLD
File path to a 4x4 camera-to-world matrix for the initial camera pose.
-s, --stereo_mode {stacked,interlaced}
Stereo display mode: 'stacked' (left=top, right=bottom) or 'interlaced'. Default: stacked.
-v, --version show program's version number and exit
Alternatively, if you are running a development environment:
prompt% source .tox/test/bin/activate
prompt% python sksurgerystereorenderer.py -h
gives the same output as the above help message.
An example would be:
prompt% source .tox/test/bin/activate
prompt% python sksurgerystereorenderer.py \
-m patient.json \
-li davinci_intrinsics_undistorted.txt \
-ri davinci_intrinsics_undistorted.txt \
-l2r left_to_right.txt \
-lv leftVideo_undistorted.avi \
-rv rightVideo_undistorted.avi \
-r 1,1000
Screens
The app can make use of a 2-monitor setup.
If you have 2 monitors, the primary (e.g. laptop) shows a window for interacting, and the secondary (e.g. external 3D monitor) shows the stereo display. Both maximised.
If you have 1 monitor, both windows appear on the same monitor, both unmaximised.
Interation Controls
Similar to standard VTK controls, and you need a 3-button mouse.
Left button and move left-right: Rotate about centroid, left-right
Left button and move up-down: Rotate about centroid, up-down
Scroll wheel: Zoom in/out, by moving the model towards/away from camera
Right button and move: spin about forward axis
Middle button and move: pan (i.e. translation)