Ë
    ÿ[;jrR  ã                   ó~   — d 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mZmZ dd	„Zdd
„Zdd„Zd„ Z	 	 	 	 dd„Zy)z)
Methods to characterize image textures.
é    Né   )Úcheck_nD)Úgray2rgb)Úimg_as_floaté   )Ú
_glcm_loopÚ_local_binary_patternÚ_multiblock_lbpc                 ó:  — t        | d«       t        |dd«       t        |dd«       t        j                  | «      } | j                  «       }t        j                  | j
                  t        j                  «      rt        d«      ‚| j
                  t        j                  t        j                  fvr|€t        d«      ‚t        j                  | j
                  t        j                  «      r#t        j                  | dk  «      rt        d«      ‚|€d	}||k\  rt        d
«      ‚t        j                  |t        j                  ¬«      }t        j                  |t        j                  ¬«      }t        j                  ||t        |«      t        |«      ft        j                  d¬«      }t!        | ||||«       |rt        j"                  |d«      }||z   }|rD|j%                  t        j                  «      }t        j&                  |dd¬«      }	d|	|	dk(  <   ||	z  }|S )a  Calculate the gray-level co-occurrence matrix.

    A gray level co-occurrence matrix is a histogram of co-occurring
    grayscale values at a given offset over an image.

    .. versionchanged:: 0.19
               `greymatrix` was renamed to `graymatrix` in 0.19.

    Parameters
    ----------
    image : array_like
        Integer typed input image. Only positive valued images are supported.
        If type is other than uint8, the argument `levels` needs to be set.
    distances : array_like
        List of pixel pair distance offsets.
    angles : array_like
        List of pixel pair angles in radians.
    levels : int, optional
        The input image should contain integers in [0, `levels`-1],
        where levels indicate the number of gray-levels counted
        (typically 256 for an 8-bit image). This argument is required for
        16-bit images or higher and is typically the maximum of the image.
        As the output matrix is at least `levels` x `levels`, it might
        be preferable to use binning of the input image rather than
        large values for `levels`.
    symmetric : bool, optional
        If True, the output matrix `P[:, :, d, theta]` is symmetric. This
        is accomplished by ignoring the order of value pairs, so both
        (i, j) and (j, i) are accumulated when (i, j) is encountered
        for a given offset. The default is False.
    normed : bool, optional
        If True, normalize each matrix `P[:, :, d, theta]` by dividing
        by the total number of accumulated co-occurrences for the given
        offset. The elements of the resulting matrix sum to 1. The
        default is False.

    Returns
    -------
    P : 4-D ndarray
        The gray-level co-occurrence histogram. The value
        `P[i,j,d,theta]` is the number of times that gray-level `j`
        occurs at a distance `d` and at an angle `theta` from
        gray-level `i`. If `normed` is `False`, the output is of
        type uint32, otherwise it is float64. The dimensions are:
        levels x levels x number of distances x number of angles.

    References
    ----------
    .. [1] M. Hall-Beyer, 2007. GLCM Texture: A Tutorial
           https://prism.ucalgary.ca/handle/1880/51900
           DOI:`10.11575/PRISM/33280`
    .. [2] R.M. Haralick, K. Shanmugam, and I. Dinstein, "Textural features for
           image classification", IEEE Transactions on Systems, Man, and
           Cybernetics, vol. SMC-3, no. 6, pp. 610-621, Nov. 1973.
           :DOI:`10.1109/TSMC.1973.4309314`
    .. [3] M. Nadler and E.P. Smith, Pattern Recognition Engineering,
           Wiley-Interscience, 1993.
    .. [4] Wikipedia, https://en.wikipedia.org/wiki/Co-occurrence_matrix


    Examples
    --------
    Compute 4 GLCMs using 1-pixel distance and 4 different angles. For example,
    an angle of 0 radians refers to the neighboring pixel to the right;
    pi/4 radians to the top-right diagonal neighbor; pi/2 radians to the pixel
    above, and so forth.

    >>> image = np.array([[0, 0, 1, 1],
    ...                   [0, 0, 1, 1],
    ...                   [0, 2, 2, 2],
    ...                   [2, 2, 3, 3]], dtype=np.uint8)
    >>> result = graycomatrix(image, [1], [0, np.pi/4, np.pi/2, 3*np.pi/4],
    ...                       levels=4)
    >>> result[:, :, 0, 0]
    array([[2, 2, 1, 0],
           [0, 2, 0, 0],
           [0, 0, 3, 1],
           [0, 0, 0, 1]], dtype=uint32)
    >>> result[:, :, 0, 1]
    array([[1, 1, 3, 0],
           [0, 1, 1, 0],
           [0, 0, 0, 2],
           [0, 0, 0, 0]], dtype=uint32)
    >>> result[:, :, 0, 2]
    array([[3, 0, 2, 0],
           [0, 2, 2, 0],
           [0, 0, 1, 2],
           [0, 0, 0, 0]], dtype=uint32)
    >>> result[:, :, 0, 3]
    array([[2, 0, 0, 0],
           [1, 1, 2, 0],
           [0, 0, 2, 1],
           [0, 0, 0, 0]], dtype=uint32)

    r   r   Ú	distancesÚanglesz^Float images are not supported by graycomatrix. Convert the image to an unsigned integer type.z{The levels argument is required for data types other than uint8. The resulting matrix will be at least levels ** 2 in size.r   z)Negative-valued images are not supported.é   zUThe maximum grayscale value in the image should be smaller than the number of levels.©ÚdtypeÚC)r   Úorder)r   r   r   é   ©r   r   T©ÚaxisÚkeepdims)r   ÚnpÚascontiguousarrayÚmaxÚ
issubdtyper   ÚfloatingÚ
ValueErrorÚuint8Úint8ÚsignedintegerÚanyÚfloat64ÚzerosÚlenÚuint32r   Ú	transposeÚastypeÚsum)
Úimager   r   ÚlevelsÚ	symmetricÚnormedÚ	image_maxÚPÚPtÚ	glcm_sumss
             ú`G:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\skimage/feature/texture.pyÚgraycomatrixr2      sÁ  € ô@ ˆU�AÔÜˆY˜˜;Ô'ÜˆV�Q˜Ô!ä× Ñ  Ó'€Eà—	‘	“€Iä	‡}�}�U—[‘[¤"§+¡+Ô.Üð=ó
ð 	
ð ‡{�{œ2Ÿ8™8¤R§W¡WÐ-Ñ-°&°.Üð)ó
ð 	
ô 
‡}�}�U—[‘[¤"×"2Ñ"2Ô3¼¿¹¸uÀq¹yÔ8IÜÐDÓEÐEà€~Øˆà�FÒÜð1ó
ð 	
ô
 ×$Ñ$ Y´b·j±jÔA€IÜ×!Ñ! &´·
±
Ô;€Fä
�‰Ø	�œ˜Y›¬¨V«Ð5¼R¿Y¹YÈcô	€Aô
 ˆu�i ¨°Ô3ñ Ü�\‰\˜!˜\Ó*ˆØ�‰Fˆñ Ø�H‰H”R—Z‘ZÓ ˆÜ—F‘F˜1 6°DÔ9ˆ	Ø$%ˆ	�)˜q‘.Ñ!Ø	ˆY‰ˆà€Hó    c                 ó¾  ‡ ‡— ˆ ˆfd„}t        ‰ dd«       ‰ j                  \  Š}}}‰|k7  rt        d«      ‚|dk  rt        d«      ‚|dk  rt        d«      ‚‰ j                  t        j
                  «      Š t	        j                  ‰ dd	¬
«      }d||dk(  <   ‰ |z  Š t        j                  d‰…d‰…f   \  }}|dk(  r	||z
  dz  }	nE|dk(  rt	        j                  ||z
  «      }	n'|dk(  rdd||z
  dz  z   z  }	n|dv rnt        |› d�«      ‚|dk(  r1t	        j                  ‰ dz  d¬«      }
t	        j                  |
«      }|S |dk(  rt	        j                  ‰ dz  d¬«      }|S |dk(  r |«       \  }}|S |dk(  r, |«       \  }}t	        j                  ‰ ||z
  dz  z  d¬«      }|S |dk(  rA |«       \  }}t	        j                  ‰ ||z
  dz  z  d¬«      }t	        j                  |«      }|S |dk(  rKt	        j                  ‰ ‰ dk7  t	        j                  ‰ «      ¬«       }t	        j                  ‰ |z  d¬«      }|S |dk(  �rkt	        j                  ||ft        j
                  ¬«      }t	        j                  t        ‰«      «      j                  ‰dddf«      }t	        j                  t        ‰«      «      j                  d‰ddf«      }|t	        j                  |‰ z  d¬«      z
  }|t	        j                  |‰ z  d¬«      z
  }t	        j                  t	        j                  ‰ |dz  z  d¬«      «      }t	        j                  t	        j                  ‰ |dz  z  d¬«      «      }t	        j                  ‰ ||z  z  d¬«      }|dk  }d	||dk  <   d||<   | }||   ||   ||   z  z  ||<   |S |dv r/	j                  ‰‰ddf«      }	t	        j                  ‰ |	z  d¬«      }S )a
  Calculate texture properties of a GLCM.

    Compute a feature of a gray level co-occurrence matrix to serve as
    a compact summary of the matrix. The properties are computed as
    follows:

    - 'contrast': :math:`\sum_{i,j=0}^{levels-1} P_{i,j}(i-j)^2`
    - 'dissimilarity': :math:`\sum_{i,j=0}^{levels-1}P_{i,j}|i-j|`
    - 'homogeneity': :math:`\sum_{i,j=0}^{levels-1}\frac{P_{i,j}}{1+(i-j)^2}`
    - 'ASM': :math:`\sum_{i,j=0}^{levels-1} P_{i,j}^2`
    - 'energy': :math:`\sqrt{ASM}`
    - 'correlation':
        .. math:: \sum_{i,j=0}^{levels-1} P_{i,j}\left[\frac{(i-\mu_i) \
                  (j-\mu_j)}{\sqrt{(\sigma_i^2)(\sigma_j^2)}}\right]
    - 'mean': :math:`\sum_{i=0}^{levels-1} i*P_{i}`
    - 'variance': :math:`\sum_{i=0}^{levels-1} P_{i}*(i-mean)^2`
    - 'std': :math:`\sqrt{variance}`
    - 'entropy': :math:`\sum_{i,j=0}^{levels-1} -P_{i,j}*log(P_{i,j})`

    Each GLCM is normalized to have a sum of 1 before the computation of
    texture properties.

    .. versionchanged:: 0.19
           `greycoprops` was renamed to `graycoprops` in 0.19.

    Parameters
    ----------
    P : ndarray
        Input array. `P` is the gray-level co-occurrence histogram
        for which to compute the specified property. The value
        `P[i,j,d,theta]` is the number of times that gray-level j
        occurs at a distance d and at an angle theta from
        gray-level i.
    prop : {'contrast', 'dissimilarity', 'homogeneity', 'energy',             'correlation', 'ASM', 'mean', 'variance', 'std', 'entropy'}, optional
        The property of the GLCM to compute. The default is 'contrast'.

    Returns
    -------
    results : 2-D ndarray
        2-dimensional array. `results[d, a]` is the property 'prop' for
        the d'th distance and the a'th angle.

    References
    ----------
    .. [1] M. Hall-Beyer, 2007. GLCM Texture: A Tutorial v. 1.0 through 3.0.
           The GLCM Tutorial Home Page,
           https://prism.ucalgary.ca/handle/1880/51900
           DOI:`10.11575/PRISM/33280`

    Examples
    --------
    Compute the contrast for GLCMs with distances [1, 2] and angles
    [0 degrees, 90 degrees]

    >>> image = np.array([[0, 0, 1, 1],
    ...                   [0, 0, 1, 1],
    ...                   [0, 2, 2, 2],
    ...                   [2, 2, 3, 3]], dtype=np.uint8)
    >>> g = graycomatrix(image, [1, 2], [0, np.pi/2], levels=4,
    ...                  normed=True, symmetric=True)
    >>> contrast = graycoprops(g, 'contrast')
    >>> contrast
    array([[0.58333333, 1.        ],
           [1.25      , 2.75      ]])

    c                  ó�   •— t        j                  ‰«      j                  ‰dddf«      } t        j                  | ‰z  d¬«      }| |fS )Nr   r   ©r   )r   ÚarangeÚreshaper(   )ÚIÚmeanr.   Ú	num_levels     €€r1   Ú	glcm_meanzgraycoprops.<locals>.glcm_meanï   sB   ø€ Ü�I‰I�iÓ ×(Ñ(¨)°Q¸¸1Ð)=Ó>ˆÜ�v‰v�a˜!‘e &Ô)ˆØ�$ˆwˆr3   é   r.   z'num_level and num_level2 must be equal.r   znum_dist must be positive.znum_angle must be positive.r   Tr   r   Úcontrastr   ÚdissimilarityÚhomogeneityg      ð?)ÚASMÚenergyÚcorrelationÚentropyÚvariancer:   Ústdz is an invalid propertyrB   r6   rA   r:   rE   rF   rD   )ÚwhereÚoutrC   r   gVçž¯Ò<)r>   r?   r@   )r   Úshaper   r'   r   r"   r(   ÚogridÚabsÚsqrtÚlogÚ
zeros_liker#   ÚarrayÚranger8   )r.   Úpropr<   Ú
num_level2Únum_distÚ	num_angler0   r9   ÚJÚweightsÚasmÚresultsÚ_r:   ÚvarÚlnÚdiff_iÚdiff_jÚstd_iÚstd_jÚcovÚmask_0Úmask_1r;   s   `                      @r1   Úgraycopropsrc   ª   sö  ù€ õJô
 ˆQ��3Ôà34·7±7Ñ0€Y�
˜H iØ�JÒÜÐBÓCÐCØ�1‚}ÜÐ5Ó6Ð6Ø�A‚~ÜÐ6Ó7Ð7ð 	
�‰”—‘Ó€AÜ—‘�q˜v°Ô5€IØ !€Iˆi˜1‰nÑØˆ�N€Aô �8‰8�A�i�K  9 Ð,Ñ-�D€A€qØˆzÒØ�q‘5˜Q‘,‰Ø	�Ò	 Ü—&‘&˜˜Q™“-‰Ø	�Ò	Ø˜  A¡¨!™|Ñ+Ñ,‰Ø	ÐWÑ	WØä˜D˜6Ð!8Ð9Ó:Ð:ð ˆxÒÜ�f‰f�Q˜‘T Ô'ˆÜ—'‘'˜#“,ˆðN €NðM 
�ŠÜ—&‘&˜˜A™ FÔ+ˆðJ €NðI 
�ŠÙ“[‰
ˆˆ7ðF €NðE 
�Ò	Ù“+‰ˆˆ4Ü—&‘&˜˜q 4™x¨A™oÑ.°VÔ<ˆð@ €Nð? 
�ŠÙ“+‰ˆˆ4Ü�f‰f�Q˜1˜t™8¨™/Ñ*°Ô8ˆÜ—'‘'˜#“,ˆð8 €Nð7 
�Ò	Ü�f‰f�Q˜q A™v¬B¯M©M¸!Ó,<Ô=Ð=ˆÜ—&‘&˜˜R™ fÔ-ˆð2 €Nð/ 
�Ó	Ü—(‘(˜H iÐ0¼¿
¹
ÔCˆÜ�H‰H”U˜9Ó%Ó&×.Ñ.°	¸1¸aÀÐ/CÓDˆÜ�H‰H”U˜9Ó%Ó&×.Ñ.°°9¸aÀÐ/CÓDˆØ”R—V‘V˜A ™E¨Ô/Ñ/ˆØ”R—V‘V˜A ™E¨Ô/Ñ/ˆä—‘œŸ™˜q F¨q¡=Ñ0°vÔ>Ó?ˆÜ—‘œŸ™˜q F¨q¡=Ñ0°vÔ>Ó?ˆÜ�f‰f�Q˜& 6™/Ñ*°Ô8ˆð ˜‘ˆØ $ˆˆu�u‰}ÑØˆ�‰ð �ˆØ˜f™+¨¨v©¸¸v¹Ñ)FÑGˆ�‰ð
 €Nð	 
Ð=Ñ	=Ø—/‘/ 9¨i¸¸AÐ">Ó?ˆÜ—&‘&˜˜W™¨6Ô2ˆà€Nr3   c                 ó–  — t        | d«       t        d«      t        d«      t        d«      t        d«      t        d«      dœ}t        j                  | j                  t        j
                  «      rt        j                  d«       t        j                  | t        j                  ¬	«      } t        | ||||j                  «          «      }|S )
aS	  Compute the local binary patterns (LBP) of an image.

    LBP is a visual descriptor often used in texture classification.

    Parameters
    ----------
    image : (M, N) array
        2D grayscale image.
    P : int
        Number of circularly symmetric neighbor set points (quantization of
        the angular space).
    R : float
        Radius of circle (spatial resolution of the operator).
    method : str {'default', 'ror', 'uniform', 'nri_uniform', 'var'}, optional
        Method to determine the pattern:

        ``default``
            Original local binary pattern which is grayscale invariant but not
            rotation invariant.
        ``ror``
            Extension of default pattern which is grayscale invariant and
            rotation invariant.
        ``uniform``
            Uniform pattern which is grayscale invariant and rotation
            invariant, offering finer quantization of the angular space.
            For details, see [1]_.
        ``nri_uniform``
            Variant of uniform pattern which is grayscale invariant but not
            rotation invariant. For details, see [2]_ and [3]_.
        ``var``
            Variance of local image texture (related to contrast)
            which is rotation invariant but not grayscale invariant.

    Returns
    -------
    output : (M, N) array
        LBP image.

    References
    ----------
    .. [1] T. Ojala, M. Pietikainen, T. Maenpaa, "Multiresolution gray-scale
           and rotation invariant texture classification with local binary
           patterns", IEEE Transactions on Pattern Analysis and Machine
           Intelligence, vol. 24, no. 7, pp. 971-987, July 2002
           :DOI:`10.1109/TPAMI.2002.1017623`
    .. [2] T. Ahonen, A. Hadid and M. Pietikainen. "Face recognition with
           local binary patterns", in Proc. Eighth European Conf. Computer
           Vision, Prague, Czech Republic, May 11-14, 2004, pp. 469-481, 2004.
           http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.214.6851
           :DOI:`10.1007/978-3-540-24670-1_36`
    .. [3] T. Ahonen, A. Hadid and M. Pietikainen, "Face Description with
           Local Binary Patterns: Application to Face Recognition",
           IEEE Transactions on Pattern Analysis and Machine Intelligence,
           vol. 28, no. 12, pp. 2037-2041, Dec. 2006
           :DOI:`10.1109/TPAMI.2006.244`
    r   ÚDÚRÚUÚNÚV)ÚdefaultÚrorÚuniformÚnri_uniformrZ   zßApplying `local_binary_pattern` to floating-point images may give unexpected results when small numerical differences between adjacent pixels are present. It is recommended to use this function with images of integer dtype.r   )r   Úordr   r   r   r   ÚwarningsÚwarnr   r"   r	   Úlower)r)   r.   rf   ÚmethodÚmethodsÚoutputs         r1   Úlocal_binary_patternru   >  sœ   € ôr ˆU�AÔô �s“8Ü�3‹xÜ�s“8Ü˜3“xÜ�3‹xñ€Gô 
‡}�}�U—[‘[¤"§+¡+Ô.Ü�‰ð5ô	
ô × Ñ  ¬b¯j©jÔ9€EÜ" 5¨!¨Q°¸¿¹»Ñ0GÓH€FØ€Mr3   c                 ón   — t        j                  | t         j                  ¬«      } t        | ||||«      }|S )a  Multi-block local binary pattern (MB-LBP).

    The features are calculated similarly to local binary patterns (LBPs),
    (See :py:meth:`local_binary_pattern`) except that summed blocks are
    used instead of individual pixel values.

    MB-LBP is an extension of LBP that can be computed on multiple scales
    in constant time using the integral image. Nine equally-sized rectangles
    are used to compute a feature. For each rectangle, the sum of the pixel
    intensities is computed. Comparisons of these sums to that of the central
    rectangle determine the feature, similarly to LBP.

    Parameters
    ----------
    int_image : (N, M) array
        Integral image.
    r : int
        Row-coordinate of top left corner of a rectangle containing feature.
    c : int
        Column-coordinate of top left corner of a rectangle containing feature.
    width : int
        Width of one of the 9 equal rectangles that will be used to compute
        a feature.
    height : int
        Height of one of the 9 equal rectangles that will be used to compute
        a feature.

    Returns
    -------
    output : int
        8-bit MB-LBP feature descriptor.

    References
    ----------
    .. [1] L. Zhang, R. Chu, S. Xiang, S. Liao, S.Z. Li. "Face Detection Based
           on Multi-Block LBP Representation", In Proceedings: Advances in
           Biometrics, International Conference, ICB 2007, Seoul, Korea.
           http://www.cbsr.ia.ac.cn/users/scliao/papers/Zhang-ICB07-MBLBP.pdf
           :DOI:`10.1007/978-3-540-74549-5_2`
    r   )r   r   Úfloat32r
   )Ú	int_imageÚrÚcÚwidthÚheightÚlbp_codes         r1   Úmultiblock_lbpr~   Œ  s2   € ôT ×$Ñ$ Y´b·j±jÔA€IÜ˜y¨!¨Q°°vÓ>€HØ€Or3   c	                 ó¾  — t        j                  |t         j                  ¬«      }t        j                  |t         j                  ¬«      }t        j                  | «      }	t	        | j
                  «      dk  rt        | «      }	t        |	«      }	d}
t        j                  |
«      }
|
dd…dfxx   |z  cc<   |
dd…dfxx   |z  cc<   ||z   }||z   }t        |
«      D ]~  \  }}|\  }}||z   }||z   }|dd|z
  z  z  }|r/d|z
  |	|||z   …|||z   …f   z  ||z  z   }||	|||z   …|||z   …f<   ŒQd|z
  |	|||z   …|||z   …f   z  ||z  z   }||	|||z   …|||z   …f<   Œ€ |	S )aý  Multi-block local binary pattern visualization.

    Blocks with higher sums are colored with alpha-blended white rectangles,
    whereas blocks with lower sums are colored alpha-blended cyan. Colors
    and the `alpha` parameter can be changed.

    Parameters
    ----------
    image : ndarray of float or uint
        Image on which to visualize the pattern.
    r : int
        Row-coordinate of top left corner of a rectangle containing feature.
    c : int
        Column-coordinate of top left corner of a rectangle containing feature.
    width : int
        Width of one of 9 equal rectangles that will be used to compute
        a feature.
    height : int
        Height of one of 9 equal rectangles that will be used to compute
        a feature.
    lbp_code : int
        The descriptor of feature to visualize. If not provided, the
        descriptor with 0 value will be used.
    color_greater_block : tuple of 3 floats
        Floats specifying the color for the block that has greater
        intensity value. They should be in the range [0, 1].
        Corresponding values define (R, G, B) values. Default value
        is white (1, 1, 1).
    color_greater_block : tuple of 3 floats
        Floats specifying the color for the block that has greater intensity
        value. They should be in the range [0, 1]. Corresponding values define
        (R, G, B) values. Default value is cyan (0, 0.69, 0.96).
    alpha : float
        Value in the range [0, 1] that specifies opacity of visualization.
        1 - fully transparent, 0 - opaque.

    Returns
    -------
    output : ndarray of float
        Image with MB-LBP visualization.

    References
    ----------
    .. [1] L. Zhang, R. Chu, S. Xiang, S. Liao, S.Z. Li. "Face Detection Based
           on Multi-Block LBP Representation", In Proceedings: Advances in
           Biometrics, International Conference, ICB 2007, Seoul, Korea.
           http://www.cbsr.ia.ac.cn/users/scliao/papers/Zhang-ICB07-MBLBP.pdf
           :DOI:`10.1007/978-3-540-74549-5_2`
    r   r   ))éÿÿÿÿr€   )r€   r   )r€   r   r   )r   r   )r   r   )r   r€   )r   r€   Nr   r   é   )
r   Úasarrayr"   Úcopyr$   rI   r   r   rO   Ú	enumerate)r)   ry   rz   r{   r|   r}   Úcolor_greater_blockÚcolor_less_blockÚalphart   Úneighbor_rect_offsetsÚcentral_rect_rÚcentral_rect_cÚelement_numÚoffsetÚoffset_rÚoffset_cÚcurr_rÚcurr_cÚhas_greater_valueÚ	new_values                        r1   Údraw_multiblock_lbpr“   »  sÖ  € ô@ Ÿ*™*Ð%8ÄÇ
Á
ÔKÐÜ—z‘zÐ"2¼"¿*¹*ÔEÐô �W‰W�U‹^€Fô ˆ5�;‰;Ó˜!ÒÜ˜%“ˆô ˜&Ó!€Fð	Ðô ŸH™HÐ%:Ó;ÐØš!˜Q˜$Ó 6Ñ)ÓØš!˜Q˜$Ó 5Ñ(Óð ˜‘Z€NØ˜‘Y€Nä(Ð)>Ö?Ñˆ�VØ#Ñˆ�(à (Ñ*ˆØ (Ñ*ˆà$¨¨a°+©oÑ(>Ñ?Ðñ Ø˜U™ fØ˜ &™Ð(¨&°6¸E±>Ð*AÐAñ'ñ àÐ+Ñ+ñ,ˆIð IRˆF�6˜F V™OÐ+¨V°f¸u±nÐ-DÐDÒEà˜U™ fØ˜ &™Ð(¨&°6¸E±>Ð*AÐAñ'ñ àÐ(Ñ(ñ)ˆIð IRˆF�6˜F V™OÐ+¨V°f¸u±nÐ-DÐDÒEð%  @ð( €Mr3   )NFF)r>   )rj   )r   )r   r   r   )r   g®Gázæ?g¸…ëQ¸î?g      à?)Ú__doc__ro   Únumpyr   Ú_shared.utilsr   Úcolorr   Úutilr   Ú_texturer   r	   r
   r2   rc   ru   r~   r“   © r3   r1   Ú<module>r›      sP   ðñó ã å $Ý Ý ß HÑ HóXóvQóhKò\,ðj Ø!Ø$Ø
ôwr3   