
\c           @   s  d  d l  Z  d  d l Z d  d l Z d  d l m Z d  d l m Z d  d l m Z d  d l m	 Z	 d  d l
 m Z d  d l m Z d  d l m Z d  d	 l m Z m Z m Z d
   Z d   Z e j j d  e j   Z e j e  Z e j e d d  Z d   Z d   Z d   Z d   Z  d   Z! e j" d d d d g f d d d g f dA d d g f g  d    Z# e j" d d d d g f d d  d g f dB d d g f g  d     Z$ d!   Z% dD Z& dF Z' dH Z( dJ Z) d&   Z* d'   Z+ d(   Z, d)   Z- d*   Z. d+   Z/ d,   Z0 d-   Z1 d.   Z2 d/   Z3 d0   Z4 d1   Z5 d2   Z6 d3   Z7 d4   Z8 d5   Z9 d6   Z: d7   Z; d8   Z< d9   Z= d:   Z> d;   Z? d<   Z@ d=   ZA d>   ZB d?   ZC d@   ZD d S(K   iN(   t   data(   t   exposure(   t   intensity_range(   t   rgb2gray(   t   dtype_range(   t   expected_warnings(   t   testing(   t   assert_array_equalt   assert_array_almost_equalt   assert_almost_equalc          C   s   t  j d d g d t  j }  t j |   \ } } t | t  j d d   | d d k sb t  | d d k sx t  t | d d !d  d  S(   Nii   t   dtypei   i    i   (   t   npt   arrayt   int8R   t	   histogramR   t   aranget   AssertionError(   t   imt   frequenciest   bin_centers(    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_negative_overflow   s    c          C   s   t  j d d g d t  j }  t j |   \ } } t | t  j d d   | d d k sb t  | d d k sx t  t | d d !d  d  S(   NiiR
   i    i   (   R   R   R   R   R   R   R   R   (   R   R   R   (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_all_negative_image   s    i    g      @id   c          C   s;   t  j t  }  t  j t d d } t j j |  |  d S(   s)   Check integer bins used for uint8 images.t   nbinsi   N(   R   t   equalize_histt   test_img_intR   R   t   assert_allclose(   t   img_eq0t   img_eq1(    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_equalize_uint8_approx2   s    c          C   sW   t  d g   t j t  }  Wd  QXt j |   } t j |  \ } } t |  d  S(   Ns   precision loss(   R   t   skimaget   img_as_ubytet   test_imgR   R   t   cumulative_distributiont   check_cdf_slope(   t   imgt   img_eqt   cdft	   bin_edges(    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_equalize_ubyte9   s
    c          C   sA   t  j t  }  t j |   } t j |  \ } } t |  d  S(   N(   R   t   img_as_floatR   R   R   R    R!   (   R"   R#   R$   R%   (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_equalize_floatB   s    c          C   s   t  j t  }  t j t j  } d | d d  d d  f <t j |  d | } t j |   } t j |  \ } } t	 |  | | k j
   s t  d  S(   Ni   i2   i   i   t   mask(   R   R'   R   R   t   zerost   shapeR   R   R    R!   t   allR   (   R"   R)   t   img_mask_eqR#   R$   R%   (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_equalize_maskedJ   s    
c         C   s\   t  j d d t |    } t  j | |  d  \ } } d | k  oM d k  n sX t  d S(   s=   Slope of cdf which should equal 1 for an equalized histogram.i    i   g?g?N(   R   t   linspacet   lent   polyfitR   (   R$   t   norm_intensityt   slopet	   intercept(    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyR!   W   s    s   test_input,expectedt   imagei   R
   i   i
   i   c         C   sA   t  j d d g d t  j } t | d |  } t | |  d  S(   Ni    i   R
   t   range_values(   R   R   t   uint8R   R   (   t
   test_inputt   expectedR5   t   out(    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_intensity_range_uint8b   s    g?g?g333333?g?c         C   sA   t  j d d g d t  j } t | d |  } t | |  d  S(   Ng?g?R
   R6   (   R   R   t   float64R   R   (   R8   R9   R5   R:   (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_intensity_range_floatm   s    c          C   sG   t  j d d g d t  j }  t |  d d d t } t | d  d  S(	   Ng?g?R
   R6   t   clip_negativei    i   (   i    i   (   R   R   R<   R   t   TrueR   (   R5   R:   (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt"   test_intensity_range_clipped_floatx   s    i   i   i   i   c          C   sb   t  j d d d g d t  j }  t j |   } | j t  j k sH t  t | d d d g  d  S(   Ni3   if   i   R
   i    i   i   (   R   R   R7   R   t   rescale_intensityR
   R   R   (   R5   R:   (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_rescale_stretch   s    !c          C   sA   t  j d d d g  }  t j |   } t | d d d g  d  S(   Ng     I@g     Y@g      c@i    g      ?i   (   R   R   R   RA   R   (   R5   R:   (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_rescale_shrink   s    c          C   sG   t  j d d d g  }  t j |  d d
 } t | d d d	 g  d  S(   Ng     I@g     Y@g      c@t   in_rangei    i   g?g?g333333?(   i    i   (   R   R   R   RA   R   (   R5   R:   (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_rescale_in_range   s    c          C   sG   t  j d d d g  }  t j |  d d	 } t | d d d g  d  S(
   Ng     I@g     Y@g      c@RD   i    if   g      ?i   (   i    if   (   R   R   R   RA   R   (   R5   R:   (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_rescale_in_range_clip   s    c          C   sh   t  j d d d g d t  j }  t j |  d d } | j t  j k sN t  t | d d d g  d  S(	   Nii    i
   R
   t	   out_rangei   i?   (   i    i   (   R   R   R   R   RA   R
   R   R   (   R5   R:   (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_rescale_out_range   s    !c          C   sT   t  j d t t d g d t  j }  t j |  d d } t | d t t g  d  S(   Ni    id   R
   RD   t   uint10(   R   R   t
   uint10_maxt   uint16R   RA   R   t
   uint16_max(   R5   R:   (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_rescale_named_in_range   s    %c          C   sJ   t  j d t g d t  j }  t j |  d d } t | d t g  d  S(   Ni    R
   RG   RI   (   R   R   RL   RK   R   RA   R   RJ   (   R5   R:   (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_rescale_named_out_range   s    c          C   sJ   t  j d t g d t  j }  t j |  d d } t | d t g  d  S(   Ni    R
   RG   t   uint12(   R   R   RL   RK   R   RA   R   t
   uint12_max(   R5   R:   (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_rescale_uint12_limits   s    c          C   sJ   t  j d t g d t  j }  t j |  d d } t | d t g  d  S(   Ni    R
   RG   t   uint14(   R   R   RL   RK   R   RA   R   t
   uint14_max(   R5   R:   (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_rescale_uint14_limits   s    c          C   s   t  j t j    }  t |   }  t j |  |  |  f  }  t d g  & t j	 |  d d d d d d } Wd	 QX|  j
 | j
 k s t  t t |  |  d
 d  t t |  |  d d  d	 S(   s!   Test a grayscale float image
    s#   precision loss|non-contiguous inputt   kernel_sizei9   i3   t
   clip_limitg{Gz?R   i   NgEY@i   ghs?(   i9   i3   (   R   R'   R    t	   astronautR   R   t   dstackR   R   t   equalize_adapthistR+   R   R	   t   peak_snrt   norm_brightness_err(   R"   t   adapted(    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_adapthist_grayscale   s    c       	   C   s+  t  j t j    }  t j d t  A } t j d  t j	 |   \ } } t
 |  d k sd t  Wd QXt d g   t j |  d d } Wd QX| j   d k s t  | j   d k s t  |  j | j k s t  t  j j |   } t t | |  d	 d
  t t | |  d d  t | f S(   s#   Test an RGB color uint16 image
    t   recordt   alwaysi    Ns   precision lossRV   g{Gz?g      ?gx&Y[@i   g{Gz?i   (   R   t   img_as_uintR    RW   t   warningst   catch_warningsR?   t   simplefilterR   R   R0   R   R   RY   t   mint   maxR+   RA   R	   RZ   R[   (   R"   t   wt   histR   R\   t
   full_scale(    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_adapthist_color   s    c          C   s  t  j t j    }  t j |  j d |  j d f d t } t j |  | f  }  t	 d g   t
 j |   } Wd QX| j |  j k s t  |  d d  d d  d d  f }  t  j
 j |   } |  j | j k s t  t t | |  d d  t t | |  d	 d  d S(
   s   Test an RGBA color image
    i    i   R
   s   precision lossNi   gx&Y[@i   ga+e?(   R   R'   R    RW   R   t   onesR+   t   floatRX   R   R   RY   R   RA   R	   RZ   R[   (   R"   t   alphaR\   Rh   (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_adapthist_alpha   s    )%c         C   s   |  j  d k r7 t |  j    t | j    }  } n  t j |   }  t j |  } d |  j t j |  |  j   } t	 |  j
 j \ } } d t j | |  S(   s   Peak signal to noise ratio of two images

    Parameters
    ----------
    img1 : array-like
    img2 : array-like

    Returns
    -------
    peak_snr : float
        Peak signal to noise ratio
    i   g      ?i   (   t   ndimR   t   copyR   R'   t   sizeR   t   squaret   sumR   R
   t   typet   log(   t   img1t   img2t   mset   _t   max_(    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyRZ      s    ($c         C   sf   |  j  d k r+ t |   t |  }  } n  t j |  j   | j    } | t |  j j d } | S(   s   Normalized Absolute Mean Brightness Error between two images

    Parameters
    ----------
    img1 : array-like
    img2 : array-like

    Returns
    -------
    norm_brightness_error : float
        Normalized absolute mean brightness error
    i   i   (   Rn   R   R   t   abst   meanR   R
   Rs   (   Ru   Rv   t   ambet   nbe(    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyR[   
  s
    c          C   s;   t  j j d d d  }  t j |  d  } t | |   d S(   s4   Same image should be returned for gamma equal to onei    i   i   i   N(   i   i   (   R   t   randomt   uniformR   t   adjust_gammaR   (   R5   t   result(    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_adjust_gamma_one"  s    c          C   sO   t  j j d d d  }  t j |  d  } |  j j } t | t | d  d S(   s6   White image should be returned for gamma equal to zeroi    i   i   i   N(   i   i   (	   R   R~   R   R   R   R
   Rs   R   R   (   R5   R   R
   (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_adjust_gamma_zero)  s    c          C   s7  t  j d d d t  j  j dG  }  t  j d d d d d d	 d
 d g d d d d d d d d g d d d d d d d d g d d d d d  d! d" d# g d$ d% d& d' d( d) d* d+ g d, d- d. d/ d0 d1 d2 d3 g d4 d5 d6 d7 d8 d9 d: d; g d< d= d> d? d@ dA dB dC g g dD t  j } t j |  dE  } t | |  dF S(H   s\   Verifying the output with expected results for gamma
    correction with gamma equal to halfi    i   i   i   i   i-   i7   i?   iG   iN   iT   iZ   i_   id   ii   in   is   iw   i{   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   R
   g      ?N(   i   i   (   R   R   R7   t   reshapeR   R   R   R   (   R5   R9   R   (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_adjust_gamma_less_one1  s    $-c          C   s7  t  j d d d t  j  j dA  }  t  j d d d d d d d d g d d d	 d
 d d d d g d d d d d d d d g d d d d d d d d g d d  d! d" d# d$ d% d& g d' d( d) d* d+ d, d- d. g d/ d0 d1 d2 d3 d4 d5 d6 g d7 d8 d9 d: d; d< d= d> g g d? t  j } t j |  d  } t | |  d@ S(B   s[   Verifying the output with expected results for gamma
    correction with gamma equal to twoi    i   i   i   i   i   i   i   i   i   i	   i
   i   i   i   i   i   i   i   i   i   i!   i$   i'   i*   i-   i1   i4   i8   i<   i@   iD   iH   iL   iQ   iU   iZ   i_   id   ii   in   it   iy   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   R
   N(   i   i   (   R   R   R7   R   R   R   R   R   (   R5   R9   R   (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_adjust_gamma_greater_oneC  s    $-c          C   sN   t  j d d d t  j  j d  }  t j t   t j |  d  Wd  QXd  S(   Ni    i   i   i   i(   i   i   (	   R   R   R7   R   R   t   raisest
   ValueErrorR   R   (   R5   (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_adjust_gamma_neggativeU  s    $c          C   s7  t  j d d d t  j  j dG  }  t  j d d d d d d	 d
 d g d d d d d d d d g d d d d d d d d g d d d d d  d! d" d# g d$ d% d& d' d( d) d* d+ g d, d- d. d/ d0 d1 d2 d3 g d4 d5 d6 d7 d8 d9 d: d; g d< d= d> d? d@ dA dB dC g g dD t  j } t j |  dE  } t | |  dF S(H   s|   Verifying the output with expected results for logarithmic
    correction with multiplier constant multiplier equal to unityi    i   i   i   i   i   i   i   i   i!   i&   i+   i0   i5   i:   i?   iD   iI   iM   iR   iV   i[   i_   id   ih   im   iq   iu   iy   i}   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   R
   i   N(   i   i   (   R   R   R7   R   R   R   t
   adjust_logR   (   R5   R9   R   (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_adjust_log^  s    $-c          C   s:  t  j d d d t  j  j dF  }  t  j d d d d d d d	 d
 g d d d d d d d d g d d d d d d d d g d d d d d d  d! d" g d# d$ d% d& d' d( d) d* g d+ d, d- d. d/ d0 d1 d2 g d3 d4 d5 d6 d7 d8 d9 d: g d; d< d= d> d? d@ dA dB g g dC t  j } t j |  dD t  } t | |  dE S(G   s   Verifying the output with expected results for inverse logarithmic
    correction with multiplier constant multiplier equal to unityi    i   i   i   i   i   i   i   i   i   i   i   i   i    i#   i&   i)   i-   i0   i3   i7   i:   i=   iA   iD   iH   iL   iO   iS   iW   iZ   i^   ib   if   ij   in   ir   iv   iz   i~   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   R
   i   N(   i   i   (	   R   R   R7   R   R   R   R   R?   R   (   R5   R9   R   (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_adjust_inv_logp  s    $-c          C   s:  t  j d d d t  j  j d6  }  t  j d d d d d d d d g d d d d d d d d g d d	 d	 d
 d
 d d d g d d d d d d d d g d d d d d d d d g d d d d d  d! d" d# g d$ d% d& d' d( d) d* d+ g d, d- d. d/ d0 d1 d2 d3 g g d4 t  j } t j |  d d  } t | |  d5 S(7   sl   Verifying the output with expected results for sigmoid correction
    with cutoff equal to one and gain of 5i    i   i   i   i   i   i   i   i   i   i	   i
   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i    i"   i$   i'   i)   i,   i/   i2   i6   i9   i=   i@   iD   iH   iL   iP   iU   iY   i^   ic   ih   il   iq   iv   i{   R
   N(   i   i   (   R   R   R7   R   R   R   t   adjust_sigmoidR   (   R5   R9   R   (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_adjust_sigmoid_cutoff_one  s    $-c          C   s:  t  j d d d t  j  j d&  }  t  j d d d d d	 d
 d d g d d d d d d d d g d d d d d d d d g d d d d d d  d  d! g d! d! d! d! d" d" d" d" g d" d" d" d" d" d" d" d" g d" d" d" d" d" d" d" d" g d" d" d" d" d" d" d" d" g g d# t  j } t j |  d d$  } t | |  d% S('   sn   Verifying the output with expected results for sigmoid correction
    with cutoff equal to zero and gain of 10i    i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   R
   i
   N(   i   i   (   R   R   R7   R   R   R   R   R   (   R5   R9   R   (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_adjust_sigmoid_cutoff_zero  s    $-c          C   s:  t  j d d d t  j  j d@  }  t  j d d d d d d d d g d d	 d
 d d d d d g d d d d d d d d g d d d d d d d d g d  d! d" d# d$ d% d& d' g d( d) d* d+ d, d- d. d/ g d0 d1 d2 d3 d4 d5 d6 d7 g d8 d9 d9 d: d: d; d; d< g g d= t  j } t j |  d> d  } t | |  d? S(A   sn   Verifying the output with expected results for sigmoid correction
    with cutoff equal to half and gain of 10i    i   i   i   i   i   i   i   i   i   i	   i
   i   i   i   i   i   i   i   i"   i'   i,   i2   i9   i@   iH   iP   iY   ic   il   iv   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   R
   g      ?N(   i   i   (   R   R   R7   R   R   R   R   R   (   R5   R9   R   (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_adjust_sigmoid_cutoff_half  s    $-c          C   s=  t  j d d d t  j  j d?  }  t  j d d d d d d d d	 g d	 d
 d d d d d d g d d d d d d d d g d d d d d d d d  g d! d" d# d$ d% d& d' d( g d) d* d+ d, d- d. d/ d0 g d1 d2 d3 d4 d5 d d6 d7 g d8 d d d9 d9 d: d: d; g g d< t  j } t j |  d= d5 t  } t | |  d> S(@   sv   Verifying the output with expected results for inverse sigmoid
    correction with cutoff equal to half and gain of 10i    i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i~   it   ij   i`   iW   iN   iF   i>   i7   i1   i+   i%   i!   i   i   i   i   i   i   i   i
   i   i   i   i   i   i   R
   g      ?N(   i   i   (	   R   R   R7   R   R   R   R   R?   R   (   R5   R9   R   (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt#   test_adjust_inv_sigmoid_cutoff_half  s    $-c          C   sQ   t  j d d d  j d  j t  j  }  t j t   t j	 |   Wd  QXd  S(   Nii   i   i   (   i   i   (
   R   R   R   t   astypet   doubleR   R   R   R   R   (   R5   (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_negative  s    *c          C   s   t  j d d d  }  t j |   s* t  d |  d <t j |   sI t  t j |  d d se t  |  d j t  j  }  t j |   s t  t j |  d d s t  |  j t  j  d
 }  t j |   s t  t j |  d d s t  d  S(   Ni    g{Gz?id   i   it   upper_percentilei   i   i   i   (   R   R/   R   t   is_low_contrastR   R   R7   RK   (   R5   (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   test_is_low_contrast  s    
(   i
   i   (   g333333?g?i   i  i   i  i @  i?  i   i  (E   Ra   t   numpyR   R   R    R   t   skimage.exposure.exposureR   t   skimage.colorR   t   skimage.util.dtypeR   t   skimage._shared._warningsR   t   skimage._sharedR   t   skimage._shared.testingR   R   R	   R   R   R~   t   seedt   cameraR   R'   R   RA   R   R&   R(   R.   R!   t   parametrizeR;   R=   R@   RJ   RP   RS   RL   RB   RC   RE   RF   RH   RM   RN   RQ   RT   R]   Ri   Rm   RZ   R[   R   R   R   R   R   R   R   R   R   R   R   R   R   (    (    (    sC   lib/python2.7/site-packages/skimage/exposure/tests/test_exposure.pyt   <module>   sz   										!	!																														