
    9i@P                         S r SSKrSSKrSSKJr  SSKJr  SSKJ	r	  SSK
JrJrJr  SS	 jrSS
 jrSS jrS r    SS jrg)z)
Methods to characterize image textures.
    N   )check_nD)gray2rgb)img_as_float   )
_glcm_loop_local_binary_pattern_multiblock_lbpc                 b   [        U S5        [        USS5        [        USS5        [        R                  " U 5      n U R                  5       n[        R                  " U R
                  [        R                  5      (       a  [        S5      eU R
                  [        R                  [        R                  4;  a  Uc  [        S5      e[        R                  " U R
                  [        R                  5      (       a)  [        R                  " U S:  5      (       a  [        S5      eUc  S	nXc:  a  [        S
5      e[        R                  " U[        R                  S9n[        R                  " U[        R                  S9n[        R                  " X3[        U5      [        U5      4[        R                  SS9n[!        XX#U5        U(       a  [        R"                  " US5      nXx-   nU(       a@  UR%                  [        R                  5      n[        R&                  " USSS9n	SXS:H  '   Xy-  nU$ )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
             W/var/www/html/land-doc-ocr/venv/lib/python3.13/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                   ^ ^ U U4S jn[        T SS5        T R                  u  mp4nTU:w  a  [        S5      eUS::  a  [        S5      eUS::  a  [        S5      eT R                  [        R
                  5      m [        R                  " T SS	S
9nSXfS:H  '   T U-  m [        R                  ST2ST24   u  pxUS:X  a  Xx-
  S-  n	OHUS:X  a  [        R                  " Xx-
  5      n	O)US:X  a  SSXx-
  S-  -   -  n	OUS;   a  O[        U S35      eUS:X  a0  [        R                  " T S-  SS9n
[        R                  " U
5      nU$ US:X  a  [        R                  " T S-  SS9nU$ US:X  a  U" 5       u  pU$ US:X  a(  U" 5       u  p}[        R                  " T X}-
  S-  -  SS9nU$ US:X  a>  U" 5       u  p}[        R                  " T X}-
  S-  -  SS9n[        R                  " U5      nU$ US:X  aH  [        R                  " T T S:g  [        R                  " T 5      S9* n[        R                  " T U-  SS9nU$ US:X  Gab  [        R                  " XE4[        R
                  S9n[        R                  " [        T5      5      R                  TSSS45      n[        R                  " [        T5      5      R                  STSS45      nU[        R                  " UT -  SS9-
  nU[        R                  " UT -  SS9-
  n[        R                  " [        R                  " T US-  -  SS95      n[        R                  " [        R                  " T US-  -  SS95      n[        R                  " T UU-  -  SS9nUS:  nS	UUS:  '   SUU'   U) nUU   UU   UU   -  -  UU'   U$ US;   a-  W	R                  TTSS45      n	[        R                  " T U	-  SS9nW$ )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                     > [         R                  " T5      R                  TSSS45      n [         R                  " U T-  SS9nX4$ )Nr   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.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 propertyrC   r6   rB   r:   rF   rG   rE   )whereoutrD   r   gV瞯<)r?   r@   rA   )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   graycopropsrd      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                    [        U S5        [        S5      [        S5      [        S5      [        S5      [        S5      S.n[        R                  " U R                  [        R
                  5      (       a  [        R                  " S5        [        R                  " U [        R                  S	9n [        XX$UR                  5          5      nU$ )
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`
r   DRUNV)defaultroruniformnri_uniformr[   zApplying `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.   rg   methodmethodsoutputs         r1   local_binary_patternrv   >  s    r UA s83xs83x3xG 
}}U[["++..5	
   bjj9E"5Q0GHFMr3   c                 f    [         R                  " U [         R                  S9n [        XX#U5      nU$ )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	                    [         R                  " U[         R                  S9n[         R                  " U[         R                  S9n[         R                  " U 5      n	[	        U R
                  5      S:  a  [        U 5      n	[        U	5      n	Sn
[         R                  " U
5      n
U
SS2S4==   U-  ss'   U
SS2S4==   U-  ss'   X-   nX#-   n[        U
5       H  u  pUu  nnX-   nUU-   nUSSU-
  -  -  nU(       a/  SU-
  U	UUU-   2UUU-   24   -  X-  -   nUU	UUU-   2UUU-   24'   MT  SU-
  U	UUU-   2UUU-   24   -  X-  -   nUU	UUU-   2UUU-   24'   M     U	$ )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   r   Nr   r      )
r   asarrayr"   copyr$   rJ   r   r   rP   	enumerate)r)   rz   r{   r|   r}   r~   color_greater_blockcolor_less_blockalpharu   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%:;!Q$6)!Q$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?   )rk   )r   )r   r   r   )r   gGz?gQ?g      ?)__doc__rp   numpyr   _shared.utilsr   colorr   utilr   _texturer   r	   r
   r2   rd   rv   r   r    r3   r1   <module>r      sP      $   H HXvQhK\,j !$
wr3   