Source code for openalea.phenomenal.image.skeletonize

# -*- python -*-
#
#       Copyright INRIA - CIRAD - INRA
#
#       Distributed under the Cecill-C License.
#       See accompanying file LICENSE.txt or copy at
#           http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html
#
#       OpenAlea WebSite : http://openalea.gforge.inria.fr
#
# ==============================================================================
from __future__ import division, print_function

import cv2
import skimage.morphology
import numpy
# ==============================================================================


[docs]def skeletonize_thinning(image): """ Thinning is used to reduce each connected component in a binary image to a single-pixel wide skeleton :param image: binary image with 0 or 255 :return: skeleton of a binary image. """ img = image.copy().astype(numpy.uint8) img[img == 255] = 1 skeleton = skimage.morphology.skeletonize(img) skeleton = skeleton.astype(numpy.uint8) skeleton[skeleton > 0] = 255 return skeleton
[docs]def skeletonize_erode_dilate(image): """ Erode and dilate image to build skeleton :param image: binary image with 0 or 255 :return: skeleton of a binary image. """ img = image.copy().astype(numpy.uint8) skeleton = numpy.zeros(img.shape, numpy.uint8) element = cv2.getStructuringElement(cv2.MORPH_CROSS, (3, 3)) while cv2.countNonZero(img) > 0: eroded = cv2.erode(img, element) temp = cv2.dilate(eroded, element) temp = cv2.subtract(img, temp) skeleton = cv2.bitwise_or(skeleton, temp) img = eroded.copy() return skeleton