Skip to content

Commit 4f06c0f

Browse files
committed
Changes:
1. Edits in agg_recursion.
1 parent 6c40a0b commit 4f06c0f

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

frame_2D_alg/vectorize_edge_blob/agg_recursion.py

+15-7
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def cluster_eval(frame, N_, fd):
2626
cross-comp converted edges, then GGs, GGGs, etc, interlaced with exemplar selection: '''
2727
iN_ = []
2828
for N in frame.subG_:
29-
iN_ += [N] if N.derH.Et[0] < ave * N.derH.Et[2] else N.subG_ # eval to unpack top N
29+
iN_ += [N] if N.derH.Et[0] < ave * N.derH.Et[2] else N.subG_ # eval to unpack top N (if we unpack N.subG_, their rim may not empty and will be used again in der+ fork later )
3030

3131
N_,L_,(m,d,mr,dr) = comp_node_(iN_) # cross-comp exemplars, extrapolate to exemplar.Rim?
3232
if m > ave * mr:
@@ -156,15 +156,16 @@ def prune_overlap(N_): # select Ns with M > ave * Mr
156156
N.M -= _m # Rim is exclusive, vs N.Mr+=1?
157157
for _ref in copy(_N.Rim):
158158
if _ref[0] is N: # reciprocal to ref
159-
_N.Rim.remove(ref); N.M-=_m; break
159+
_N.Rim.remove(_ref); _N.M-=_m; break # should be removing _ref here because ref is in N.rim instead of _N.rim
160160
if N.M > ave:
161161
if N.M > ave*10:
162-
centroid_cluster(N) # refine N.Rim
163-
exemplar_ += [N]
162+
centroid_cluster(N, N_) # refine N.Rim
163+
if N.Rim: # N.Rim might be empty after the pruning
164+
exemplar_ += [N]
164165

165166
return exemplar_
166167

167-
def centroid_cluster(N):
168+
def centroid_cluster(N, N_):
168169
_Rim,_perim,_M = N.Rim, N.perim, N.M
169170

170171
dM = ave + 1 # refine Rim to convergence:
@@ -186,9 +187,16 @@ def centroid_cluster(N):
186187
fRim = 1; break
187188
if fRim: # not in exclusive stronger _N.Rim
188189
Rim.add(ref); M += m
189-
dM = M - _M
190-
_node_,_peri_,_M = Rim, perim, M
190+
# remove ref with _N in all other Ns
191+
for __N in N_:
192+
if __N not in [N, _N]:
193+
for __ref in copy(__N.Rim):
194+
if __ref[0] is _N:
195+
__N.Rim.remove(__ref)
196+
__N.M -= __ref[1]
191197

198+
dM = M - _M
199+
_node_,_perim,_M = Rim, perim, M
192200
N.Rim, N.perim, N.M = list(Rim),list(perim), M # final cluster
193201

194202
N_ = frame.subG_ # should be complemented graphs: m-type core + d-type contour

frame_2D_alg/vectorize_edge_blob/trace_edge.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ def vectorize_root(frame):
217217
# init for agg+:
218218
if not hasattr(frame, 'derH'):
219219
frame.derH = CH(root=frame); frame.root = None; frame.subG_ = []
220-
Y,X,_,_,_,_ = blob.latuple; P_ = blob.P_; lat = np.sum([P.latuple for P in P_])
220+
Y,X,_,_,_,_ = blob.latuple; P_ = blob.P_; lat = np.sum([P.latuple for P in P_],axis=0) # prevent merging of summed value
221221
edge = CG(root_=[frame], node_=blob.node_, latuple=lat, box=[np.inf,np.inf,0,0], yx=[Y,X], n=0)
222222
G_ = []
223223
for N in edge.node_: # no comp node_, link_ | PPd_ for now
@@ -227,6 +227,7 @@ def vectorize_root(frame):
227227
PP = CG(fd=0, root_=[root_], node_=P_,link_=link_,mdLay=np.array([md_,Et,n],dtype=object),latuple=lat, box=box,yx=[y,x],n=n)
228228
y0,x0,yn,xn = box
229229
PP.aRad = np.hypot(*np.subtract(PP.yx,(yn,xn)))
230+
edge.n += PP.n; edge.box = extend_box(edge.box, PP.box) # we need n and box in edge (for agg_cluster later)
230231
G_ += [PP]
231232
if len(G_) > ave_L:
232233
edge.subG_ = G_

0 commit comments

Comments
 (0)