o
    j?                     @   s  d dl Zd dlZd dlmZ d dlmZmZm	Z	 d dl
mZmZmZ d dlmZ d dlmZmZ d dlmZmZmZ d dlmZmZ ejd	d
 Zejdd Zejejejej ej!ej"fZ#G dd dZ$G dd dZ%ejejejej ej!ej"gZ&ej'(de&dd Z)dd Z*ej ejgZ+ej'(de+dd Z,dd Z-dd Z.dd Z/e0g dg dg d g d!g d"gZ1e0g d#g d$g d%g d&g d'gZ2e0g d(g d)g d*g d+g d,gZ3e0g d-g d.g d/g d0g d1gZ4e0g d2g d(g d3g d4g d5gZ5d6d7 Z6d8d9 Z7d:d; Z8d<d= Z9ej'(dg d>ej'(d?g d@ej'(dAg d@ej'(dBdCdDgdEdF Z:ej'(dg d>ej'(dGdHej'(dBdDgdIdJ Z;ej'(dg d>ej'(dKdLej'(dMdNej'(dBdDgej'<dOdPdQ Z=ej'(dg d>ej'(dRdSdTgej'(dBdCdDgdUdV Z>ej'(dg d>ej'(dGdWej'(dBdDgdXdY Z?ej'(dZejejgej'(d[d\d]gej'(d^g d_d`da Z@dS )b    N)ndimage)assert_allcloseassert_array_equalassert_equal)colordata	transform)expected_warnings)fetchassert_stacklevel)gray
footprintsfootprint_rectangle)img_as_uintimg_as_ubytec                  C   s*   ddl m}  t|  ddddf S )Nr   r   @   p   `   )skimager   npascontiguousarraycamerar    r   c/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/skimage/morphology/tests/test_gray.py	cam_image   s   r   c                  C   s2   ddl m}  t|  dddddddf S )Nr   r      0      $       )r   r   r   r   Zcells3dr   r   r   r   cell3d_image   s   &r!   c                   @   sz   e Zd Zdd Zdd Zdd Zdd Zej	d	e
ej	d
ejdd Zej	d	e
ej	d
g ddd ZdS )TestMorphologyc           	      C   s   dd }|t jt jt jf}tttt	
 d}i }tddD ]!}|D ]}tD ]}|j d| d|j }||||||< q)q%q!|S )Nc                 S   s   t | | fS N)r   )nr   r   r   square/   s   z5TestMorphology._build_expected_output.<locals>.square)r   r         _)r   diamondZdiskstarr   r   Zdownscale_local_meanr   Zrgb2grayr   coffeerangegray_morphology_funcs__name__)	selfr%   Zfootprints_2Dimageoutputr$   strelfunckeyr   r   r   _build_expected_output.   s$   z%TestMorphology._build_expected_outputc                 C   s(   t ttd}|  }t|| d S )Nzdata/gray_morph_output.npz)dictr   loadr
   r5   r   )r/   expectedZ
calculatedr   r   r   test_gray_morphologyF   s   z#TestMorphology.test_gray_morphologyc                 C   sj   t  }tg dg dg dg}tj||d}t||kr"J tj||dd}t||ks3J d S N)r   r   r&   )r   r&   r&   )r&   r&   r&   	footprintignore)r<   mode)r   coinsr   arrayr   closingall)r/   imgr<   result_defaultresultr   r   r   test_gray_closing_extensiveK      z*TestMorphology.test_gray_closing_extensivec                 C   sj   t  }tg dg dg dg}tj||d}t||kr"J tj||dd}t||ks3J d S r:   )r   r?   r   r@   r   openingrB   )r/   rC   r<   rD   Zresult_ignorer   r   r    test_gray_opening_anti_extensiveV   rG   z/TestMorphology.test_gray_opening_anti_extensiver3   r>   c                 C   s   t d}|||d d S )N
   rK   r>   )r   onesr/   r3   r>   rC   r   r   r   test_supported_modea   s   
z"TestMorphology.test_supported_mode) Z	symmetric   Nc                 C   sJ   t d}tjtdd |||d W d    d S 1 sw   Y  d S )NrJ   zunsupported modematchrL   )r   rM   pytestraises
ValueErrorrN   r   r   r   test_unsupported_modeg   s   
"z$TestMorphology.test_unsupported_modeN)r.   
__module____qualname__r5   r9   rF   rI   rT   markparametrizer-   r   Z_SUPPORTED_MODESrO   rW   r   r   r   r   r"   %   s    	r"   c                   @   s\   e Z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 ) TestEccentricStructuringElementsc                 C   sH   dt jdt jd | _d| jd< d| j | _tdtdtdg| _d S )N   )   r^   Zdtyper   )   r`   )r`   r&   )r   rM   uint8black_pixelwhite_pixelr   r   )r/   r   r   r   setup_classp   s   

z,TestEccentricStructuringElements.setup_classc                 C   sB   | j D ]}t| j|}t| j|}t|d| ksJ qd S Nr]   )r   r   erosionrb   dilationrc   r   rB   )r/   scdr   r   r   test_dilate_erode_symmetryz   s
   
z;TestEccentricStructuringElements.test_dilate_erode_symmetryc                 C   2   | j D ]}t| j|}t|| jksJ qd S r#   )r   r   rH   rb   r   rB   )r/   rh   Z	gray_openr   r   r   test_open_black_pixel      
z6TestEccentricStructuringElements.test_open_black_pixelc                 C   rl   r#   )r   r   rA   rc   r   rB   )r/   rh   Z
gray_closer   r   r   test_close_white_pixel   rn   z7TestEccentricStructuringElements.test_close_white_pixelc                 C   ,   | j D ]}tt| j|dksJ qd S Nr   )r   r   rB   r   rH   rc   r/   rh   r   r   r   test_open_white_pixel      
z6TestEccentricStructuringElements.test_open_white_pixelc                 C   rp   re   )r   r   rB   r   rA   rb   rr   r   r   r   test_close_black_pixel   rt   z7TestEccentricStructuringElements.test_close_black_pixelc                 C   rl   r#   )r   r   white_tophatrc   r   rB   r/   rh   tophatr   r   r   test_white_tophat_white_pixel   rn   z>TestEccentricStructuringElements.test_white_tophat_white_pixelc                 C   s2   | j D ]}t| j|}t|| jksJ qd S r#   )r   r   black_tophatrb   r   rB   rc   rw   r   r   r   test_black_tophat_black_pixel   rn   z>TestEccentricStructuringElements.test_black_tophat_black_pixelc                 C   0   | j D ]}t| j|}t|dksJ qd S rq   )r   r   rv   rb   r   rB   rw   r   r   r   test_white_tophat_black_pixel      
z>TestEccentricStructuringElements.test_white_tophat_black_pixelc                 C   r|   rq   )r   r   rz   rc   r   rB   rw   r   r   r   test_black_tophat_white_pixel   r~   z>TestEccentricStructuringElements.test_black_tophat_white_pixelN)r.   rX   rY   rd   rk   rm   ro   rs   ru   ry   r{   r}   r   r   r   r   r   r\   o   s    
r\   functionc                 C   s   t jdd}tg dg dg dg dg dg dg dg dg dg dg dg dg dgtj}| ||}| |}t|| d S )Nr&   )radius)
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@   ra   r   )r   r2   r0   Zim_expectedZim_testr   r   r   test_default_footprint   s*   
r   c                  C   sn   t dt} d| ddddddf< t| }t jdtd}tdd|ddddddf< t|| d S )N   r   r   r&   r`   r_   rQ      )r   zerosboolr   rH   ndigenerate_binary_structurer   )r0   openedimage_expectedr   r   r   "test_3d_fallback_default_footprint   s   
"r   c                 C   sN   t dt}d|ddddddf< t jdt jd}| ||}t|| d S )Nr   r&   r`   r   )rQ   rQ   rQ   r_   )r   r   r   rM   ra   r   )r   r0   Zcube	new_imager   r   r   test_3d_fallback_cube_footprint   s
   
r   c                  C   s   t jdtd} d| dddddf< d| dddddf< d| dddddf< tdg t| }W d    n1 s=w   Y  tdd}tdg tj| jt j	d|d	}W d    n1 sdw   Y  t
|| d S )
Nr   r_   r&   r`   r'   rQ   r   operator.*deprecated|\A\Zr;   )r   r   r   r	   r   rv   r   r   viewra   r   r0   r   r<   r   r   r   r   test_3d_fallback_white_tophat      r   c                  C   s   t jdtd} d| dddddf< d| dddddf< d| dddddf< tdg t| }W d    n1 s=w   Y  tdd	}tdg tj| jt j	d|d
}W d    n1 sdw   Y  t
|| d S )Nr   r_   r   r`   r'   rQ   r   r   r&   r;   )r   rM   r   r	   r   rz   r   r   r   ra   r   r   r   r   r   test_3d_fallback_black_tophat   r   r   c                  C   s   t dt j} d| ddddf< d| ddddf< d| d	< t| }t| }tdd
}tj| |d}tj	| |d}t
|| t
|| d S )N)	   r      r`   r      rQ   r]   )r'   r'   r&   r;   )r   r   ra   r   rH   rA   r   r   Zgrey_openingZgrey_closingr   )r0   r   closedr<   Zndimage_openedZndimage_closedr   r   r   test_2d_ndimage_equivalence  s   


r   )皙?
ףp=
?g333333?HzG?zG?)g?)\(?{Gz?Q?RQ?)HzG?(\?g=
ףp=?(\?Q?)
ףp=
?{Gz?(\?(\?ףp=
?)\(\?g?q=
ףp?r   Q?)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   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   c                   C   sD   t ttt t ttt t ttt t t	tt
 d S r#   )r   r   rf   imerodedrg   dilatedrH   r   rA   r   r   r   r   r   
test_floatL  s   r   c                  C   sb   t ttttttg\} }}}}tt	| | tt
| | tt| | tt| | d S r#   )mapr   r   r   r   r   r   r   r   rf   rg   rH   rA   )Zim16Zeroded16Z	dilated16Zopened16Zclosed16r   r   r   test_uint16S  s   r   c                  C   s   t g dg dg dgt j} t dt j}|d d dd d df }t g dg dg dg dg d	gt j}t g d
g dg dg dg dgt j}tj| |d t|| tj| |d t|| d S )N)r   r^   r`   )r   r`   r`   )rQ   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&   )rQ   r   r&   r   r&   )out)r   r@   ra   r   r   rg   r   rf   )r0   Zout_array_bigZ	out_arrayZexpected_dilationZexpected_erosionr   r   r   test_discontiguous_out_array]  s2    


r   c                  C   s4   t g d} t g d}t| }t|| d S )N)r&   r`   rQ   r`   r&   )r&   r&   r`   r&   r&   )r   r@   r   rf   r   )r0   r8   r   r   r   r   test_1d_erosion{  s   
r   )rf   rg   rA   rH   rv   rz   nrows)rQ   r      ncolsdecompositionZ	separablesequencec           
      C   sP   t ||fdd}t ||f|d}tt|}|| |d}|| |d}	t||	 dS tValidate footprint decomposition for various shapes.

    comparison is made to the case without decomposition.
    Nr   r;   r   getattrr   r   )
r   r   r   r   r   footprint_ndarrayr<   r3   r8   r   r   r   r   test_rectangle_decomposition  s   
r   r   )r`   rQ   c           	      C   L   t j|dd}t j||d}tt|}|| |d}|| |d}t|| dS r   )r   r)   r   r   r   )	r   r   r   r   r   r<   r3   r8   r   r   r   r   test_diamond_decomposition     
r   m)r   r&   rQ   r   r$   )r   r&   r`   rQ   zFignore:.*falling back to decomposition='separable':UserWarning:skimagec           
      C   s   |dkr(|dkr(t t tj|||d W d   dS 1 s!w   Y  dS tj||dd}tj|||d}tt|}|| |d}|| |d}	t||	 dS )r   r   r   Nr;   )rT   rU   rV   r   Zoctagonr   r   r   )
r   r   r   r$   r   r   r<   r3   r8   r   r   r   r   test_octagon_decomposition  s   "
r   shape)r   r   r   )r   r   r   c           	      C   sH   t |dd}t ||d}tt|}|| |d}|| |d}t|| dS r   r   )	r!   r   r   r   r   r<   r3   r8   r   r   r   r   test_cube_decomposition  s   
r   )rQ   c           	      C   r   r   )r   Z
octahedronr   r   r   )	r!   r   r   r   r   r<   r3   r8   r   r   r   r   test_octahedron_decomposition  r   r   r3   nameZshift_xZshift_yvalue)TFNc                 C   sd   t d}| | d}tjt|d}| |fi ||i W d    n1 s'w   Y  t| d S )NrK   z&`shift_x` and `shift_y` are deprecatedrR   )r   rM   rT   ZwarnsFutureWarningr   )r3   r   r   rC   regexrecordr   r   r   test_deprecated_shift  s   
r   )Anumpyr   rT   Zscipyr   r   Znumpy.testingr   r   r   r   r   r   r   Zskimage._shared._warningsr	   Zskimage._shared.testingr
   r   Zskimage.morphologyr   r   r   Zskimage.utilr   r   Zfixturer   r!   rf   rg   rH   rA   rv   rz   r-   r"   r\   Zgray_functionsrZ   r[   r   r   Zgray_3d_fallback_functionsr   r   r   r   r@   r   r   r   r   r   r   r   r   r   r   r   filterwarningsr   r   r   r   r   r   r   r   <module>   s    


J9







