# Scar projection on 3D Meshes!
>TLDR: We can project the scar in reasonable time! We still need to figure out if the resolution of the scar segmentation needs to be addressed.
# Workflow overview
+ Convert `msh_cine` to mm using `meshtool convert`
+ Get deformation file (`rigid.dof`) using MIRTK's `register`. In this case, img_lge is moving and img_cine is fixed.
+ Transform the `msh_cine` using deformation file with MIRTK transform-points (`msh_cine_mm_on_LGE`)
+ Get the centre of gravity of `msh_cine_mm_on_LGE` (`msh_cine_mm_on_LGE_cog`)
+ Get scar voxels' real world coordinates and add new scalar field to `msh_cine_mm_on_LGE_cog` based on mesh
> NOTE1: The code has been optimised by vectorising some functions and can run now in much less time.
> NOTE2: The scar appears blocky, that's because of the resolution of the LGE. The solution for this would be to upscale the LGE segmentation.
# Usage Instructions
These instructions will show you how to download and install José's library [`imatools`](https://github.com/alonsoJASL/imatools.git), [`meshtool`](https://bitbucket.com/aneic/meshtool), and the MIRTK libraries.
## Installations needed
+ [`meshtool`](https://bitbucket.com/aneic/meshtool)
+ `MIRTK liibraries`
+ [`imatools`](https://github.com/alonsoJASL/imatools)
**Start by creating a folder to put everything**
```shell
mkdir ~/code
cd ~/code
```
### `meshtool`
Run each line separately:
```bash=
cd ~/code
git clone https://bitbucket.org/aneic/meshtool.git
cd ~/code/meshtool
make
```
When it finishes, link it to `/usr/bin/local`
```bash
sudo ln -s $HOME/code/meshtool/meshtool /usr/bin/local/meshtool
```
Test:
```shell
meshtool
```
you should see a help message like below
```
Error: Wrong usage.
Use: meshtool [help|convert|collect|clean|extract|generate|itk|insert|interpolate|split|smooth|transform|map|merge|query|resample|restore|reindex]
For help use: meshtool help
```
### MIRTK libraries
Get these from José, once downloaded, put them in the `~/code` folder. They will look as follows
```
code/
├── M3DLib/
│ └── meshtools3d
├── MLib/
│ ├── close-image
│ ├── dilate-image
│ ├── erode-image
│ ├── extract-surface
│ ├── info
│ ├── init-dof
│ ├── open-image
│ ├── register
│ ├── resample-image
│ ├── smooth-surface
│ ├── transform-image
│ └── transform-points
```
### `imatools` on Linux
For full instructions, check the [README page](https://github.com/alonsoJASL/imatools/blob/master/README.md). **Download**:
```
mkdir -p ~/code & git clone https://github.com/alonsoJASL/imatools ~/code/imatools
```
**Setup the environment**:
> You only need to do this once
```bash=
conda env create -f environment.yaml
conda activate imatools
conda install -c conda-forge vtk=9.2.6 simpleitk numpy scipy=1.9.2 matplotlib pandas seaborn networkx scikit-image nibabel pydicom -n imatools -y
# Create the file IMATOOLS_ENV_SETUP file we'll use later
./setup.sh
```
# Workflow
## Data
Make sure you have a folder with the following:
+ CINE volumetric mesh (`msh_cine`) - main vtk mesh, normally in _um_
+ CINE scan (`img_cine`) - image volume (nii, nrrd, nii.gz)
+ LGE scan (`img_lge`) - image volume (nii, nrrd, nii.gz)
+ LGE segmentation (`seg_lge`) - scar segmentation (nii, nii.gz, nrrd), `scar=3`
## Run the code
Just need to run a single script in `imatools` for this pipeline.
**Before running, activate environment:** this must be done each time!!!
```bash=
cd ~/code/imatools
source IMATOOLS_ENV_SETUP
```
Call the whole pipeline from a single line.
> Take note where you have your MIRTK libraries. In this example, we assume they're in the `~/code/MLib` folder.
> This assumes the scar label is `3`, change otherwise.
```bash=
python scripts/vscar_projection.py pipeline -in PATH_TO_DATA/msh_cine -mirtk ~/code/MLib -moving img_CINE -fixed img_LGE -ref seg_lge -label SCAR_LABEL -cwd
```
For example,
```bash=
python scripts/vscar_projection.py pipeline -in PATH_TO_DATA/cine_original_mesh.vtk -mirtk ~/code/MLib -moving img_CINE.nii.gz -fixed img_LGE.nii.gz -ref seg_lge.nii.gz -label 3 -cwd
```