Skip to content

Commit 7df3e78

Browse files
Update README with contributor changes and project details
Updated project week plan and next steps with detailed user study results and bug fixes.
1 parent b89803e commit 7df3e78

1 file changed

Lines changed: 205 additions & 30 deletions

File tree

  • PW44_2026_GranCanaria/Projects/DeformviewQuantitativeVisualizationOfNonLinearDeformationFieldsForUseInImageGuidedNeurosurgery

PW44_2026_GranCanaria/Projects/DeformviewQuantitativeVisualizationOfNonLinearDeformationFieldsForUseInImageGuidedNeurosurgery/README.md

Lines changed: 205 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,7 @@ key_investigators:
1717
- name: Elise Donszelmann-Lund
1818
affiliation: McGill University
1919
country: Canada
20-
21-
- name: Étienne Léger
22-
affiliation: McGill University
23-
country: Montreal Neurological Institute, Canada
24-
25-
- name: Raphäel Christin
26-
affiliation: McGill University
27-
country: Canada
28-
29-
- name: Kaleem Siddiqi
30-
affiliation: McGill University
31-
country: Centre of Intelligent Machines, Canada
32-
20+
3321
- name: D. Louis Collins
3422
affiliation: McGill University
3523
country: Montreal Neurological Institute, Canada
@@ -70,53 +58,240 @@ Slicer tools, to improve user understanding and confidence.
7058
1. We will systematically test DeformView across representative datasets (focusing on IGNS-focused data - ReMIND, RESECT, BITE, etc.) and use cases to identify and resolve software bugs. We will ask attendees to use the module to identify common workflows, areas of improvement. We will also perform stress and destructive testing.
7159
2. User-centered design and feedback: We will conduct structured feedback sessions with expert users, non-expert users, and clinicians, using our targeted questionnaires and short tasks to identify desired features and usability gaps. We will lead discussions with attendees to identify areas of improvement and feature prioritization.
7260

61+
### Plan for Project Week
62+
We have implemented the core functionality of the DeformView module, including dense deformation visualization, Jacobian-based expansion/compression maps, and voxel-wise readout on cursor hover. Initial testing confirms that primary visualization goals have been achieved, with only minor usability and stability issues remaining.
63+
64+
We conducted a user study with 10 non-expert participants (average 2.9 years of imaging research experience) to evaluate module functionality. Participants compared DeformView to the existing 3D Slicer Transform Visualizer across four attributes: helpfulness in comprehension, interpretability, intuitiveness, and user confidence, using Likert ratings and the System Usability Scale. On average, DeformView was rated higher across all categories (mean: 4.1/5.0 vs 3.2/5.0), with statistically significant improvements in helpfulness (p=0.008) and intuitiveness (p=0.027). Overall, 80% of participants preferred DeformView over the existing module, confirming the value of our visualization approach.
65+
66+
We plan to address the remaining bugs (that we know of), get user feedback, and engage in discussions with Slicer developers to optimize our module:
67+
1. Colour Map and Legend Modifications
68+
- Fix legend scale reload bug
69+
- Resolve remaining default colour map behaviour, consistent default colour levels when loading new maps
70+
- Interaction between legend and colour level/window controls
71+
- Clarity of colour map loading and switching- add descriptive text under the “Color Map” selector
72+
73+
2. Jacobian-Specific Visualization Controls
74+
- Jacobian colour legend labels
75+
- Set Jacobian window and level to constant values to ensure consistent interpretation
7376

77+
3. User Interface and Readability Improvements
78+
- Adjust cursor text size for improved readability
79+
- Implement a full reset of default settings, not limited to window/level
7480

7581

7682
## Progress and Next Steps
7783

7884
<!-- Update this section as you make progress, describing of what you have ACTUALLY DONE.
7985
If there are specific steps that you could not complete then you can describe them here, too. -->
8086

87+
### Introduced the 'Increment Transform' feature
8188

82-
### Progress
83-
We have implemented the core functionality of the DeformView module, including dense deformation visualization, Jacobian-based expansion/compression maps, and voxel-wise readout on cursor hover. Initial testing confirms that primary visualization goals have been achieved, with only minor usability and stability issues remaining.
89+
The transformation is incrementally applied to the moving image over 10 discrete steps. This creates a sliding scale of the transform applied to the underlying image at discrete quantities (ie: 0.1x full transform, 0.2x final transform, etc.)
8490

85-
We conducted a user study with 10 non-expert participants (average 2.9 years of imaging research experience) to evaluate module functionality. Participants compared DeformView to the existing 3D Slicer Transform Visualizer across four attributes: helpfulness in comprehension, interpretability, intuitiveness, and user confidence, using Likert ratings and the System Usability Scale. On average, DeformView was rated higher across all categories (mean: 4.1/5.0 vs 3.2/5.0), with statistically significant improvements in helpfulness (p=0.008) and intuitiveness (p=0.027). Overall, 80% of participants preferred DeformView over the existing module, confirming the value of our visualization approach.
86-
87-
#### Native Apple Silicon Mac Build
88-
<img width="454" height="371" alt="image" src="https://github.com/user-attachments/assets/d06771dd-edc0-4d53-8b58-ef250698447d" />
8991

92+
# Video here
9093

9194

92-
### Next Steps
95+
### Fixed Remaining (Known) Bugs and Functional Errors
9396

94-
TODO:
9597
1. Colour Map and Legend Modifications
96-
97-
- Reduce legend text size
98-
- Investigate and fix legend scale reload bug
98+
- Fix legend scale reload bug
9999
- Resolve remaining default colour map behaviour, consistent default colour levels when loading new maps
100100
- Interaction between legend and colour level/window controls
101101
- Clarity of colour map loading and switching- add descriptive text under the “Color Map” selector
102102

103103
2. Jacobian-Specific Visualization Controls
104-
105104
- Jacobian colour legend labels
106-
- Set Jacobian window and level to constant values to ensure consistent interpretation - fixed scaling (check that we want this)
107-
105+
- Set Jacobian window and level to constant values to ensure consistent interpretation
108106

109107
3. User Interface and Readability Improvements
110108
- Adjust cursor text size for improved readability
111109
- Implement a full reset of default settings, not limited to window/level
112-
- Should colour be 'color' in the UI? Americanize.
113110

111+
# Full Demo Video here
112+
113+
### Slicer Build on Mac (Silicon) + Documentation
114+
115+
Worked with Steve to get a local build of 3D Slicer on OSX (Silicon). Also wrote documentation to configure, build, run, and debug 3D Slicer from source on macOS (ARM64) using Qt6 and Xcode.
116+
117+
#### Current Recipe for Slicer
118+
119+
##### My config:
120+
```
121+
frolick@IsabelMacBook % sw_vers
122+
ProductName: macOS
123+
ProductVersion: 15.7.3
124+
BuildVersion: 24G419
125+
126+
frolick@IsabelMacBook % qmake --version
127+
QMake version 3.1
128+
Using Qt version 6.10.1 in /opt/homebrew/lib
129+
130+
frolick@IsabelMacBook % cmake --version
131+
cmake version 3.31.5
132+
133+
CMake suite maintained and supported by Kitware (kitware.com/cmake).
114134
115-
4. Stability and Bug Fixes
135+
```
116136

117-
- Fix crash when two images are overlaid (temp mitigation -> set one image to 0% opacity on module entry)
137+
##### Prerequisites
118138

139+
###### Install Qt6
140+
141+
Verify Qt6 Install
142+
```
143+
qmake --version
144+
```
145+
146+
1. If not installed, Install Qt6 (via Homebrew)
147+
```
148+
brew install qt@6
149+
```
150+
2. Add Qt6 to shell environment:
151+
```
152+
echo 'export PATH="/opt/homebrew/opt/qt@6/bin:$PATH"' >> ~/.zshrc
153+
echo 'export CMAKE_PREFIX_PATH="/opt/homebrew/opt/qt@6:$CMAKE_PREFIX_PATH"' >> ~/.zshrc
154+
```
155+
3. Reload shell:
156+
```
157+
source ~/.zshrc
158+
```
159+
160+
4. Verify Qt6 installation:
161+
```
162+
qmake --version
163+
```
164+
165+
###### Install Xcode Command Line Tools
166+
```
167+
xcode-select --install
168+
```
169+
170+
###### Install XCode (not strictly necessary (?) but I couldn't do it without XCode Desktop)
171+
172+
If installing full Xcode from the App Store:
173+
174+
1. Install Xcode from App Store
175+
176+
2. Set it as the active developer directory:
177+
```
178+
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
179+
```
180+
3. Accept the license:
181+
```
182+
sudo xcodebuild -license accept
183+
```
184+
185+
4. Verify:
186+
```
187+
xcodebuild -version
188+
xcode-select -p
189+
```
190+
191+
Else, check the SDK path used by Xcode:
192+
```
193+
xcrun --show-sdk-path
194+
```
195+
---
119196

197+
##### Directory Setup
198+
199+
Create build directories and set ownership:
200+
```
201+
sudo mkdir -p /opt/scmake /opt/scd
202+
sudo chown -R $(whoami) /opt/scmake /opt/scd
203+
```
204+
205+
##### Create Build Script
206+
207+
```
208+
vim build_slicer.sh
209+
```
210+
211+
Paste:
212+
```
213+
#!/bin/bash
214+
215+
# Configuration
216+
SLICER_SOURCE_DIR="$HOME/slicer/latest/Slicer"
217+
SLICER_BUILD_DIR="/opt/scd"
218+
SLICER_SUPERBUILD_DIR="/opt/scmake"
219+
220+
# Create directories
221+
mkdir -p "$SLICER_BUILD_DIR"
222+
mkdir -p "$SLICER_SUPERBUILD_DIR"
223+
224+
# Clone Slicer source if it doesn't exist
225+
if [ ! -d "$SLICER_SOURCE_DIR" ]; then
226+
echo "Cloning Slicer repository..."
227+
mkdir -p "$(dirname "$SLICER_SOURCE_DIR")"
228+
git clone https://github.com/Slicer/Slicer.git "$SLICER_SOURCE_DIR"
229+
fi
230+
231+
cd "$SLICER_SUPERBUILD_DIR"
232+
233+
# Configure with CMake
234+
cmake \
235+
-DCMAKE_OSX_ARCHITECTURES=arm64 \
236+
-DSlicer_REQUIRED_QT_VERSION="6.10" \ # CHANGEME: Qt version (qmake --version)
237+
-DCMAKE_BUILD_TYPE:STRING=Debug \
238+
-DSlicer_USE_SimpleITK:BOOL=OFF \
239+
-DSlicer_BUILD_I18N_SUPPORT:BOOL=OFF \
240+
-DSlicer_BUILD_DICOM_SUPPORT:BOOL=OFF \
241+
-DSlicer_VTK_SMP_IMPLEMENTATION_TYPE:STRING=Sequential \
242+
-DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=15.7 \ # CHANGEME: OSX version (About this Mac -> macOS)
243+
-DCMAKE_OSX_SYSROOT:STRING="$(xcrun --show-sdk-path)" \
244+
"$SLICER_SOURCE_DIR"
245+
246+
# Build (use -j for parallel jobs, -k to keep going on errors)
247+
make -j10 -k
248+
```
249+
250+
251+
##### Run Build
252+
253+
```
254+
cd /opt/scmake
255+
chmod +x ./build_slicer.sh
256+
./build_slicer.sh
257+
```
258+
259+
260+
---
261+
262+
##### Running Slicer Locally
263+
264+
###### Option 1: Navigate to the build directory, make, launch:
265+
Executable path: /opt/scmake/Slicer-build/Slicer
266+
267+
```
268+
cd /opt/scmake/Slicer-build
269+
make -j8 #Optional rebuild to show local changes
270+
./Slicer
271+
```
272+
273+
###### Option 2: Run on XCode with Debugging
274+
275+
1. Create a Dummy Xcode Project
276+
Xcode requires an open project in order to attach a debugger.
277+
1. Open Xcode
278+
2. File → New → Project
279+
3. Create a Command Line Tool project (macOS)
280+
4. Enter an Organization Name (required!)
281+
282+
2. Get the Slicer Process ID (PID)
283+
1. Open local Slicer through the build directory (following the steps in Option 1)
284+
2. In Python Interactor:
285+
```
286+
import os
287+
os.getpid()
288+
```
289+
Copy the PID
290+
3. Attach the Debugger
291+
In Xcode:
292+
1. Debug → Attach to Process by Name or PID…
293+
2. Paste the PID
294+
3. Now you can attach process and use debugger functionality (breakpoints, etc.) as usual
120295
121296
122297

0 commit comments

Comments
 (0)