+
    Ai@P                         R t ^ RIt^ RIt^RIHt ^RIHt ^RIH	t	 ^RI
HtHtHt RR ltRR ltRR ltR	 tRR
 ltR# )z)
Methods to characterize image textures.
N)check_nD)gray2rgb)img_as_float)
_glcm_loop_local_binary_pattern_multiblock_lbpc                   \        V ^4       \        V^R4       \        V^R4       \        P                  ! V 4      p V P                  4       p\        P                  ! V P
                  \        P                  4      '       d   \        R4      hV P
                  \        P                  \        P                  39  d   Vf   \        R4      h\        P                  ! V P
                  \        P                  4      '       d+   \        P                  ! V ^ 8  4      '       d   \        R4      hVf   RpWc8  d   \        R4      h\        P                  ! V\        P                  R7      p\        P                  ! V\        P                  R7      p\        P                  ! W3\        V4      \        V4      3\        P                  R	R
7      p\!        WW#V4       V'       d    \        P"                  ! VR4      pWx,           pV'       dH   VP%                  \        P                  4      p\        P&                  ! VRRR7      p	^W^ 8H  &   Wy,          pV# )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)

	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.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   orderTaxiskeepdims)             r   r   )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
   &&&&&&    U/var/www/html/photoedit/myenv/lib/python3.14/site-packages/skimage/feature/texture.pygraycomatrixr2      s   @ UAY;'VQ!  'E		I	}}U[["++..=
 	
 {{288RWW--&.)
 	
 
}}U[[""2"233uqy8I8IDEE~1
 	

 $$YbjjAI!!&

;F
	YV5RYYc	A
 u3 \\!\*F HHRZZ FF16D9	$%	q.!	H    c                $	  a a V V3R lp\        S ^R4       S P                  w  or4pSV8w  d   \        R4      hV^ 8:  d   \        R4      hV^ 8:  d   \        R4      hS P                  \        P
                  4      o \        P                  ! S RRR7      p^Wf^ 8H  &   S V,          o \        P                  ^ S1^ S13,          w  rxVR8X  d   Wx,
          ^,          p	M_VR	8X  d   \        P                  ! Wx,
          4      p	M;VR
8X  d   RRWx,
          ^,          ,           ,          p	MVR9   d   M\        V R24      hVR8X  d8   \        P                  ! S ^,          RR7      p
\        P                  ! V
4      pV# VR8X  d"   \        P                  ! S ^,          RR7      pV# VR8X  d   V! 4       w  rV# VR8X  d8   V! 4       w  r}\        P                  ! S W},
          ^,          ,          RR7      pV# VR8X  dN   V! 4       w  r}\        P                  ! S W},
          ^,          ,          RR7      p\        P                  ! V4      pV# VR8X  dS   \        P                  ! S S ^ 8g  \        P                  ! S 4      R7      ) p\        P                  ! S V,          RR7      pV# VR8X  Ed   \        P                  ! WE3\        P
                  R7      p\        P                  ! \        S4      4      P                  S^^^34      p\        P                  ! \        S4      4      P                  ^S^^34      pV\        P                  ! VS ,          RR7      ,
          pV\        P                  ! VS ,          RR7      ,
          p\        P                  ! \        P                  ! S V^,          ,          RR7      4      p\        P                  ! \        P                  ! S V^,          ,          RR7      4      p\        P                  ! S VV,          ,          RR7      pVR8  pRVVR8  &   ^VV&   V( pVV,          VV,          VV,          ,          ,          VV&   V# VR9   d5   X	P                  SS^^34      p	\        P                  ! S V	,          RR7      pX# )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                     < \         P                  ! S4      P                  S^^^34      p \         P                  ! V S,          RR7      pW3# )r   r   r   )r   arangereshaper(   )Imeanr.   	num_levels     r1   	glcm_meangraycoprops.<locals>.glcm_mean   s@    IIi (()Q1)=>vva!e&)wr3   r.   z'num_level and num_level2 must be equal.znum_dist must be positive.znum_angle must be positive.Tr   contrastdissimilarityhomogeneityg      ?ASMenergycorrelationentropyvariancer:   stdz is an invalid propertyr6   )whereoutr   gV瞯<r   )rA   rB   rC   rD   rE   r:   rF   )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   f&                     @r1   graycopropsrc      s   J
 Q334770Y
iJBCC1}566A~677 	
Aqv5I !I1nNA 88AiK9,-DAz5Q,		 &&-		!|+,	W	WD6!89:: xffQT'''#,N NM 
&&AF+J NI 
[
F NE 
	+&&qxAo.V<@ N? 
+ffQ18/*8''#,8 N7 
	ffQqAvBMM!,<==&&Rf-2 N/ 
	((H0

CHHU9%&..	1a/CDHHU9%&..9a/CDRVVAE//RVVAE//qFq=0v>?qFq=0v>?ffQ&6/*8  $uu} f+vv)FG
 N	 
=	=//9iA">?&&W62Nr3   c                   \        V ^4       R\        R4      R\        R4      R\        R4      R\        R4      R	\        R
4      /p\        P                  ! V P                  \        P
                  4      '       d   \        P                  ! R4       \        P                  ! V \        P                  R7      p \        WW$VP                  4       ,          4      pV# )a  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`
defaultDrorRuniformUnri_uniformNrZ   VzApplying `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.   rh   methodmethodsoutputs   &&&&  r1   local_binary_patternru   >  s    r UA 	3s8s3x3s8s3xs3xG 
}}U[["++..5	
   bjj9E"5Q0GHFMr3   c                l    \         P                  ! V \         P                  R7      p \        WW#V4      pV# )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~     s.    T $$YbjjAIyQv>HOr3   c	                   \         P                  ! V\         P                  R7      p\         P                  ! V\         P                  R7      p\         P                  ! V 4      p	\	        V P
                  4      ^8  d   \        V 4      p	\        V	4      p	Rp
\         P                  ! V
4      p
V
R;;,          V,          uu&   V
R;;,          V,          uu&   W,           pW#,           p\        V
4       F  w  rVw  ppW,           pVV,           pV^^V,
          ,          ,          pV'       dT   ^V,
          V	VVV,           1VVV,           13,          ,          W,          ,           pVV	VVV,           1VVV,           13&   K  ^V,
          V	VVV,           1VVV,           13,          ,          W,          ,           pVV	VVV,           1VVV,           13&   K  	  V	# )aM  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   )NNNr   )r   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zz"2"**E WWU^F 5;;!% &!F	 HH%:;$6)$5( ZNYN()>?#(*(*$a+o(>? Uf&(&6E>*AA' +,I IRF6FVO+Vfun-DDEUf&(&6E>*AA' ()I IRF6FVO+Vfun-DDE%  @( Mr3   )NFF)r>   )re   )r   )r   r   r   )r   gGz?gQ?g      ?)__doc__ro   numpyr   _shared.utilsr   colorr   utilr   _texturer   r   r   r2   rc   ru   r~   r    r3   r1   <module>r      sB      $   H HXvQhK\,^wr3   