我正在尝试实现一个从主动掩码分割派生的主动掩码代码,用于 hela 细胞图像的细胞体积计算和高尔基体分割,Srinivasa et al 2008。
我找到了一个允许我这样做的代码,但是,有一段代码给了我错误,我不知道为什么。这是代码的一部分:
def _converge(P, R, b, max_iters_converge=1000):
Pm = numpy.empty(P.shape, numpy.float32) # Pre-allocate: saves time
argmax = numpy.zeros_like(P)
maxval = numpy.zeros(P.shape, numpy.float32)
for i in range(max_iters_converge):
maxval *= 0
maxval -= 1e8
for m in range(int(P.max()) + 1):
Pm[:, :] = (P == m)
Pm = ndimage.gaussian_filter(Pm, b) + R[m]
# Pm=ndimage.convolve(Pm,numpy.ones((2*b+1,2*b+1)))+R[m]
argmax[maxval < Pm] = m
maxval = maxval * (argmax != m) + (argmax == m) * Pm
if (P == argmax).all(): break
P = argmax.copy()
mis = defaultdict(range(1, P.max() + 1).__iter__().__next__())
mis[0] = 0 # set 0 to 0, because it is special
for i in range(P.size):
P.flat[i] = mis[P.flat[i]]
return P
给我最大问题的领域是:
mis = defaultdict(range(1, P.max() + 1).__iter__().__next__())
最初代码是为 Python 2.4 编写的,但我做了一些更改,以便它可以在 Python 3.6 上运行,但我真的不明白defaultdict它的用途。
这是完整原始源文件的链接:active mask