Skip to content

Commit 3f9e2f8

Browse files
committed
docs: add todays status update presentation
1 parent e989748 commit 3f9e2f8

2 files changed

Lines changed: 153 additions & 0 deletions

File tree

docs/update_05_19.pdf

51.3 KB
Binary file not shown.

docs/update_05_19.typ

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
#set page(
2+
width: 28.8cm,
3+
height: 16.2cm,
4+
margin: (top: 1.4cm, bottom: 1cm, left: 1.8cm, right: 1.8cm),
5+
fill: white,
6+
numbering: "1",
7+
number-align: right,
8+
)
9+
10+
#set text(font: "New Computer Modern", size: 16pt)
11+
#set par(justify: true, leading: 0.65em)
12+
13+
#let accent = rgb("#1d4ed8")
14+
#let accent-light = rgb("#eff6ff")
15+
#let accent-mid = rgb("#93c5fd")
16+
#let muted = rgb("#6b7280")
17+
#let dark = rgb("#111827")
18+
#let green-bg = rgb("#f0fdf4")
19+
#let green-border = rgb("#bbf7d0")
20+
#let green-text = rgb("#166534")
21+
22+
#let slide(title, body) = {
23+
pagebreak()
24+
block(
25+
width: 100%,
26+
inset: (top: 8pt, bottom: 10pt, left: 0pt, right: 0pt),
27+
stroke: (bottom: 2.5pt + accent),
28+
)[
29+
#text(size: 24pt, fill: accent, weight: "bold")[#title]
30+
]
31+
v(0.5cm)
32+
body
33+
}
34+
35+
#let highlight(body) = {
36+
block(
37+
width: 100%,
38+
fill: accent-light,
39+
inset: 14pt,
40+
radius: 6pt,
41+
stroke: 1pt + accent-mid,
42+
)[
43+
#body
44+
]
45+
}
46+
47+
#let proofbox(body) = {
48+
block(
49+
width: 100%,
50+
fill: green-bg,
51+
inset: 14pt,
52+
radius: 6pt,
53+
stroke: 1pt + green-border,
54+
)[
55+
#body
56+
]
57+
}
58+
59+
#align(center + horizon)[
60+
#block(width: 80%)[
61+
#align(center)[
62+
#text(size: 34pt, fill: accent, weight: "bold")[
63+
VesSkel\
64+
]
65+
#v(1.0cm)
66+
#text(size: 20pt, fill: dark)[
67+
Vessel Skeletonization and Graph-Based\
68+
Phenotype Analysis in Retinal Fundus Images
69+
]
70+
#v(1.2cm)
71+
#line(length: 40%, stroke: 1.5pt + accent)
72+
#v(0.8cm)
73+
#text(size: 16pt, fill: muted)[
74+
Simon Wittmann
75+
76+
Supervisor: Anna Möller
77+
]
78+
#v(0.3cm)
79+
#text(size: 14pt, fill: muted)[
80+
19. Mai 2026
81+
]
82+
]
83+
]
84+
]
85+
86+
#slide("Implementation Progress")[
87+
#v(-0.3cm)
88+
- Experiment: Removing correlated features did not improve the best classifier
89+
- Refactoring, better Docstrings and propagate plugin version to `napari.yaml`
90+
- Unified `PipelineConfig` (JSON-serializable, shared napari + CLI)
91+
- `vesskel`-CLI with `run` / `config-init` / `validate-config`
92+
- Refactored napari widgets onto a single widget using shared `analyze_binary_image` pipeline
93+
- Feature comparison table (REAVER, VesselVio, VesselExpress, TWOMBLI, VesSAP, Skan)
94+
]
95+
96+
97+
#slide("Unified Pipeline: napari + CLI")[
98+
The core analysis is now a single shared function `analyze_binary_image()` used by both the napari widget and the new standalone CLI.
99+
100+
#v(0.3cm)
101+
#highlight[
102+
*CLI usage:* `vesskel run --input "data/*.png" --config config.json --out results/`
103+
104+
*Config management:* `vesskel config-init` (starter JSON), `vesskel validate-config` (check validity)
105+
]
106+
107+
#v(0.3cm)
108+
*Config as contract:* same file can be exported/imported inside napari
109+
110+
*Current Limited Config-Options:*
111+
+ Branch extraction toggle, branch text labels, summary features, fractal dimension
112+
+ Output controls: skeleton .npy/.png, summary.csv, per-image branches.csv
113+
]
114+
115+
#slide("Feature Comparison: Tools Overview")[
116+
#v(-0.5cm)
117+
118+
See `Feature_Comparison.xlsx`
119+
120+
#v(0.3cm)
121+
#set text(size: 14pt)
122+
#highlight[
123+
\* I only took features that can be e2e-extracted using the Tool, e.g. Vessap uses their DL Network, then go through Allen Cell Registration (external Tool) and then analyze the Results using Matlab code.
124+
]
125+
#highlight[
126+
*Vipar* is not included in the comparison: it is not an open-source package and cannot be used programmatically.
127+
]
128+
#highlight[
129+
*Skan* is built around powerful pandas dataframes. Features are often not directly outputted but can be easily computed, e.g. `endpoint_count = np.sum(skel.degrees == 1)` or `min_segment_length = min(summarize()['branch_distance'])`. I treated features that can be easily computed as present.
130+
131+
This extensibility is a strong argument for further relying on the library.
132+
]
133+
]
134+
135+
#slide("Summary & Next Steps")[
136+
137+
#columns(2, gutter: 1.5em)[
138+
*What I did:*
139+
+ Unified pipeline
140+
+ Standalone `vesskel` CLI (`run`, `config-init`, `validate-config`)
141+
+ Configurable pipeline via JSON
142+
+ Feature comparison table across 6 other tools
143+
144+
#colbreak()
145+
146+
*Next steps:*
147+
+ Add more features
148+
+ Pipeline Performance Improvements?
149+
+ Group Feature Table into Categories
150+
+ Integrate original image for intensity-based features
151+
+ Add Preprocessing-Options (Clique Removal, etc.)
152+
]
153+
]

0 commit comments

Comments
 (0)