%pylab inline --no-import-all
import skimage
import skimage.io
# skimage.morphology.label => skimage.measure.label
import skimage.morphology
import skimage.measure
import matplotlib.pyplot as plt
import numpy as np
Populating the interactive namespace from numpy and matplotlib
imrgb = skimage.io.imread('http://www.kky.zcu.cz/uploads/courses/zdo/lesson7/1.jpg')
imrgb = skimage.io.imread('objekty/label.jpg')
im = skimage.color.rgb2gray(imrgb) > 0.5
# v tomto případě má pozadí label 0
imlabel0 = skimage.measure.label(im)
# v tomto případě má pozadí label -1
imlabel1 = skimage.measure.label(im, background=0)
plt.subplot(131)
plt.title('orig')
plt.imshow(im, cmap='gray')
plt.subplot(132)
plt.title('label')
plt.imshow(imlabel0, cmap='gray')
plt.subplot(133)
plt.title('label\ndefined backgr.')
plt.imshow(imlabel1, cmap='gray')
<matplotlib.image.AxesImage at 0x22f39f00b70>
Následující příklad ukazuje vybrání zvolené oblasti
print("labels ", np.unique(imlabel1))
plt.subplot(121)
plt.title('Object 0')
plt.imshow(imlabel1==0, cmap='gray')
plt.subplot(122)
plt.title('Object 1')
plt.imshow(imlabel1==1, cmap='gray')
labels [0 1 2]
<matplotlib.image.AxesImage at 0x22f3a04e048>
Využijeme funkce regionprops.
print(np.unique(imlabel1))
props = skimage.measure.regionprops(imlabel1+1)
print("Centroid: ", props[1].centroid)
print("Area: ", props[1].area)
print("Euler: ", props[1].euler_number)
print("Perimeter: ", props[1].perimeter)
ci = props[1].convex_image
plt.imshow(ci)
plt.show()
[0 1 2] Centroid: (62.486293379994166, 84.67264508603091) Area: 6858 Euler: -1 Perimeter: 686.4823227814082
for i in range(len(props)):
print("Id: ", i)
print("Centroid: ", props[i].centroid)
print("Area: ", props[i].area)
print("Euler: ", props[i].euler_number)
print("")
Id: 0 Centroid: (76.83132073428277, 84.18519521308279) Area: 18467 Euler: -1 Id: 1 Centroid: (62.486293379994166, 84.67264508603091) Area: 6858 Euler: -1 Id: 2 Centroid: (113.5, 146.51309408341416) Area: 2062 Euler: 1
props = skimage.measure.regionprops(imlabel1 + 1, im)
props[1].mean_intensity
1.0
## stara implementace
# props0 = skimage.measure.regionprops(imlabel1==0)
# props = props0
# print "Centroid ", props[0].centroid
# print "Area ", props[0].area
# print "Euler ", props[0].euler_number
# #print "Centroid 1 ", props[1].centroid
# props1 = skimage.measure.regionprops(imlabel1==1)
# props = props1
# print "Centroid ", props[0].centroid
# print "Area ", props[0].area
# print "Euler ", props[0].euler_number
Obecné momenty
$$ M_{ij} = \sum_x \sum_y x^i, y^j I (x,y) $$Souřadnice centroidu $ \bar{x} = \frac{M_{10}}{M_{00}}$ $ \bar{y} = \frac{M_{01}}{M_{00}}$
$$ \mu_{pq} = \sum_x \sum_y (x-\bar{x})^p (y-\bar{y})^q f(x,y) $$kde $f(x,y)$ je digitální obraz
Sedm momentů nezávislých na posunutí, změnu měřítka a rotaci. Prvních šest je nezávislých na zrcadlení. Poslední při zrcadlení mění znaménko. $$ I_1 = \eta_{20} + \eta_{02}$$ $$ I_2 = (\eta_{20} - \eta_{02})^2 + 4\eta_{11}^2$$ $$ I_3 = (\eta_{30} - 3\eta_{12})^2 + (3\eta_{21} - \eta_{03})^2$$ $$ I_4 = (\eta_{30} + \eta_{12})^2 + (\eta_{21} + \eta_{03})^2 $$ $$ I_5 = (\eta_{30} - 3\eta_{12}) (\eta_{30} + \eta_{12})\left[ (\eta_{30} + \eta_{12})^2 - 3 (\eta_{21} + \eta_{03})^2\right] + (3 \eta_{21} - \eta_{03}) (\eta_{21} + \eta_{03})\left[ 3(\eta_{30} + \eta_{12})^2 - (\eta_{21} + \eta_{03})^2\right]$$ $$ I_6 = (\eta_{20} - \eta_{02})[(\eta_{30} + \eta_{12})^2 - (\eta_{21} + \eta_{03})^2] + 4\eta_{11}(\eta_{30} + \eta_{12})(\eta_{21} + \eta_{03})$$ $$ I_7 = (3 \eta_{21} - \eta_{03})(\eta_{30} + \eta_{12})\left[(\eta_{30} + \eta_{12})^2 - 3(\eta_{21} + \eta_{03})^2\right] - (\eta_{30} - 3\eta_{12})(\eta_{21} + \eta_{03})\left[3(\eta_{30} + \eta_{12})^2 - (\eta_{21} + \eta_{03})^2\right]$$ $$ $$ Huovy momenty na wiky