o
    e25                     @   sr   d dl Zd dlZd dlmZmZ d dlmZmZm	Z	m
Z
 d dlmZ G dd dZG dd dZG d	d
 d
ZdS )    N)expected_warningsrun_in_parallel)graycomatrixgraycopropslocal_binary_patternmultiblock_lbp)integral_imagec                   @   s   e Zd Zdd Ze dd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+S ),TestGLCMc                 C   s.   t jg dg dg dg dgt jd| _d S )N)r   r      r
   )r      r   r   )r   r      r   dtypenparrayuint8imageself r   RD:\Projects\ConvertPro\env\Lib\site-packages\skimage/feature/tests/test_texture.pysetup_method   s   
zTestGLCM.setup_methodc                 C   sj  t | jdgdtjd tjd dtj d gd}|jdksJ tjg dg dg d	g d
gtjd}tj|d d d d ddf | tjg dg dg dg dgtjd}tj|d d d d ddf | tjg dg dg dg dgtjd}tj|d d d d ddf | tjg dg dg dg dgtjd}tj|d d d d ddf | d S )Nr
   r      r   r   )r   r   r
   r   )r   r   r
   r   )r   r   r   r   )r   r   r   r
   r   r   r   r
   r   )r
   r
   r   r   )r   r
   r
   r   )r   r   r   r   r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r
   r   )r   r   r   r   )r
   r
   r   r   )r   r   r   r
   	r   r   r   pishaper   uint32testingassert_array_equal)r   resultZ	expected1Z	expected2Z	expected3Z	expected4r   r   r   test_output_angles   sH   *
"
"
"
&zTestGLCM.test_output_anglesc                 C   sz   t | jdgtjd gddd}|jdksJ tjg dg dg d	g d
gtjd}tj|d d d d ddf | d S Nr
   r   r   T	symmetric)r   r   r
   r
   )   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   r   )r   r"   expectedr   r   r   test_output_symmetric_1-   s   
&z TestGLCM.test_output_symmetric_1c              	   C   sf   t tjtjtjtjfD ]%}tt t	| j
|dgtjgd W d    n1 s+w   Y  qd S Nr
   r   )floatr   doublefloat16float32float64pytestraises
ValueErrorr   r   astyper   r   r   r   r   r   test_error_raise_float7   s   zTestGLCM.test_error_raise_floatc              	   C   sj   t jt jt jt jt jt jfD ]$}tt	 t
| j|dgt jg W d    n1 s-w   Y  qd S )Nr
   )r   int16int32int64uint16r   uint64r0   r1   r2   r   r   r3   r   r4   r   r   r   test_error_raise_int_types>   s   z#TestGLCM.test_error_raise_int_typesc                 C   sR   t t t| jtjd dgtjgd W d    d S 1 s"w   Y  d S r*   )	r0   r1   r2   r   r   r3   r   r6   r   r   r   r   r   test_error_raise_negativeE   s   $"z"TestGLCM.test_error_raise_negativec                 C   sJ   t t t| jd dgtjgd W d    d S 1 sw   Y  d S )Nr
   r   )r0   r1   r2   r   r   r   r   r   r   r   r   #test_error_raise_levels_smaller_maxI   s   "z,TestGLCM.test_error_raise_levels_smaller_maxc                 C   s   t jt jt jt jt jt jfD ]B}| j|}t	|dgt j
d gddd}|jdks+J t jg dg dg d	g d
gt jd}t j|d d d d ddf | qd S r$   )r   r9   r   r:   r6   r7   r8   r   r3   r   r   r   r   r    r!   )r   r   imgr"   r(   r   r   r   test_image_data_typesM   s    
$zTestGLCM.test_image_data_typesc                 C   s   t jg dg dg dg dgt jd}t|dgdgdd	d
}t jg dg dg dg dgt jd}t j|d d d d ddf | d S )Nr   )r
   r   r   r
   )r   r   r   r   )r   r   r   r   r   r   r   r   Fr%   )r
   r   r   r   r   r
   r   r   r   r   r
   r   r   )r   r   r   r   r   r    r!   )r   imr"   r(   r   r   r   test_output_distance]   s    

&zTestGLCM.test_output_distancec                 C   s6  t jdgdgdgdggt jd}t|ddgdt jd gd}|jdks%J t jdt jd}t jg d	g d
g dg dgt jd}t jg d
g dg dg dgt jd}t j	|d d d d ddf | t j	|d d d d ddf | t j	|d d d d ddf | t j	|d d d d ddf | d S )Nr   r
   r   r   r   r   )r   r   r   r   r   r   r@   rA   r   r   )
r   r   r   r   r   r   zerosr   r    r!   )r   rB   r"   ze1e2r   r   r   test_output_comboi   s8   

"""&zTestGLCM.test_output_comboc                 C   s   t | jdgdgd}tj|d d d d ddf tjdtjd t | jdgdgddd}tj|d d d d ddf tjdtjd d S )N
   r   r   rD   r   T)normed)r   r   r   r    r!   rE   r   r   r"   r   r   r   test_output_empty   s   zTestGLCM.test_output_emptyc              
   C   s   t | jg ddtjd tjgdddd}t|jd D ]<}t|jd D ]2}tj|d d d d ||f  d tj	|d d d d ||f |d d d d ||f 
  q$qd S )	N)r
   r   r   r   r   r   TrK   r&   r         ?)r   r   r   r   ranger   r    assert_almost_equalsumr!   Z	transpose)r   r"   dar   r   r   test_normed_symmetric   s    zTestGLCM.test_normed_symmetricc                 C   sL   t | jddgdgdddd}t|d}t|d}tjj|d	 d
dd d S )Nr
   r   r   r   TrN   r   contrastr   r   gQ?decimal)r   r   r   roundr   r    rQ   )r   r"   rV   r   r   r   test_contrast   s   
zTestGLCM.test_contrastc                 C   sR   t | jdgdtjd gdddd}t|d}t|d}tjj|d	 d
dd d S )Nr
   r   r   r   TrN   r   dissimilarityrW   gn?rX   r   r   r   r   rZ   r   r    rQ   r   r"   r\   r   r   r   test_dissimilarity   s   
zTestGLCM.test_dissimilarityc                 C   sR   t | jddgtjd gdddd}t|d}t|dd }tjj|d	dd
 d S )Nr
   r   r   r   TrN   r\   rW   gHzG?rX   r]   r^   r   r   r   test_dissimilarity_2   s   zTestGLCM.test_dissimilarity_2c                 C   sP   t jdd t j}t|g dg ddd}t jt t|ddk  d S )N)d   ra      )r
   r   r      )r   g      ?r
   g      ?)ZlevelscorrelationrO   )	r   randomr3   r   r   r    Zassert_maxr   )r   r>   pr   r   r   test_non_normalized_glcm   s    z!TestGLCM.test_non_normalized_glcmc                 C   sN   t | jdgdgd}tt t|d W d    d S 1 s w   Y  d S )Nr
   r   r   ABC)r   r   r0   r1   r2   r   rL   r   r   r   test_invalid_property   s   "zTestGLCM.test_invalid_propertyc                 C   s<   t | jdgddgdddd}t|dd }tj|d	 d S )
Nr
   r   r'   r   TrN   homogeneityrW   g?r   r   r   r   r    rQ   )r   r"   rk   r   r   r   test_homogeneity   
   zTestGLCM.test_homogeneityc                 C   s<   t | jdgddgdddd}t|dd }tj|d d S )	Nr
   r   r   TrN   energyrW   g3YNp?rl   r   r"   ro   r   r   r   test_energy   rn   zTestGLCM.test_energyc                 C   sN   t | jddgdgdddd}t|d}tj|d d	 tj|d
 d d S )Nr
   r   r   r   TrN   rd   rW   g
U i?)r
   r   gl	TZZ?rl   rp   r   r   r   test_correlation   s   
zTestGLCM.test_correlationc                 C   sJ   t jdt jd}t|g ddt jd gdddd}d	D ]}t|| qd S )
NrD   r   )r
   r   rb   r   r   r   TrN   )rV   r\   rk   ro   rd   ZASM)r   Zonesr   r   r   r   )r   rB   r"   propr   r   r   test_uniform_properties   s   z TestGLCM.test_uniform_propertiesN)__name__
__module____qualname__r   r   r#   r)   r5   r;   r<   r=   r?   rC   rI   rM   rU   r[   r_   r`   rh   rj   rm   rq   rr   rt   r   r   r   r   r	   
   s.    

r	   c                   @   sd   e Zd Zdd Ze dd Zdd Zej	de
je
je
jgdd	 Zd
d Zdd Zdd ZdS )TestLBPc                 C   s:   t jg dg dg dg dg dg dgt jd| _d S )N)   r'   ry   r      r   )0               ?   )rb   r      2   ry      )   ry   r   (      ry   )r   ry   r   "   ry      )      ry   r      ~   r   r   r   r   r   r   r      s   
zTestLBP.setup_methodc              	   C   P   t | jddd}tg dg dg dg dg dg d	g}tj|| d S )
Nrb   r
   default)r      r   ry   `   ry   )   r         @   8   )   ry         r      )   g      P@>   r      r   )ry   r   ry      r      )r   rc   r   ry   r   r   r   r   r   r   r    r!   r   lbprefr   r   r   test_default   s   
zTestLBP.test_defaultc              	   C   r   )
Nrb   r
   rorr      r   ry   r   ry      r   rc   3   r
      w   ry   r   r   r   r   r   r
   r   r   r   r   ry   r
   ry   _   r   r   r   rc   r   ry   r
   r   r   r   r   r   r   test_ror      
zTestLBP.test_rorr   c              	   C   s   | j |}d}t|g t|ddd}W d    n1 sw   Y  tg dg dg dg dg d	g d
g}tj|| d S )N8Applying `local_binary_pattern` to floating-point imagesrb   r
   r   r   r   r   r   r   r   )r   r3   r   r   r   r   r    r!   )r   r   r   msgr   r   r   r   r   test_float_warning   s   
zTestLBP.test_float_warningc              	   C   r   )
Nrb   r
   uniform)r   r   r   rb   r   rb   )rc   r   	   r   r
   r   )r   rb   r   r   r   r'   )r   r
   rc   r'   rc   r   )rb   r
   rb   r   r   r   )r   r   r   rb   r
   r   r   r   r   r   r   test_uniform   r   zTestLBP.test_uniformc                 C   s   t jd t jdd}d}||  | }d\}}d}t|g t|||d}W d    n1 s4w   Y  |ddddf }|d	 |d
  | }t j|	 |d d S )Ni i  g333333?)r   r
   r   varrc   r   r
   r   )
r   re   seedZrandZstdr   r   r    rQ   mean)r   r   Z
target_stdPRr   r   r(   r   r   r   test_var  s   zTestLBP.test_varc              	   C   r   )
Nrb   r
   Znri_uniform)r   6   r   9   r   r   )r   r   :   r   r      )r   r      r   r   /   )rJ   r   r   *   #   r   )r   r   r   r   r   r   )r   r   r   r   r      )r   r   r   r   r    Zassert_array_almost_equalr   r   r   r   test_nri_uniform  r   zTestLBP.test_nri_uniformN)ru   rv   rw   r   r   r   r   r0   markZparametrizer   r-   r.   r/   r   r   r   r   r   r   r   r   rx      s    	




rx   c                   @   s   e Zd Zdd ZdS )	TestMBLBPc                 C   sx   t jddd}d|ddddf< d|d dd df< d|dd dd f< d}t|}t|d	d	dd}t j|| d S )
N)r   r   r   r   r
   r   r'   ry      r   )r   rE   r   r   r    Zassert_equal)r   Ztest_imgZcorrect_answerZint_imgZlbp_coder   r   r   test_single_mblbp,  s   zTestMBLBP.test_single_mblbpN)ru   rv   rw   r   r   r   r   r   r   *  s    r   )numpyr   r0   Zskimage._shared.testingr   r   Zskimage.featurer   r   r   r   Zskimage.transformr   r	   rx   r   r   r   r   r   <module>   s     E\