o
    et\  ã                   @   sl  d Z ddlZddlZddlZddlZddlmZ ddl	m
Z
 ddlmZ ddlmZ dZe 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 d¢g d¢g d¢g d¢g d¢g d
¢g d	¢g d	¢g¡Zdd„ ZG dd„ dejƒZdd„ Zdd„ Zej dejejejejejejejej g¡dd„ ƒZ!dd„ Z"d d!„ Z#d"d#„ Z$d$d%„ Z%d&d'„ Z&dS )(z1test_watershed.py - tests the watershed function
é    N)Úndimage)Úgaussian)Úlabelé   )Ú	watershedgê-™—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
   é   éo   ég   r   r   r   r
   r	   r   r   r   )r   r   r   r
   r   é^   éH   é4   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   s   t | tjƒst | ¡} t |tjƒst |¡}d| jv r"d|jv r"dS d|| dk< | jtjtjfv s:|jtjtjfv r]t | tj¡} t |tj¡}| j|j d  	¡ | j
|j
 d  	¡  }nt | ¡} |  tj¡} t |¡}| tj¡}| | d  	¡ }t |¡S )Nr   g        r   )Ú
isinstanceÚnpZndarrayZasarrayÚshapeÚdtypeZ	complex64Z
complex128ÚrealÚsumÚimagÚastypeZfloat64ÚmathÚsqrt)ÚaÚbÚt© r    úYD:\Projects\ConvertPro\env\Lib\site-packages\skimage/segmentation/tests/test_watershed.pyÚdiff'   s$   

*


r"   c                   @   s€   e Zd Ze de¡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 )ÚTestWatershed)é   r$   c                 C   s  t  g d¢g d¢g d¢g d¢g d¢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 d¢g d¢g d¢g d¢g d¢g
t j¡}t||| jƒ}t  g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g
¡}t||ƒ}|tk sJ ‚dS )	zwatershed 1©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)   N)r   ÚarrayÚuint8Úint8r   Úeightr"   Úeps)ÚselfÚdataÚmarkersÚoutÚexpectedÚerrorr    r    r!   Útest_watershed01@   sP   
÷	÷

÷
ö
÷

zTestWatershed.test_watershed01c                 C   s  t  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  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||ƒ}tg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g|ƒ}|  |tk ¡ d	S )
zwatershed 2r%   r&   r'   r(   r*   r+   )r)   r)   r   r   r   r)   r)   r,   N©r   r-   r.   r/   r   r"   Ú
assertTruer1   ©r2   r3   r4   r5   r7   r    r    r!   Útest_watershed02e   sX   
ö
ö
ö
ö
ö
özTestWatershed.test_watershed02c                 C   sö   t  g d¢g d¢g d¢g d¢g d¢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 d¢g d¢g d¢g d¢g d¢g
t j¡}t||ƒ}tg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g
|ƒ}|  |tk ¡ d	S )
zwatershed 3r%   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)   Nr9   r;   r    r    r!   Útest_watershed03‹   sR   
÷	÷

÷	÷

÷	÷
zTestWatershed.test_watershed03c                 C   óú   t  g d¢g d¢g d¢g d¢g d¢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 d¢g d¢g d¢g d¢g d¢g
t j¡}t||| jƒ}tg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g
|ƒ}|  |tk ¡ dS )	zwatershed 4r%   r&   r=   r>   r?   r+   r@   N©	r   r-   r.   r/   r   r0   r"   r:   r1   r;   r    r    r!   Útest_watershed04®   óR   
÷	÷

÷	÷
÷	÷
zTestWatershed.test_watershed04c                 C   rB   )	zwatershed 5r%   r&   r=   )r   r   r$   r   r   r   r   r?   r+   )r)   r$   r$   r   r   r   r)   NrC   r;   r    r    r!   Útest_watershed05Ñ   rE   zTestWatershed.test_watershed05c                 C   sè   t  g d¢g d¢g d¢g d¢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 d¢g d¢g d¢g d¢g	t j¡}t||| jƒ}tg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	|ƒ}|  |tk ¡ dS )	zwatershed 6r'   r&   r%   r*   r(   r,   r+   NrC   r;   r    r    r!   Útest_watershed06ô   sL   
øø
	øø	øø	zTestWatershed.test_watershed06c                 C   sr   t }|dk}t |jt¡}d|d< d|d< t||| j|d}t |dk¡}t |dk¡}|  t	|| ƒdk¡ dS )	z3A regression test of a competitive case that failedr   r   ©é   é   r   ©é   rJ   ©ÚmaskrI   N)
Úblobr   Úzerosr   Úintr   r0   r   r:   Úabs©r2   r3   rN   r4   r5   Zsize1Zsize2r    r    r!   Útest_watershed07  s   zTestWatershed.test_watershed07c                 C   s†   t  ¡ }d|ddd…f< |dk}t |jt¡}d|d< d|d	< t||| j|d
}t |dk¡}t |dk¡}|  	t
|| ƒdk¡ dS )z2The border pixels + an edge are all the same valuer   é
   rJ   é	   r   r   rH   r   rK   rM   rI   N)rO   Úcopyr   rP   r   rQ   r   r0   r   r:   rR   rS   r    r    r!   Útest_watershed08$  s   zTestWatershed.test_watershed08c                 C   s–   t  d¡}t j ddd¡ t¡}t  dt¡}d}|D ]\}}d|||f< ||||f< |d7 }qt|ddd}t||| jƒ t	 
| t j¡|| j¡ d	S )
z«Test on an image of reasonable size

        This is here both for timing (does it take forever?) and to
        ensure that the memory constraints are reasonable
        )éè  rY   r   rY   )éd   r   r   é   Zreflect)ÚmodeN)r   rP   ÚrandomÚuniformr   rQ   r   r   r0   ÚndiZwatershed_iftÚuint16)r2   ÚimageÚcoordsr4   ÚidxÚxÚyr    r    r!   Útest_watershed095  s   

zTestWatershed.test_watershed09c                 C   sŽ   t  g d¢g d¢g d¢g d¢gt j¡}t  g d¢g d¢g d¢g d¢gt j¡}t||| jƒ}tg d¢g d¢g d¢g d¢g|ƒ}|  |tk ¡ dS )zwatershed 10)r   r   r   r   )r   r   r   r   )r   r   r   r   )r$   r   r   r[   )r   r   r   r   )r$   r$   r[   r[   NrC   r;   r    r    r!   Útest_watershed10H  s.   
ýý
ýýýýzTestWatershed.test_watershed10c              
      sÌ   t  d¡}t  dt¡}d|d< d|d< d|d< d|d	< t  g d
¢g d¢g d
¢g¡}t|||ƒ}t jdd…dd…f \‰ ‰t  ‡ ‡fdd„dD ƒ¡}t  |d¡}|  t  	|ˆ ˆ|ˆ ˆf d f |k¡¡ dS )zFMake sure that all points on this plateau are assigned to closest seed©é   ri   r   ©é   rk   r   ©rk   rU   r$   ©rU   rk   r[   ©rU   rU   )FTF)TTTr   ri   c                    s8   g | ]\}}t  ˆ  t¡| d  ˆ t¡| d  ¡‘qS )r   )r   r   r   Úfloat)Ú.0Zi0Zj0©ÚiÚjr    r!   Ú
<listcomp>m  s    ,ÿz2TestWatershed.test_watershed11.<locals>.<listcomp>)rj   rl   rm   rn   N)
r   rP   rQ   r-   r   ZmgridZdstackÚminr:   Úall)r2   ra   r4   Z	structurer5   ÚdZdminr    rq   r!   Útest_watershed11Y  s&   

þÿÿ.zTestWatershed.test_watershed11c                 C   sÂ   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 d¢g d¢g d¢g¡}|dk}t|ƒ}t||ddd}ttdƒg d¢ƒD ]\}}|  t  ||k¡|k¡ qNdS )zThe watershed line)éË   r   ry   r
   r
   r
   r
   r
   r
   r
   r
   r
   r
   r
   r
   r
   )ry   r   ry   r
   r
   r
   éf   rz   rz   rz   rz   rz   r
   r
   r
   r
   )ry   r   ry   ry   r
   r
   rz   rz   éM   r   rz   rz   r
   r
   ry   ry   )ry   r   r   ry   r
   r
   r
   rz   rz   rz   rz   r
   r
   ry   ry   r   )ry   ry   r   ry   ry   ry   r
   r
   r
   r
   r
   r
   ry   ry   r   r   )r
   ry   r   r   r   ry   ry   ry   ry   ry   ry   ry   ry   r   r   ry   )r
   ry   ry   ry   r   r   r   r   r   r   r   r   r   r   ry   ry   )r
   r
   r
   ry   ry   ry   ry   ry   r   ry   ry   ry   ry   ry   ry   r
   )rz   rz   r
   r
   r
   r
   ry   ry   r   ry   ry   r   ry   r
   r
   r
   )rz   rz   rz   rz   rz   r
   ry   r   r   ry   ry   ry   ry   r
   rz   r
   )rz   é3   r|   rz   rz   r
   ry   r   ry   ry   r
   r
   r
   r
   rz   r
   )r{   r|   r|   rz   r
   r
   ry   r   ry   ry   ry   r
   rz   rz   rz   r
   )r{   r   r|   rz   r
   ry   ry   r   ry   r   ry   r
   rz   r|   rz   r
   )r{   r   r|   rz   r
   ry   r   r   ry   ry   ry   r
   rz   r   rz   r
   )rz   r   r|   rz   r
   ry   r   ry   ry   r
   r
   r
   rz   rz   rz   r
   )rz   rz   rz   rz   r
   ry   r   ry   r
   r
   r
   r
   r
   r
   r
   r
   r   r   T)ÚconnectivityZwatershed_liner[   )é"   éJ   r   r   N)r   r-   r   r   ÚzipÚranger:   r   )r2   r3   Z	markerbinÚmarkerÚwsÚlabÚarear    r    r!   Útest_watershed12s  s.   
ñÿzTestWatershed.test_watershed12c                 C   sr   t j ¡ jdd}t jdt jd}g d¢|g d¢g d¢f< t  |¡}t||ƒ}t j ||¡ t  	||k¡r7J ‚dS )z.Test to ensure input markers are not modified.rh   )Úsize©r   )r   r   r$   r[   )rk   rk   é   r‰   )rk   r‰   rk   r‰   N)
r   r]   Zdefault_rngrP   r.   rW   r   ÚtestingÚassert_equalrv   )r2   ra   r4   Zoriginal_markersÚresultr    r    r!   Ú!test_watershed_input_not_modified‹  s   

z/TestWatershed.test_watershed_input_not_modifiedN)Ú__name__Ú
__module__Ú__qualname__r   ÚonesÚboolr0   r8   r<   rA   rD   rF   rG   rT   rX   rf   rg   rx   r†   r   r    r    r    r!   r#   =   s    %&### r#   c                  C   sÀ   t  d¡} d| d d …dd …f< t jdtd}d|d< d|d< t| |dd	}t jg d
¢g d
¢g d
¢g d
¢g d
¢gtd}t j ||¡ t| |ƒ}t j| jtd}d|ddd …f< t j ||¡ d S )N©rk   rI   r   r$   rˆ   )r   r   r   )r   r$   ç{®Gáz„?©Úcompactness)r   r   r   r   r   r   )	r   rP   rQ   r   r-   rŠ   r‹   r‘   r   )ra   ZseedsÚcompactr6   Únormalr    r    r!   Útest_compact_watershed–  s&   

üü
r™   c                  C   sl   t  d¡} d| dd…dd…f< t| ddd}t jg d¢g d¢g d¢g d¢g d¢gt jd	}t j ||¡ dS )
z>Test that passing just the number of seeds to watershed works.r“   r   Nr$   r   r”   r•   )r   r   r   r   r   r   rˆ   )r   rP   r   r-   Úint32rŠ   r‹   )ra   r—   r6   r    r    r!   Útest_numeric_seed_watershed©  s   

üür›   r   c                 C   s4   t  d¡}t  d| ¡}t||ƒ}|j|jksJ ‚d S )N)rZ   rZ   )r   rP   r   r   )r   ra   r4   r5   r    r    r!   Útest_watershed_output_dtype¶  s   

rœ   c                  C   sN   t  d¡} t  d¡}t t¡ t| |ƒ W d   ƒ d S 1 s w   Y  d S )Nr“   ©rk   rJ   ©r   r‘   ÚpytestZraisesÚ
ValueErrorr   )ra   r4   r    r    r!   Útest_incorrect_markers_shapeÁ  s
   

"ÿr¡   c                  C   sR   t  d¡} t  d¡}t t¡ t| d|d W d   ƒ d S 1 s"w   Y  d S )Nr“   r   r[   )r4   rN   rž   )ra   rN   r    r    r!   Útest_incorrect_mask_shapeÈ  s
   

"ÿr¢   c                  C   s8   t } | dk}t| dd|d}t ||  dk¡sJ ‚d S )Nr   é   r   )r}   rN   r   )rO   r   r   rv   ©r3   rN   r5   r    r    r!   Útest_markers_in_maskÏ  s   r¥   c                  C   s.   t } | dk}t| |d}t |¡dksJ ‚d S )Nr   rM   r   )rO   r   r   Úmaxr¤   r    r    r!   Útest_no_markers×  s   r§   c                  C   sÄ  t  d¡\} }d\}}}}}}}}	d\}
}}}| | d || d  |
d k }| | d || d  |d k }| | d || d  |d k }| | d ||	 d  |d k }t  ||¡}t  ||¡}t  ||¡}t |¡}t j|d ddd }t  |dkdd¡}td	| |dd
d}td	| |dd
d}t  |¡j	d dks¢J ‚t  |¡j	d dks®J ‚t
tdƒg d¢ƒD ]\}}t  ||k¡|ksÆJ ‚q·t
tdƒg d¢ƒD ]\}}t  ||k¡|ksßJ ‚qÐdS )z§
    Watershed segmentation should output different result for
    different connectivity
    when markers are calculated where None is supplied.
    Issue = 5084
    )i–  i  )éÈ   éÐ   i,  éx   rZ   rZ   iT  r©   )rZ   é2   é(   éP   r   é   r   )Zdecimalsr   r¨   r”   )rN   r}   r–   rI   rk   )é€ñ  éE  ióO  iY+  i  i,  )r¯   r°   iòO  ib0  i,  N)r   ÚindicesÚ
logical_orr_   Zdistance_transform_edtZaroundÚwherer   Úuniquer   r€   r   r   )rd   re   Úx1Úy1Zx2Úy2Zx3Zy3Zx4Zy4Úr1Úr2Zr3Zr4Zmask_circle1Zmask_circle2Zmask_circle3Zmask_circle4ra   ZDummyBTZDummyBT_disZImg_maskZ	labels_c1Z	labels_c2r„   r…   r    r    r!   Útest_connectivityÞ  s4       
ÿÿÿrº   )'Ú__doc__r   ZunittestÚnumpyr   rŸ   Zscipyr   r_   Zskimage._shared.filtersr   Zskimage.measurer   Z
_watershedr   r1   r-   rO   r"   ZTestCaser#   r™   r›   ÚmarkZparametrizer.   r/   r`   Zint16Zuint32rš   Zuint64Zint64rœ   r¡   r¢   r¥   r§   rº   r    r    r    r!   Ú<module>   sb    
ì  [ÿÿ
