Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
iperov
GitHub Repository: iperov/deepfacelab
Path: blob/master/core/imagelib/sd/calc.py
628 views
1
import numpy as np
2
import numpy.linalg as npla
3
4
def dist_to_edges(pts, pt, is_closed=False):
5
"""
6
returns array of dist from pt to edge and projection pt to edges
7
"""
8
if is_closed:
9
a = pts
10
b = np.concatenate( (pts[1:,:], pts[0:1,:]), axis=0 )
11
else:
12
a = pts[:-1,:]
13
b = pts[1:,:]
14
15
pa = pt-a
16
ba = b-a
17
18
div = np.einsum('ij,ij->i', ba, ba)
19
div[div==0]=1
20
h = np.clip( np.einsum('ij,ij->i', pa, ba) / div, 0, 1 )
21
22
x = npla.norm ( pa - ba*h[...,None], axis=1 )
23
24
return x, a+ba*h[...,None]
25
26
27