BlueBrain / BlueBrain/Atlas-Download-Tools
Determine `donwsample_img` automatically
- Dominant language
- Python
- Stars
- 17
- Forks
- 8
- PR merge metrics
- No merged PRs in 30d
Description
In `download_parallel_dataset` one can specify both the `downsample_ref` and `downsample_img` manually. However,
it might be very useful to imply a reasonable `downsample_img` from the selected `downsample_ref` and the resolution of a given image (can be found in the API metadata).
Intuitively, the following should be true to avoid artifacts in the synchronized image
```python
img_shape / (2 ** downsample_img) > refspace_shape / downsample_ref
```
At the same time, we want the `downsample_img` to be as large as possible to make the download fast + avoid wasting disk space.
So specifically let's take a section image `id = 101349501`. It comes from a coronal dataset and has a shape of `(4344, 5096)`. As usually, we set `downsample_ref` to 25.
Therefore
```Python
refspace_shape = (8000, 11400)
downsample_ref = 25
img_shape = (4344, 5096)
downsample_img = x # we want to solve for this and it must be an integer
```
Just using the above unequality one proposition could be
```
downsample_img < log_2((min(img_shape) * downsample_ref) / max(refspace_shape)))
```
So the below formula could work?
```python
int(np.log2((min(img_shape) * downsample_ref) / max(refspace_shape)))
```
```
3
```
I checked the synchronized image and there seem to be no artifacts.
Finally, we should be also careful about `downsample_img` being too high because the image download API does not support high values.
Contributor guide
Assessment
This issue has not been assessed yet.