Source code for cell_analysis_tools.metrics.dice

import numpy as np

from .helper import _validate_array_and_make_bool


# https://gist.github.com/brunodoamaral/e130b4e97aa4ebc468225b7ce39b3137
[docs] def dice(im1, im2, empty_score=1.0): """ Computes the dice coefficient/F1 score, a measure of average similarity. Parameters ---------- im1 : array-like, bool Any array of arbitrary size. If not boolean, will be converted. im2 : array-like, bool Any other array of identical size. If not boolean, will be converted. empty-score : int Any other array of identical size. If not boolean, will be converted. Returns ------- float Dice coefficient as a float on range [0,1]. \n Maximum similarity = 1 \n No similarity = 0 \n Both are empty (sum eq to zero) = empty_score Note ----- The order of inputs for `dice` is irrelevant. The result will be identical if `im1` and `im2` are switched. """ im1 = _validate_array_and_make_bool(im1) im2 = _validate_array_and_make_bool(im2) if im1.shape != im2.shape: raise ValueError("Shape mismatch: im1 and im2 must have the same shape.") im_sum = im1.sum() + im2.sum() if im_sum == 0: # no true values in either image print("warning: no true values in either array, returning empty_score=1") return empty_score # Compute Dice coefficient intersection = np.logical_and(im1, im2) return 2.0 * intersection.sum() / im_sum