-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy patheuler_curve.py
37 lines (32 loc) · 1.09 KB
/
euler_curve.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
Created on Mon Mar 5 10:01:43 2018
@author: jorge
"""
# Generate Euler characteristic curve with a threshold value, t, taking data
# from a 3-dimensional array, X, where 3rd dimension is number of simulations.
from skimage.measure import regionprops, label
import numpy as np
def euler_curve(X, nsteps):
v0 = np.amin(X)
v1 = np.amax(X)
t = np.linspace(v0, v1, nsteps)
eulchar = np.zeros([np.size(X, 2), len(t)])
for i in range(len(t)):
for j in range(np.size(X, 2)):
velbin = X[:,:,j] < t[i]
velbin = 1*velbin
props = regionprops(velbin)
if props:
eulchar[j,i] = euler_number(props)
else:
eulchar[j,i] = 0.0
return eulchar
def euler_number(props):
euler_array = props[0].filled_image != props[0].image
_, numholes = label(euler_array, neighbors=8, return_num=True,
background=0)
_, numobj = label(1*props[0].image, neighbors=8, return_num=True,
background=0)
return numobj - numholes