Journal

5/5/23


5/3/23 (Client in-person)


4/26/23 (Client Zoom)

  • Hank demo’d pixel spacing fixes.
  • Eric demo’d CLI.
  • Prof. Styner demo’d pip (didn’t work but was likely due to a missing driver or something like that, not our code).
  • Discussed handoff.

4/25/23 (Coach Zoom)

  • Louie will grade our codebase and hand-off document in particular.

4/24/23 (Final presentation)

  • Final presentation was today.
  • Eric implemented CLI over the weekend.
  • Hank fixed pixel spacing by changing CHAIN_APPROX_SIMPLE to CHAIN_APPROX_TC89_L1. Also switched order of pixel spacing arguments in GUI.main.py.

4/19/23 (Client in-person)

  • Rebranded to NeuroRuler. Changed GitHub name. Jesse changed documentation site name.
  • pip install NeuroRuler not working. Fixed
  • Went over pixel spacing unit tests, load/save settings, and CLI.
  • Sent a message in Discord about final presentation structure.
  • Eric is working on CLI and pip. GUI could still be improved.
  • Hank is working on unit tests for pixel spacing and fixing pixel spacing.

4/18/23 (Coach Zoom)

  • Went over handoff plan and pixel spacing unit tests (PyQt6 import not working on CI because the CI tests run on computers without monitors).
  • Final presentation reminder.

4/17/23 (Team in-person)

  • Eric will do CLI (closely related to load settings), threshold for pixel spacing, and put (arrow) buttons in the GUI on the left and right ends of sliders. Eric did the hand-off plan.
  • Hank will write end-to-end tests for the algorithm. Specifically, R^2 will be determined, and non-(1, 1, 1) pixel spacing will be tested. Hank will also do load/save settings via JSON (closely related to CLI settings).
  • A function will be written for exporting settings, and this function should be run both for CLI and GUI.
  • Jesse published the project to PyPI (i.e., can pip install), but it’s not fully functional.

4/12/23 (Client Zoom)

  • We are probably rebranding to NeuroRuler.
  • Prof. Styner gave us a lot more data.
  • To test that our algorithm accounts for pixel spacing correctly, we should change an image’s spacing using Slicer and check that the computed circumference is nearly the same.
  • We can use global settings for all loaded images because if the user wants individualized settings for an image, they can load that image separately. This applies to JSON setting input too.
  • For CLI/batch processing, the input should be a single image and a single set of settings. The user can write a script to apply the algorithm to multiple images.
  • Upload project to pip. (Done)
  • Slider for brightness/contrast.
  • Eric will work on CLI, along with GUI.

4/11/23 (Coach Zoom)

  • We fixed the aspect ratio of the image, as Louie suggested.
  • Louie went over examples of great documentation.
    • In short, our documentation site should have a page that walks through how to use the application. It should also have a page describing core API.

4/10/23 (Team in-person)

  • Not much to discuss today.
  • Jesse discussed progress made over the wellness weekend: fixed aspect ratio of image and error and information dialog (implemented by Eric).
  • Eric will be working on the GUI, possibly involving styling, so Jesse discussed how BreezeStyleSheets works. Also the Hand-off plan.
    • A specific feature to add is arrow buttons on the left and right ends of the QScrollBars.
  • Hank and Jesse will work on unit tests.

4/5/23 (Client Zoom)

  • No client meeting, Prof. Styner is traveling.
  • Team presented Tech Talk (image processing) in class.
  • Team met briefly and discussed TODO items. Essentially, there’s not much we can work on until we’re sure about whether settings should be global or not.
  • Madison found out how to maintain the image’s aspect ratio in the GUI.

4/4/23 (Coach Zoom)


4/3/23 (Team in-person)

  • Team discussed the binary threshold bug (now fixed), tech talk (Jesse and Madison completed rotation and filter demos), test plan, and remaining project tasks. Trello has been updated.
  • Madison implemented smoothing GUI options and preview, view options, and slice indicator on the X and Y views. TODO: Rename to sagittal, coronal, and axial.
  • Jesse aligned images for all views. He cleaned up the GUI code and switched from PyQt6 to PySide6. He also implemented a heavily WIP contour length calculation for images with pixel spacing that isn’t (1, 1, 1). TODO: Test this
  • Eric and Jesse added a pre-commit git hook.
  • Hank implemented binary threshold, along with GUI options and preview.
  • Eric removed image groups (unneeded in GUI) and implemented an error dialog for when the user attempts to load an image with different properties into the GUI.

3/29/23 (Client Zoom)

  • Rachel Smith, the main user of the old HCT, joined this meeting.
  • Madison demo’d GUI.
  • Prof. Styner and Rachel suggested having 3 concurrent views or the ability to switch to the sagittal or coronal views to view the z (axial) slice indicator.
  • Regarding batch processing, Jesse discussed image grouping. Clients suggested that being able to switch between batches may not be useful. Just informing via an error message is fine.
    • It would be trivial to save the paths of each group to a JSON or some other type of text file.
  • Rachel suggested a settings file including all the parameters that users want to set. The program should be able to import and export settings.
    • There should be a settings file per image, but user can choose whether to apply to just one image or to all images. (With global settings, can’t apply to one image only)
  • Rachel suggested that the slice number should be an individual setting.
  • Allow tolerance for pixel spacing floats.
    • This is difficult because pixel spacing, among other properties, is hashed to form image groups. Try rounding?
  • Implement CLI to load settings file.
  • Image paths should be loadable from CLI.

3/28/23 (Coach Zoom)

  • Madison demo’d GUI.
  • Jesse asked about pixel spacing.
  • Louie emailed the team with some advice regarding pixel spacing.

3/27/23 (Team Hybrid)

  • Madison updated the GUI heavily. HCT’s GUI is now a single-window application.
  • Jesse implemented image grouping and JSON config and assisted with the GUI updates.
  • Eric worked on fixing the GUI’s startup aspect ratio.
  • Discussed the structure of our Tech Talk.
  • Everyone has assigned Trello tasks.

3/22/23 (Client Zoom)

  • Prof. Styner looked over team’s Trello list of TODO items and provided feedback.
  • (Done but should check) Specifically, our GUI image orientation should match that of ITK-SNAP.
  • We should maintain a fixed aspect ratio for the image or let the user know that the rendered image may have an incorrect aspect ratio.
  • Add user-adjustable smoothing parameters and binary threshold parameters to GUI.
  • Smoothed image should be displayed after clicking Apply.
    • We now have a Preview button in the GUI for this.
  • User should be able to adjust the intensity range for the image before the normalization to 0…255 in the array2qimage conversion from np array -> QImage.
  • Use same settings for all loaded images, which are assumed to have the same properties so that this will work.
  • Trello tasks assigned:
    • Hank: Smoothing and binary threshold functions with adjustable parameters
    • Madison: GUI settings rework, circumference calculation (account for pixel spacing)
    • Jesse: GUI global settings
    • Eric: Connect GUI buttons and text boxes to functions

3/21/23 (Coach Zoom)

  • Jesse demo’d project progress.
  • Louie suggested the following:
    • File path should be displayed more prominently.
    • ./head-gui.py instead of python -m src.GUI.main
    • Image should have an indicator for the axis of rotation.
    • GUI can be improved. Specifically, aspect ratio of image should be fixed.

3/20/23 (Team in-person)

  • Jesse wrapped together the team’s rotation, filtering, and contouring code and implemented Madison’s GUI design. Also discussed documentation website and TODO items with the team.

3/08/23 (Client Zoom)

  • Madison implemented image filters (smoothing, Otsu threshold, hole filling, and select largest component).
  • Prof. Styner assisted with debugging, including a bug fix involving center of 3D rotation.
    • The center of rotation calculation (dimensions - 1) / 2.0 seems fine, but we’re not 100% sure. Works fine for all example images in GUI, though.
  • Image processing seems pretty much finished. Now the important task is the rest of the algorithm.

3/07/23 (Coach Zoom)


3/06/23 (Team Meeting)

  • Eric did a portion of APPLES Reflection.

3/01/23 (Client Zoom)

  • 3D rotations need to rotate around the center of the head, not the center of the image. Need to detect the head.
  • Prof. Styner recommends against Canny edge detection. Instead, we need to use FG/BG segmentation/threshold (Otsu), hole/island filling, largest component selection.
  • (Probably) don’t need to convert NRRD/NIfTI to intermediary JPG/PNG. In fact, do not convert to JPG due to lossy compression.
  • Take account of the fact that pixels may not be square.

2/28/23 (Coach Zoom)

  • Investigate .nrrd/.nii(.gz) metadata for px to physical units conversion.
  • Need to measure error from our method. Ask Prof. Styner for images with pre-computed circumference and compare results.
  • Finish up Model, begin coding View.

2/22/23 (Team in-person)

  • Hank discovered opencv and used it to perform edge detection and circumference measurement on a brain image in JPG format.
  • Jesse got Euler3DTransform to work but can’t yet export to JPG.

2/21/23 (Coach Zoom)

  • Need to put CRC Cards and Arch Diagram in Design document.
  • Midterm presentations coming up.
  • Gimbal lock
  • GUI idea

2/20/23 (Team in-person)


2/15/23 (Team hybrid)

  • Roughly divided project into four parts and mapped team members to parts. This is also in Trello.
  • {Jesse: image processing, Madison: GUI, Hank: circumference computation algorithm, Eric: image visualization}
    • Image visualization is tentative. Unsure at this point whether it is distinct from processing and GUI.
  • This structure isn’t rigid and certainly isn’t disjoint. It’s also incomplete since CLI, for example, is missing. We’ll modify this as we make progress, of course.
  • However, it should help each of us know what to focus on.

2/15/23 (Client Zoom)

  • Short meeting.
  • Jesse presented basic SimpleITK demo. However, Prof. Styner mentioned that rotating a 2D slice won’t work. We must rotate the 3D image using a 3D transformation.
  • The head circumference computation algorithm should work like so.

2/13/23 (Team Zoom)

  • Very short meeting.
  • Discussed Trello for organization.
  • Jesse went over a basic SimpleITK demo.

2/8/23 (Client Zoom)

  • Prof. Styner emphasizes maintainability of code!
  • Shared Platform Selection and got some advice regarding these libraries.
  • We were advised to try building proofs of concept to test these libraries.

2/7/23 (Coach Zoom)

  • No coach meeting on 2/14 (wellness day).
  • We need to start work on a proof of concept and the Midterm Presentation soon.
  • Shared our updated D1. Specifications.
  • Shared Platform Selection and got some feedback about our choices.
  • Louie introduced Ptqtgraph and a library that can help with Python’s performance issues.

2/1/23 (Client Zoom)

  • Prof. Styner inspected our user stories and requirements in D1. Specifications.
  • He provided some feedback on the existing specs and suggested some new ones.
  • The Specifications page has been updated.

1/31/23 (Coach Zoom)

  • Louie checked over our user stories, project concept, and requirements (WIP).
  • We need to clarify the meaning of “point-and-click GUI”.
  • We need to make sure our user stories are “atomic,” meaning there shouldn’t be a user story that can be split into smaller user stories.
  • We asked for some advice about how to distribute work among the team.

1/30/23 (Team in-person)

  • Discussed potential project technologies.
  • Made progress on D1. Specifications deliverable.
  • Prepared for this week’s coach and client meeting.
  • Wrote concept statement for website.

1/27/23 (Client in-person)

  • Met Professor Styner!
  • Prof. Styner introduced the Head Circumference Tool project.
  • Recurring client meetings will be Wednesdays ~10:15 am (after class) over Zoom.
    • We may also meet in Prof. Styner’s lab in the med school sometimes.
  • We will communicate with Prof. Styner primarily over Slack.
  • Did a team-building exercise.

1/24/23 (Team Discord)

  • Spontaneous Discord meeting, reviewed this week’s tasks.

1/24/23 (Coach Zoom)

  • Met COMP523 coach Louie Lu.
  • Louie went over the stuff due this week.
  • Also went over dev environment: Git, code style, kanban & scrum, etc.

1/20/23 (Team async discussion)

  • Swapped 2 preferences after very long discussion.

1/18/23 (Team Zoom)

  • Created a document with our opinions on every project.
  • Discussed our preferences. Finished selecting 6 projects from the repository.

1/11/23 (Team in-person)

  • First team meeting!
  • Created website.
  • Discussed team roles, rules, and meeting times.
    • Design Lead presented a convincing argument for her role.
  • Made some art.

1/9/23

  • Team established.