Skip to content

Commit f3f3671

Browse files
committed
Update README.md
1 parent 9d476ce commit f3f3671

File tree

1 file changed

+39
-25
lines changed

1 file changed

+39
-25
lines changed

README.md

Lines changed: 39 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
🆕 *For examples running `DiffDRR` on real data, please check out our latest work, [`DiffPose`](https://github.com/eigenvivek/DiffPose).*
2-
31
DiffDRR
42
================
53

@@ -20,19 +18,53 @@ DiffDRR
2018

2119
Most importantly, `DiffDRR` implements DRR synthesis as a PyTorch module, making it interoperable in deep learning pipelines.
2220

23-
Below is a comparison of `DiffDRR` to a real X-ray (X-rays and CTs from the [DeepFluoro dataset](https://github.com/rg2/DeepFluoroLabeling-IPCAI2020)):
24-
25-
![`DiffDRR` rendered from the same camera pose as a real X-ray.](notebooks/index_files/deepfluoro.png)
26-
2721
## Install
2822

29-
Install `DiffDRR` from PyPI:
3023
```zsh
3124
pip install diffdrr
3225
```
3326

3427
## Usage
3528

29+
### Rendering
30+
31+
The physics-based rendering pipeline in `DiffDRR` produces photorealistic synthetic X-rays.
32+
For example, see a comparison of `DiffDRR` to a real X-ray (X-rays and CTs from the [DeepFluoro dataset](https://github.com/rg2/DeepFluoroLabeling-IPCAI2020)):
33+
34+
![`DiffDRR` rendered from the same camera pose as a real X-ray.](notebooks/index_files/deepfluoro.png)
35+
36+
37+
### 2D/3D Registration
38+
39+
The impotus for developing `DiffDRR` was to solve 2D/3D registration
40+
problems with gradient-based optimization. We demonstrate `DiffDRR`'s
41+
utility for this usecase with the following experiment.
42+
Here, we generate two DRRs:
43+
44+
1. A fixed DRR from a set of ground truth parameters
45+
2. A moving DRR from randomly initialized parameters
46+
47+
To solve the registration problem, we use gradient descent to maximize
48+
an image loss similarity metric between the two DRRs. This produces
49+
optimization runs like this:
50+
51+
![](experiments/registration.gif)
52+
53+
The full example is available at
54+
[`optimizers.ipynb`](https://vivekg.dev/DiffDRR/tutorials/optimizers.html).
55+
56+
🆕 *For examples running `DiffDRR` on real data, please check out our latest work, [`DiffPose`](https://github.com/eigenvivek/DiffPose).*
57+
58+
![](https://github.com/eigenvivek/DiffPose/experiments/test_time_optimization.gif)
59+
60+
### Volume Reconstruction
61+
62+
`DiffDRR` is differentiable with respect to the 3D volume as well as camera poses.
63+
Therefore, it could (in theory) be used for volume reconstruction. However, this
64+
feature has not been robustly tested and is currently under active development!
65+
66+
### Hello, World!
67+
3668
The following minimal example specifies the geometry of the projectional radiograph imaging system and traces rays through a CT volume:
3769

3870
``` python
@@ -75,24 +107,6 @@ On a single NVIDIA RTX 2080 Ti GPU, producing such an image takes
75107
The full example is available at
76108
[`introduction.ipynb`](https://vivekg.dev/DiffDRR/tutorials/introduction.html).
77109

78-
## 2D/3D Registration
79-
80-
We demonstrate the utility of our auto-differentiable DRR generator by
81-
solving the 2D/3D registration problem with gradient-based optimization.
82-
Here, we generate two DRRs:
83-
84-
1. A fixed DRR from a set of ground truth parameters
85-
2. A moving DRR from randomly initialized parameters
86-
87-
To solve the registration problem, we use gradient descent to maximize
88-
an image loss similarity metric between the two DRRs. This produces
89-
optimization runs like this:
90-
91-
![](experiments/registration.gif)
92-
93-
The full example is available at
94-
[`optimizers.ipynb`](https://vivekg.dev/DiffDRR/tutorials/optimizers.html).
95-
96110
## Development
97111

98112
`DiffDRR` source code, docs, and CI are all built using

0 commit comments

Comments
 (0)