U
    ?h3                     @   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ddddgddddgddddgddddggt jd| _d S )Nr            dtypenparrayuint8imageself r   T/var/www/html/venv/lib/python3.8/site-packages/skimage/feature/tests/test_texture.pysetup_method   s    


zTestGLCM.setup_methodc                 C   s  t | jdgdtjd tjd dtj d gd}|jdks>ttjddddgddddgddddgddddggtjd}tj	|d d d d ddf | tjddddgddddgddddgddddggtjd}tj	|d d d d ddf | tjddddgddddgddddgddddggtjd}tj	|d d d d ddf | tjddddgddddgddddgddddg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   pishapeAssertionErrorr   uint32testingassert_array_equal)r   resultZ	expected1Z	expected2Z	expected3Z	expected4r   r   r   test_output_angles   sN        


"


"


"


zTestGLCM.test_output_anglesc                 C   s   t | jdgtjd gddd}|jdks,ttjddddgddddgddddgddddg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!   expectedr   r   r   test_output_symmetric_1-   s    


z TestGLCM.test_output_symmetric_1c              
   C   sR   t tjtjtjtjfD ]6}tt" t	| j
|dgtjgd W 5 Q R X 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   sV   t jt jt jt jt jt jfD ]4}tt	  t
| j|dgt jg W 5 Q R X qd S )Nr
   )r   int16int32int64uint16r   uint64r/   r0   r1   r   r   r2   r   r3   r   r   r   test_error_raise_int_types>   s         z#TestGLCM.test_error_raise_int_typesc              	   C   s<   t t( t| jtjd dgtjgd W 5 Q R X d S r)   )	r/   r0   r1   r   r   r2   r   r5   r   r   r   r   r   test_error_raise_negativeE   s    z"TestGLCM.test_error_raise_negativec              	   C   s4   t t  t| jd dgtjgd W 5 Q R X d S )Nr
   r   )r/   r0   r1   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 ]}| j|}t	|dgt j
d gddd}|jdksVtt jddddgddddgddddgddddggt jd	}t j|d d d d ddf | qd S r#   )r   r8   r   r9   r5   r6   r7   r   r2   r   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ddddgddddgddddgddddggt jd}t|dgdgddd}t jddddgddddgddddgddddggt jd}t j|d d d d ddf | d S )	Nr   r
   r   r   r   r   Fr$   )r   r   r   r   r   r   r    )r   imr!   r'   r   r   r   test_output_distance]   s     





zTestGLCM.test_output_distancec                 C   sV  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sJtt jdt jd}t jddddgddddgddddgddddggt jd}t jddddgddddgddddgddddg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   r   r   r   r   r   r   zerosr   r   r    )r   r?   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   rA   r   T)normed)r   r   r   r   r    rB   r   r   r!   r   r   r   test_output_empty   s    zTestGLCM.test_output_emptyc              
   C   s   t | jdddgdtjd tjgdddd}t|jd D ]x}t|jd D ]d}tj|d d d d ||f  d tj	|d d d d ||f |d d d d ||f 
  qJq8d S )	Nr
   r   r   r   r   TrH   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   TrK   r   contrastr   r   gQ?decimal)r   r   r   roundr   r   rN   )r   r!   rS   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   TrK   r   dissimilarityrT   gn?rU   r   r   r   r   rW   r   r   rN   r   r!   rY   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   TrK   rY   rT   gHzG?rU   rZ   r[   r   r   r   test_dissimilarity_2   s     zTestGLCM.test_dissimilarity_2c                 C   sX   t jdd t j}t|ddddgdddd	gdd
}t jt t|ddk  d S )N)d   r^      r
   r   r      r   g      ?g      ?)ZlevelscorrelationrL   )	r   randomr2   r   r   r   Zassert_maxr   )r   r=   pr   r   r   test_non_normalized_glcm   s     z!TestGLCM.test_non_normalized_glcmc              	   C   s8   t | jdgdgd}tt t|d W 5 Q R X d S )Nr
   r   r   ABC)r   r   r/   r0   r1   r   rI   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   TrK   homogeneityrT   g?r   r   r   r   r   rN   )r   r!   rh   r   r   r   test_homogeneity   s
    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   TrK   energyrT   g3YNp?ri   r   r!   rk   r   r   r   test_energy   s
    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   TrK   ra   rT   g
U i?)r
   r   gl	TZZ?ri   rl   r   r   r   test_correlation   s    
zTestGLCM.test_correlationc                 C   sL   t jdt jd}t|dddgdt jd gdddd	}d
D ]}t|| q8d S )NrA   r   r
   r   r_   r   r   TrK   )rS   rY   rh   rk   ra   ZASM)r   Zonesr   r   r   r   )r   r?   r!   propr   r   r   test_uniform_properties   s    z TestGLCM.test_uniform_propertiesN)__name__
__module____qualname__r   r   r"   r(   r4   r:   r;   r<   r>   r@   rF   rJ   rR   rX   r\   r]   re   rg   rj   rm   rn   rp   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   sj   t jddddddgddddd	d
gddddddgddd
dddgddddddgddddddggt jd| _d S )N   r&   r      0               ?   r_      2         (      "               ~   r   r   r   r   r   r   r      s    zTestLBP.setup_methodc                 C   s   t | jddd}tddddddgddd	d
ddgddddddgddddddgddddddgddddddgg}tj|| d S )Nr_   r
   defaultr      ru   `            @   8                  g      P@>   r}      r         r   r`   r   r   r   r   r   r   r    r   lbprefr   r   r   test_default   s    zTestLBP.test_defaultc                 C   s   t | jddd}tddddddgddd	d
ddgddddddgddddddgddddddgdd	ddddgg}tj|| d S )Nr_   r
   rorr      ru   r      r`   3      w   r|   _   r   r   r   r   r   test_ror   s    zTestLBP.test_rorr   c                 C   s   | j |}d}t|g t|ddd}W 5 Q R X tddddddgd	dd
dddgddddddgddd	dd	dgddddddgdd
ddddgg}tj|| d S )N8Applying `local_binary_pattern` to floating-point imagesr_   r
   r   r   r   ru   r   r   r`   r   r   r   r|   r   )r   r2   r   r   r   r   r   r    )r   r   r   msgr   r   r   r   r   test_float_warning   s    zTestLBP.test_float_warningc                 C   s   t | jddd}tddddddgdddddd	gdddddd
gdddd
ddgddddddgddddddgg}tj|| d S )Nr_   r
   uniformr   r   r   r`   	   r   r&   r   r   r   r   r   test_uniform   s    zTestLBP.test_uniformc              	   C   s   t jd t jdd}d}||  | }d\}}d}t|g t|||d}W 5 Q R X |ddddf }|d	 |d
  | }t j|	 |d d S )Ni i  g333333?)r   r
   r   varr`   r   r
   r   )
r   rb   seedZrandZstdr   r   r   rN   Zmean)r   r   Z
target_stdPRr   r   r'   r   r   r   test_var  s    zTestLBP.test_varc                 C   s   t | jddd}tddddddgddd	d	d
dgd	dddddgdd
ddddgdddd	ddgdd	ddddgg}tj|| d S )Nr_   r
   Znri_uniformr   6   9   r   r   :   r         r~   /   rG   r   *   #   r   r   r      )r   r   r   r   r   Zassert_array_almost_equalr   r   r   r   test_nri_uniform  s    zTestLBP.test_nri_uniformN)rq   rr   rs   r   r   r   r   r/   markZparametrizer   r,   r-   r.   r   r   r   r   r   r   r   r   rt      s   	




rt   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&   ru      r   )r   rB   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)rq   rr   rs   r   r   r   r   r   r   *  s   r   )numpyr   r/   Zskimage._shared.testingr   r   Zskimage.featurer   r   r   r   Zskimage.transformr   r	   rt   r   r   r   r   r   <module>   s    E\