.. note::
    :class: sphx-glr-download-link-note

    Click :ref:`here <sphx_glr_download_auto_examples_edges_plot_ridge_filter.py>` to download the full example code
.. rst-class:: sphx-glr-example-title

.. _sphx_glr_auto_examples_edges_plot_ridge_filter.py:


===============
Ridge operators
===============

Ridge filters can be used to detect ridge-like structures, such as neurites
[1]_, tubes [2]_, vessels [3]_, wrinkles [4]_ or rivers.

Different ridge filters may be suited for detecting different structures,
e.g., depending on contrast or noise level.

The present class of ridge filters relies on the eigenvalues of
the Hessian matrix of image intensities to detect ridge structures where the
intensity changes perpendicular but not along the structure.

Note that, due to edge effects, results for Meijering and Frangi filters
are cropped by 4 pixels on each edge to get a proper rendering.

References
----------

.. [1] Meijering, E., Jacob, M., Sarria, J. C., Steiner, P., Hirling, H.,
       Unser, M. (2004). Design and validation of a tool for neurite tracing
       and analysis in fluorescence microscopy images. Cytometry Part A, 58(2),
       167-176.
       :DOI:`10.1002/cyto.a.20022`

.. [2] Sato, Y., Nakajima, S., Shiraga, N., Atsumi, H., Yoshida, S.,
       Koller, T., ..., Kikinis, R. (1998). Three-dimensional multi-scale line
       filter for segmentation and visualization of curvilinear structures in
       medical images. Medical image analysis, 2(2), 143-168.
       :DOI:`10.1016/S1361-8415(98)80009-1`

.. [3] Frangi, A. F., Niessen, W. J., Vincken, K. L., & Viergever, M. A. (1998,
       October). Multiscale vessel enhancement filtering. In International
       Conference on Medical Image Computing and Computer-Assisted Intervention
       (pp. 130-137). Springer Berlin Heidelberg.
       :DOI:`10.1007/BFb0056195`

.. [4] Ng, C. C., Yap, M. H., Costen, N., & Li, B. (2014, November). Automatic
       wrinkle detection using hybrid Hessian filter. In Asian Conference on
       Computer Vision (pp. 609-622). Springer International Publishing.
       :DOI:`10.1007/978-3-319-16811-1_40`




.. code-block:: pytb

    Traceback (most recent call last):
      File "/build/skimage-Lp2Zl4/skimage-0.16.2/doc/examples/edges/plot_ridge_filter.py", line 1
        ===============
        ^
    SyntaxError: invalid syntax





.. code-block:: python

    ===============
    Ridge operators
    ===============

    Ridge filters can be used to detect ridge-like structures, such as neurites
    [1]_, tubes [2]_, vessels [3]_, wrinkles [4]_ or rivers.

    Different ridge filters may be suited for detecting different structures,
    e.g., depending on contrast or noise level.

    The present class of ridge filters relies on the eigenvalues of
    the Hessian matrix of image intensities to detect ridge structures where the
    intensity changes perpendicular but not along the structure.

    Note that, due to edge effects, results for Meijering and Frangi filters
    are cropped by 4 pixels on each edge to get a proper rendering.

    References
    ----------

    .. [1] Meijering, E., Jacob, M., Sarria, J. C., Steiner, P., Hirling, H.,
           Unser, M. (2004). Design and validation of a tool for neurite tracing
           and analysis in fluorescence microscopy images. Cytometry Part A, 58(2),
           167-176.
           :DOI:`10.1002/cyto.a.20022`

    .. [2] Sato, Y., Nakajima, S., Shiraga, N., Atsumi, H., Yoshida, S.,
           Koller, T., ..., Kikinis, R. (1998). Three-dimensional multi-scale line
           filter for segmentation and visualization of curvilinear structures in
           medical images. Medical image analysis, 2(2), 143-168.
           :DOI:`10.1016/S1361-8415(98)80009-1`

    .. [3] Frangi, A. F., Niessen, W. J., Vincken, K. L., & Viergever, M. A. (1998,
           October). Multiscale vessel enhancement filtering. In International
           Conference on Medical Image Computing and Computer-Assisted Intervention
           (pp. 130-137). Springer Berlin Heidelberg.
           :DOI:`10.1007/BFb0056195`

    .. [4] Ng, C. C., Yap, M. H., Costen, N., & Li, B. (2014, November). Automatic
           wrinkle detection using hybrid Hessian filter. In Asian Conference on
           Computer Vision (pp. 609-622). Springer International Publishing.
           :DOI:`10.1007/978-3-319-16811-1_40`
    """

    from skimage import data
    from skimage import color
    from skimage.filters import meijering, sato, frangi, hessian
    import matplotlib.pyplot as plt


    def identity(image, **kwargs):
        """Return the original image, ignoring any kwargs."""
        return image


    image = color.rgb2gray(data.retina())[300:700, 700:900]
    cmap = plt.cm.gray

    kwargs = {}
    kwargs['sigmas'] = [1]

    fig, axes = plt.subplots(2, 5)
    for i, black_ridges in enumerate([1, 0]):
        for j, func in enumerate([identity, meijering, sato, frangi, hessian]):
            kwargs['black_ridges'] = black_ridges
            result = func(image, **kwargs)
            if func in (meijering, frangi):
                # Crop by 4 pixels for rendering purpose.
                result = result[4:-4, 4:-4]
            axes[i, j].imshow(result, cmap=cmap, aspect='auto')
            if i == 0:
                axes[i, j].set_title(['Original\nimage', 'Meijering\nneuriteness',
                                      'Sato\ntubeness', 'Frangi\nvesselness',
                                      'Hessian\nvesselness'][j])
            if j == 0:
                axes[i, j].set_ylabel('black_ridges = ' + str(bool(black_ridges)))
            axes[i, j].set_xticks([])
            axes[i, j].set_yticks([])

    plt.tight_layout()
    plt.show()

**Total running time of the script:** ( 0 minutes  0.000 seconds)


.. _sphx_glr_download_auto_examples_edges_plot_ridge_filter.py:


.. only :: html

 .. container:: sphx-glr-footer
    :class: sphx-glr-footer-example



  .. container:: sphx-glr-download

     :download:`Download Python source code: plot_ridge_filter.py <plot_ridge_filter.py>`



  .. container:: sphx-glr-download

     :download:`Download Jupyter notebook: plot_ridge_filter.ipynb <plot_ridge_filter.ipynb>`


.. only:: html

 .. rst-class:: sphx-glr-signature

    `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.readthedocs.io>`_
