""" ========================= Measure region properties ========================= This example shows how to measure properties of labelled image regions. """ import math import matplotlib.pyplot as plt import numpy as np from skimage.util import img_as_ubyte from skimage.draw import ellipse from skimage.morphology import label from skimage.measure import regionprops from skimage.transform import rotate image = np.zeros((600, 600)) rr, cc = ellipse(300, 350, 100, 220) image[rr,cc] = 1 image = rotate(image, angle=15, order=0) label_img = label(image) props = regionprops(label_img, [ 'BoundingBox', 'Centroid', 'Orientation', 'MajorAxisLength', 'MinorAxisLength' ]) plt.imshow(image) for prop in props: x0 = prop['Centroid'][1] y0 = prop['Centroid'][0] x1 = x0 + math.cos(prop['Orientation']) * 0.5 * prop['MajorAxisLength'] y1 = y0 - math.sin(prop['Orientation']) * 0.5 * prop['MajorAxisLength'] x2 = x0 - math.sin(prop['Orientation']) * 0.5 * prop['MinorAxisLength'] y2 = y0 - math.cos(prop['Orientation']) * 0.5 * prop['MinorAxisLength'] plt.plot((x0, x1), (y0, y1), '-r', linewidth=2.5) plt.plot((x0, x2), (y0, y2), '-r', linewidth=2.5) plt.plot(x0, y0, '.g', markersize=15) minr, minc, maxr, maxc = prop['BoundingBox'] bx = (minc, maxc, maxc, minc, minc) by = (minr, minr, maxr, maxr, minr) plt.plot(bx, by, '-b', linewidth=2.5) plt.gray() plt.axis((0, 600, 600, 0)) plt.show()