 ..  role:: strike

How to contribute to ``scikits.image``
======================================

Developing Open Source is great fun!  Join us on the `scikits-image mailing
list <http://groups.google.com/group/scikits-image>`_ and tell us which of the
following challenges you'd like to solve.

* Mentoring is available for those new to scientific programming in Python.
* The technical detail of the `development process`_ is given below.
* :doc:`How to use GitHub <gitwash/index>` when developing scikits.image

.. contents::
   :local:

Tasks
-----

:doc:`gsoc2011`

:doc:`coverage_table`

Infrastructure
--------------
- :strike:`Implement a new backend system so that we may start including
  PyOpenCL-based algorithms`

Adapt existing code for use
```````````````````````````
These snippets and packages have already been written.  Some need to be
modified to work as part of the scikit, others may be lacking in documentation
or tests.

   * :strike:`Connected components`
   * `Grey-level co-occurrence matrices <http://mentat.za.net/hg>`_
   * Marching squares
   * Nadav's bilateral filtering (first compare against CellProfile's code)
   * 2D iso-contour finding (sub-pixel precision) [ask Zach Pincus]
   * 2D image warping via thin-plate splines [ask Zach Pincus]

Merge code provided by `CellProfiler <http://www.cellprofiler.org>`_ team
`````````````````````````````````````````````````````````````````````````
* Canny filter (Canny, J., *A Computational Approach To Edge Detection*,
  IEEE Trans. Pattern Analysis and Machine Intelligence, 8:679-714, 1986)
* Prewitt filter - convolution with ``[[1,1,1], [0,0,0], [-1,-1,-1]]`` to
  detect edges
* :strike:`Sobel filter - convolution with` ``[[1,2,1], [0,0,0], [-1,-2,-1]]`` :strike:`to detect edges`
* Roberts filter - convolution with diagonal and anti-diagonal
  kernels to detect edges
* Bilateral filter
  (http://groups.csail.mit.edu/graphics/bilagrid/bilagrid_web.pdf)
  - edge detection using both spatial and intensity information
* Convex hulls of objects in a labels matrix
* Minimum enclosing circles of objects in a labels matrix
* Map-coloring of a labels matrix - assign each label a color so that
  all adjacent labels have different colors
* Skeletonize, spur removal, thinning, thickening, and other morphological
  operations on binary images, framework for creating arbitrary morphological
  operations using a 3x3 grid.
* Skeletonize objects in a labels matrix

Their SVN repository is read-accessible at

- https://svn.broadinstitute.org/CellProfiler/trunk/CellProfiler/cellprofiler

The files for the above algorithms are

- https://svn.broadinstitute.org/CellProfiler/trunk/CellProfiler/cellprofiler/cpmath/cpmorphology.py
- https://svn.broadinstitute.org/CellProfiler/trunk/CellProfiler/cellprofiler/cpmath/filter.py

There are test suites for the files at

- https://svn.broadinstitute.org/CellProfiler/trunk/CellProfiler/cellprofiler/cpmath/tests/test_cpmorphology.py
- https://svn.broadinstitute.org/CellProfiler/trunk/CellProfiler/cellprofiler/cpmath/tests/test_filter.py

Quoting a message from Lee Kamentsky to Stefan van der Walt sent on
5 August 2009::

  We're part of the Broad Institute which is non-profit. We would be happy
  to include our algorithm code in SciPy under the BSD license since that is
  more appropriate for a library that might be integrated into a
  commercial product whereas CellProfiler needs the more stringent
  protection of GPL as an application.

In 2010, Vebjorn Ljosa officially released parts of the code under a
BSD license (:doc:`cell_profiler` | `original message
<http://groups.google.com/group/scikits-image/browse_thread/thread/c4f8fc584bfd839d>`_).

Thanks to Lee Kamentsky, Thouis Jones and Anne Carpenter and their colleagues
who contributed.

Rework linear filters
`````````````````````
* Fast, SSE2 convolution (high priority)
* Should take kernel or function for parameter (currently only takes function)
* Kernel shape should be specifiable (currently defaults to image shape)
* Due to the above, the tests run unnecessarily slowly

io
``
* Update ``qt_plugin.py`` and other plugins to view collections.
* Rewrite GTK backend using GObject Introspection for Py3K compatibility.
* Add medical / biological and GIS image format plugins.
* Add DICOM plugin for `GDCM <http://sourceforge.net/apps/mediawiki/gdcm>`__.

docs
````
* Write topics for the `user guide
  <http://scikits-image.org/docs/dev/user_guide.html>`_:

  - Introduction to I/O and image processing with examples

* :strike:`Build docs outside source directory`
* Integrate BiBTeX plugin into Sphinx build
* :strike:`Create a kick-ass website`

Implement Algorithms
````````````````````
- Histograms of oriented gradients
- Fast radon transform
- Graph cut segmentation
- Probabilistic Hough transform

Drawing
```````
- Wu's algorithm for lines and circles

