diplib
diplib copied to clipboard
DIPlib wishlist
Here I'll keep a list of functionality I'd like to add to DIPlib at some point:
- Filtering:
- A specialization of
dip::PercentileFilter
for 8-bit and 16-bit images could use the moving histogram technique. - Bilateral filters:
- Implement Paris and Durand (2006): http://people.csail.mit.edu/sparis/bf/ (PDF)
- Implement cross-bilateral filter
- Implement bilateral filters correctly for tensor images (how to define distance? Simple answer: weigh all tensor elements equally. Is there a reason to do it differently?)
- Tuan Pham's arch filter, and the various functions that use it.
- 3D orientation filter bank (Frank Faas).
- Higher order normalized convolution (we have 1st order derivatives).
- Additional steerable diffusion filters (we have
dip::PeronaMalikDiffusion
,dip::GaussianAnisotropicDiffusion
,dip::RobustAnisotropicDiffusion
,dip::CoherenceEnhancingDiffusion
).
- A specialization of
- Segmentation:
- 2D snakes (we have M-file code in DIPimage).
- Level-set segmentation.
- Graph-cut segmentation.
- Analysis:
- Radon transform for lines, Hough transform for lines.
- Scale-space analysis.
- Estimating locally affine transformations in 2D, 3D and nD.
- Other:
- 3D rotation: Implement using 4 skews as described by Chen and Kaufman (Graphical Models 62:308-322, 2000) -- it currently uses 9 skews. This method uses either 4 "2D slice shears" (what
dip::Skew
does), or 4 "2D beam shears" (which is more efficient in our case because each step only requires interpolation in 1D, not in 2D asdip::Skew
does). Note that it is also possible to rotate in 3D usingdip::AffineTransform
. - GPU support:
- Infrastructure to move and keep image data on the GPU.
- Implementing several functions as CUDA kernels.
- MPI support.
- ~PNG file reading & writing.~
- 3D rotation: Implement using 4 skews as described by Chen and Kaufman (Graphical Models 62:308-322, 2000) -- it currently uses 9 skews. This method uses either 4 "2D slice shears" (what
Some additional functionality we would like to see implemented:
- GPU support: implementing several functions as CUDA kernels
- MPI support
- deconvolution
- implementing in C++ the DIPimage functions (Matlab) created by Tuan Pham
- fast marching
- 3d-orientation filters
- higher order normalize convolution
- affine transformation in 2d, 3d and nd
We would also love to receive feedback on our contribution and implementation scheme. See: CONTRIBUTING.md and styleguide.
some additional things we discussed:
- Level sets
- Snakes
- Graph Cuts
- Faster Bilateral filtering
- Steerable diffusion filters
Thanks! I've updated the list at the top of the page.
Can I suggest loading PNG images here?
@fb39ca4 Yes, you can suggest it. Thanks! And if you can write the code it's even better! :)
@fb39ca4 if you enable Bio-Formats then you can read PNGs and over 100 other file formats. It is relatively trivial, just download the relevant JAR file.
Let me know if we need to provide some documentation on how to accomplish this.
PNG reading and writing implementation completed in 120c3c02d82d5946435285d56181e74bd7bd8679 and available since version 3.4.2.