def score_zernike(zf, radii, labels, indexes=None): """Score the output of construct_zernike_polynomials zf - the output of construct_zernike_polynomials which is I x J x K where K is the number of zernike polynomials computed radii - a vector of the radius of each of N labeled objects labels - a label matrix outputs a N x K matrix of the scores of each of the Zernikes for each labeled object. """ if indexes == None: indexes = np.arange(1, np.max(labels) + 1, dtype=np.int32) else: indexes = np.array(indexes, dtype=np.int32) radii = np.array(radii) k = zf.shape[2] n = np.product(radii.shape) score = np.zeros((n, k)) if n == 0: return score areas = radii**2 * np.pi for ki in range(k): zfk = zf[:, :, ki] real_score = scipy.ndimage.sum(zfk.real, labels, indexes) real_score = fixup_scipy_ndimage_result(real_score) imag_score = scipy.ndimage.sum(zfk.imag, labels, indexes) imag_score = fixup_scipy_ndimage_result(imag_score) one_score = np.sqrt(real_score**2 + imag_score**2) / areas score[:, ki] = one_score return score
def score_zernike(zf, radii, labels, indexes=None): """Score the output of construct_zernike_polynomials zf - the output of construct_zernike_polynomials which is I x J x K where K is the number of zernike polynomials computed radii - a vector of the radius of each of N labeled objects labels - a label matrix outputs a N x K matrix of the scores of each of the Zernikes for each labeled object. """ if indexes is None: indexes = np.arange(1,np.max(labels)+1,dtype=np.int32) else: indexes = np.array(indexes, dtype=np.int32) radii = np.array(radii) k = zf.shape[2] n = np.product(radii.shape) score = np.zeros((n,k)) if n == 0: return score areas = radii**2 * np.pi for ki in range(k): zfk=zf[:,:,ki] real_score = scipy.ndimage.sum(zfk.real,labels,indexes) real_score = fixup_scipy_ndimage_result(real_score) imag_score = scipy.ndimage.sum(zfk.imag,labels,indexes) imag_score = fixup_scipy_ndimage_result(imag_score) one_score = np.sqrt(real_score**2+imag_score**2) / areas score[:,ki] = one_score return score