code: def specificity(result, reference):
      
      result = numpy.atleast_1d(result.astype(numpy.bool))
      reference = numpy.atleast_1d(reference.astype(numpy.bool))
         
      tn = numpy.count_nonzero(~result & ~reference)
      fp = numpy.count_nonzero(result & ~reference)
  
      try:
          specificity = tn / float(tn + fp)
      except ZeroDivisionError:
          specificity = 0.0
      
      return specificity
docs: Specificity.
      
      Parameters
      ----------
      result : array_like
          Input data containing objects. Can be any type but will be converted
          into binary: background where 0, object everywhere else.
      reference : array_like
          Input data containing objects. Can be any type but will be converted
          into binary: background where 0, object everywhere else.
      
      Returns
      -------
      specificity : float
          The specificity between two binary datasets, here mostly binary objects in images,
          which denotes the fraction of correctly returned negatives. The
          specificity is not symmetric.
      
      See also
      --------
      :func:`sensitivity`
      
      Notes
      -----
      Not symmetric. The completment of the specificity is :func:`sensitivity`.
      High recall means that an algorithm returned most of the irrelevant results.
      
      References
      ----------
      .. [1] https://en.wikipedia.org/wiki/Sensitivity_and_specificity
      .. [2] http://en.wikipedia.org/wiki/Confusion_matrix#Table_of_confusion