diplib icon indicating copy to clipboard operation
diplib copied to clipboard

DIPlib wishlist

Open crisluengo opened this issue 5 years ago • 7 comments

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).
  • 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 as dip::Skew does). Note that it is also possible to rotate in 3D using dip::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.~

crisluengo avatar Feb 14 '19 18:02 crisluengo

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.

ronligt avatar Mar 11 '20 12:03 ronligt

some additional things we discussed:

  • Level sets
  • Snakes
  • Graph Cuts
  • Faster Bilateral filtering
  • Steerable diffusion filters

berndrieger avatar Mar 11 '20 14:03 berndrieger

Thanks! I've updated the list at the top of the page.

crisluengo avatar Mar 11 '20 14:03 crisluengo

Can I suggest loading PNG images here?

fb39ca4 avatar Mar 12 '20 06:03 fb39ca4

@fb39ca4 Yes, you can suggest it. Thanks! And if you can write the code it's even better! :)

crisluengo avatar Mar 12 '20 19:03 crisluengo

@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.

crisluengo avatar Mar 12 '20 20:03 crisluengo

PNG reading and writing implementation completed in 120c3c02d82d5946435285d56181e74bd7bd8679 and available since version 3.4.2.

crisluengo avatar Apr 12 '24 15:04 crisluengo