File size: 2,859 Bytes
6dbba9b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | ## Quick Tutorial
ANTsPy functions and classes are generally faithful to the respective ANTsR versions,
with the following consistent changes in naming convention:<br>
* camel case in ANTsR is underscore case in ANTsPy
* e.g. resampleImage -> resample_image
* anything preceeded by `ants` or `antsr` in ANTsR is removed since ANTsPy uses namespaces already
* e.g. antsImageRead -> ants.image_read
### Read an Image
```python
import ants
img = ants.image_read( ants.get_ants_data('r16') )
print(img)
```
### Image Properties
Image properties are pythonic and easy to get/set:
```python
import ants
img = ants.image_read( ants.get_ants_data('r16') )
print(img.spacing)
img.set_spacing( (2., 2.) )
print(img.origin)
img.set_origin( (100,100) )
```
However, we still try to keep most of the associated ANTsR functions which are stand-alone, e.g:
```python
ants.get_spacing(img) # versus the pythonic `img.spacing`
ants.set_spacing(img, (2.,2.)) # versus `img.set_spacing`
imgclone = ants.image_clone(img) # versus img.clone()
```
### Converting to Numpy
ANTsPy provides seamless conversions to Numpy arrays. Through the use
of memory buffers directly in the C++ api, these calls are instantaneous and essentially free.
```python
import ants
img = ants.image_read( ants.get_ants_data('mni') )
img_array = img.numpy()
```
Do operations directly in numpy if you want, then simply make an ANTsImage right back
from the numpy array (again instantaneous and "free"):
```python
import ants
img = ants.image_read( ants.get_ants_data('mni') )
img_array = img.numpy()
img_array += 5
# copies image information and just changes the data
new_img1 = img.new_image_like(img_array)
# doesnt copy any information
new_img2 = ants.from_numpy(img_array)
# verbose way to copy information
new_img3 = ants.from_numpy(img_array, spacing=img.spacing,
origin=img.origin, direction=img.direction)
```
### Indexing
Images can be indexed (getting and setting) exactly as if they were arrays.
```python
import ants
img = ants.image_read( ants.get_ants_data('mni') )
vals = img[200,:,:] # get a slice
img[100,:,:] = 1 # set a slice
```
### Operator Overloading
All common mathematical operators are overloaded to work directly on ANTsImages:
```python
import ants
import numpy as np
img = ants.image_read( ants.get_ants_data('mni') )
img2 = img.clone()
img3 = img + img2
print(np.allclose(img.numpy()+img2.numpy(), img3.numpy())) # same as if done in numpy
```
### Chaining Commands
In ANTsR you can use the `%>%` command to chain operations. That's real nice. In ANTsPy, you can
do this automatically on ANTsImages. Amazing stuff..
```python
import ants
img = ants.image_read(ants.get_ants_data('r16'))
img = img.resample_image((64,64), 1, 0).get_mask().atropos(m = '[0.2,1x1]', c = '[2,0]', i = 'kmeans[3]', x = mask )
```
|