# Planning & Orga: Outreachy Project on transform module and thin-plate splines
Links & resources:
- [skimage-archive / Outreachy proposal on transform module and thin-plate splines](https://github.com/scikit-image/skimage-archive/blob/3ffb87b3c911e2db624e8f407ee0a46fb48893ff/internships/Outreachy_2023-05/Project_TPS_proposal.md)
## Roadmap
*This roadmap is intended as a living document and a guideline. Tasks themselves and their position in the timeline are intended to change depending on progress and new problems.*
### Week 1 (May 29 to Jun 04)
- [x] Integrate into the scikit-image community
- [x] Set up dev env
- [x] Get familiar with contribution workflow
### Week 2 (Jun 05 to Jun 11)
- [x] Plan development workflow for two interns working on the same function
- [x] Study resources and familarize with existing implementation on TPS warping
- Feature request: [2D image warping via thin-plate splines #2429 - github.com](https://github.com/scikit-image/scikit-image/issues/2429)
- Paper: [Bookstein, Fred L. "Principal warps: Thin-plate splines and the decomposition of deformations." IEEE Transactions on pattern analysis and machine intelligence 11.6 (1989): 567-585.](http://user.engineering.uiowa.edu/~aip/papers/bookstein-89.pdf)
- [Simple implementation from Zachary Pincus - github.com](https://github.com/zpincus/celltool/blob/master/celltool/numerics/image_warp.py)
- [image.sc thread](https://forum.image.sc/t/equivalent-for-matlabs-piecewiselineartransformation2d/51035/4) discussing related transforms and Zachary's implementation
### Week 3 (Jun 12 to Jun 18)
- [x] Establish the project timeline with mentors (weekly meetings, goals, reports, etc.)
- [x] First pull request with draft for new TPS warping function, e.g. based on [Simple implementation from Zachary Pincus - github.com](https://github.com/zpincus/celltool/blob/master/celltool/numerics/image_warp.py)
- [x] Play around with examples using the implementation:
- Plot in- and ouptut, what impact do the arguments have
### Week 4 (Jun 19 to Jun 25)
- [x] Try to add "temporary" docstrings to `_calculate_f`, `_make_warp`, `_make_L_matrix`, etc.
### Week 5 (Jun 26 to Jul 02)
- [x] Update existing implementation to API goal (at the time)
- ~~e.g. using a Transform class~~
- [x] Complete docstrings including basic examples
### Week 6 (Jul 03 to Jul 09)
- [ ] Smaller tasks:
- [ ] Check coordinate definition in `scipy..ndimage.map_coordinates`, is the center of a pixel at 0 or at 0.5?
- [ ] `tps_transform` as a transform class
- [ ] Add simple unit tests that emulate basic geometric transformations with two or three point constraints (from W5)
- [ ] translation
- [ ] resizing
- [ ] rotation
- [ ] Expand test suite
- [ ] Edge cases
- [ ] Error handling and raising
### Week 7 (Jul 10 to Jul 16)
- [ ] *Mid-intership break*
### Week 8 (Jul 17 to Jul 23)
- [ ] Profile current implementation
- [ ] Discuss & plan options to speed up implementation
### Week 9 (Jul 24 to Jul 30)
- [ ] Complete test suite
### Week 10 (Jul 31 to Aug 06)
- [ ] Start gallery example demonstrating the new TPS warping
### Week 11 (Aug 07 to Aug 13)
- [ ] Iterate...?
### Week 12 (Aug 14 to Aug 20)
- [ ] Iterate...?
### Week 13 (Aug 21 to Aug 27)
- [ ] Complete and evaluate project
- [ ] Document journey as an intern (blog posts, etc.)