
    9i7                      |    S SK rS SKJr  SSKJr  SSKJrJrJ	r	  / SQr
S rS rS	S
.S jrSS.S jrS rSS.S jrg)    N)entropy   )dtype_range)_supported_float_typecheck_shape_equalitywarn)mean_squared_errornormalized_root_msepeak_signal_noise_rationormalized_mutual_informationc                     [        U R                  UR                  45      n[        R                  " XS9n [        R                  " XS9nX4$ )zC
Promote im1, im2 to nearest appropriate floating point precision.
dtype)r   r   npasarray)image0image1
float_types      ^/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/skimage/metrics/simple_metrics.py
_as_floatsr      s?     'fll'CDJZZ1FZZ1F>    c                     [        X5        [        X5      u  p[        R                  " X-
  S-  [        R                  S9$ )az  
Compute the mean-squared error between two images.

Parameters
----------
image0, image1 : ndarray
    Images.  Any dimensionality, must have same shape.

Returns
-------
mse : float
    The mean-squared error (MSE) metric.

Notes
-----
.. versionchanged:: 0.16
    This function was renamed from ``skimage.measure.compare_mse`` to
    ``skimage.metrics.mean_squared_error``.

r   r   )r   r   r   meanfloat64)r   r   s     r   r	   r	      s4    * (/NF77FO)<<r   	euclidean)normalizationc                   [        X5        [        X5      u  pUR                  5       nUS:X  a:  [        R                  " [        R
                  " X -  [        R                  S95      nOJUS:X  a"  U R                  5       U R                  5       -
  nO"US:X  a  U R                  5       nO[        S5      e[        R                  " [        X5      5      U-  $ )a  
Compute the normalized root mean-squared error (NRMSE) between two
images.

Parameters
----------
image_true : ndarray
    Ground-truth image, same shape as im_test.
image_test : ndarray
    Test image.
normalization : {'euclidean', 'min-max', 'mean'}, optional
    Controls the normalization method to use in the denominator of the
    NRMSE.  There is no standard method of normalization across the
    literature [1]_.  The methods available here are as follows:

    - 'euclidean' : normalize by the averaged Euclidean norm of
      ``im_true``::

          NRMSE = RMSE * sqrt(N) / || im_true ||

      where || . || denotes the Frobenius norm and ``N = im_true.size``.
      This result is equivalent to::

          NRMSE = || im_true - im_test || / || im_true ||.

    - 'min-max'   : normalize by the intensity range of ``im_true``.
    - 'mean'      : normalize by the mean of ``im_true``

Returns
-------
nrmse : float
    The NRMSE metric.

Notes
-----
.. versionchanged:: 0.16
    This function was renamed from ``skimage.measure.compare_nrmse`` to
    ``skimage.metrics.normalized_root_mse``.

References
----------
.. [1] https://en.wikipedia.org/wiki/Root-mean-square_deviation

r   r   zmin-maxr   zUnsupported norm_type)r   r   lowerr   sqrtr   r   maxmin
ValueErrorr	   )
image_true
image_testr   denoms       r   r
   r
   3   s    Z 0'
?J "'')M#!8LM	)	# :>>#33	&	 !01177%j=>FFr   )
data_rangec                   [        X5        Uc  U R                  UR                  :w  a  [        S5        [        U R                  R                     u  p4[
        R                  " U 5      [
        R                  " U 5      peXd:  d  XS:  a  [        S5      eUS:  a  UnOXC-
  n[        X5      u  p[        X5      n[        U5      nS[
        R                  " US-  U-  5      -  $ )a  
Compute the peak signal to noise ratio (PSNR) for an image.

Parameters
----------
image_true : ndarray
    Ground-truth image, same shape as im_test.
image_test : ndarray
    Test image.
data_range : int, optional
    The data range of the input image (distance between minimum and
    maximum possible values).  By default, this is estimated from the image
    data-type.

Returns
-------
psnr : float
    The PSNR metric.

Notes
-----
.. versionchanged:: 0.16
    This function was renamed from ``skimage.measure.compare_psnr`` to
    ``skimage.metrics.peak_signal_noise_ratio``.

References
----------
.. [1] https://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio

zFInputs have mismatched dtype.  Setting data_range based on image_true.zuimage_true has intensity values outside the range expected for its data type. Please manually specify the data_range.r   
   r   )r   r   r   r   typer   r!   r    r"   r   r	   floatlog10)r#   r$   r&   dmindmaxtrue_mintrue_maxerrs           r   r   r   p   s    > 0z/// !!1!1!6!67
VVJ/
1C(?hoM  q=JJ'
?J
Z
4Cz"J*a-3.///r   c                     [        S [        XR                  5       5       5      (       d  [        SU SU R                   S35      e[        XR                  5       VVs/ s H  u  p#SX#-
  4PM     nnn[        R
                  " XSSS9$ s  snnf )a&  Pad an array with trailing zeros to a given target shape.

Parameters
----------
arr : ndarray
    The input array.
shape : tuple
    The target shape.

Returns
-------
padded : ndarray
    The padded array.

Examples
--------
>>> _pad_to(np.ones((1, 1), dtype=int), (1, 3))
array([[1, 0, 0]])
c              3   .   #    U  H  u  pX:  v   M     g 7f)N ).0sis      r   	<genexpr>_pad_to.<locals>.<genexpr>   s     8"7$!qv"7s   zTarget shape z# cannot be smaller than inputshape z along any axis.r   constant)	pad_widthmodeconstant_values)allzipshaper"   r   pad)arrr?   r5   r6   paddings        r   _pad_torC      s    ( 8#eYY"7888E7 #YYK/1
 	
 '*%&;<&;da15z&;G<66#z1MM =s   B
d   )binsc                   U R                   UR                   :w  a&  [        SU R                    SUR                    S35      eU R                  UR                  :w  aB  [        R                  " U R                  UR                  5      n[        X5      n[        X5      nOXpT[        R                  " [        R                  " US5      [        R                  " US5      /USS9u  pg[        [        R                  " USS95      n[        [        R                  " US	S95      n	[        [        R                  " US5      5      n
X-   U
-  $ )
a0  Compute the normalized mutual information (NMI).

The normalized mutual information of :math:`A` and :math:`B` is given by::

.. math::

    Y(A, B) = \frac{H(A) + H(B)}{H(A, B)}

where :math:`H(X) := - \sum_{x \in X}{x \log x}` is the entropy.

It was proposed to be useful in registering images by Colin Studholme and
colleagues [1]_. It ranges from 1 (perfectly uncorrelated image values)
to 2 (perfectly correlated image values, whether positively or negatively).

Parameters
----------
image0, image1 : ndarray
    Images to be compared. The two input images must have the same number
    of dimensions.
bins : int or sequence of int, optional
    The number of bins along each axis of the joint histogram.

Returns
-------
nmi : float
    The normalized mutual information between the two arrays, computed at
    the granularity given by ``bins``. Higher NMI implies more similar
    input images.

Raises
------
ValueError
    If the images don't have the same number of dimensions.

Notes
-----
If the two input images are not the same shape, the smaller image is padded
with zeros.

References
----------
.. [1] C. Studholme, D.L.G. Hill, & D.J. Hawkes (1999). An overlap
       invariant entropy measure of 3D medical image alignment.
       Pattern Recognition 32(1):71-86
       :DOI:`10.1016/S0031-3203(98)00091-0`
z6NMI requires images of same number of dimensions. Got zD for `image0` and zD for `image1`.T)rE   densityr   )axis   )
ndimr"   r?   r   maximumrC   histogramddreshaper   sum)r   r   rE   	max_shapepadded0padded1hist	bin_edgesH0H1H01s              r   r   r      s   ^ {{fkk!;;-2{{m?,
 	

 ||v||#JJv||V\\:	&,&,!nn	GR	 "**Wb"9:OD 
1%	&B	1%	&B
"**T2&
'CGs?r   )numpyr   scipy.statsr   
util.dtyper   _shared.utilsr   r   r   __all__r   r	   r
   r   rC   r   r3   r   r   <module>r]      sQ      $ M M=4 BM :Gz CG 80vN: ;> Fr   