o
    cip5                     @   s   d dl Zd dlZd dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZmZmZ d dlmZmZmZ G dd	 d	ZG d
d dZG dd dZdS )    N)assert_array_equal)iodraw)fetch)binary_blobs)medial_axisskeletonizethin)G123_LUT	G123P_LUT_generate_thin_lutsc                   @   sF  e Zd Zejdddgdd Zejdg ddd	 Zd
d Zejdddgdd Z	ejdddgdd Z
ejdddgdd Zejdddgdd Zdd Zejdddgejdeeegdd Zdd Zejdg dejdeejgdd Zejdddgdd Zd d! Zd"d# Zd$S )%TestSkeletonizemethodzhangleec                 C   s*   t d}t||d}t|t d d S )N   r   r   )npzerosr   r   selfr   imageresult r   s/var/www/addictedbytheproject.nl/epg/venv/lib/python3.10/site-packages/skimage/morphology/tests/test_skeletonize.pytest_no_foreground   s   
z"TestSkeletonize.test_no_foregroundzndim,method))   r   )   r   )r   r   )   r   c                 C   sN   t jd| td}tt t||d W d    d S 1 s w   Y  d S )N)r   dtyper   )r   r   boolpytestraises
ValueErrorr   )r   ndimr   r   r   r   r   test_wrong_ndim   s   "zTestSkeletonize.test_wrong_ndimc                 C   sJ   t jdtd}tt t|dd W d    d S 1 sw   Y  d S )Nr   r    foor   )r   onesr"   r#   r$   r%   r   r   r   r   r   r   test_wrong_method   s   "z!TestSkeletonize.test_wrong_methodc                 C   sr   t jdtd}t||d}|dkr"t jg dg dg dgtd}nt jg dg dg dgtd}t|| d S )	N)r   r   r    r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r)   r"   r   arrayr   )r   r   r   r   expectedr   r   r   test_skeletonize_all_foreground!   s   " z/TestSkeletonize.test_skeletonize_all_foregroundc                 C   s0   t jdtd}d|d< t||d}t|| d S )Nr   r    r   )r   r   r   )r   r   r"   r   r   r   r   r   r   test_single_point+   s   z!TestSkeletonize.test_single_pointc                 C   s(   t jdtd}t||d}t|| d S )N)r   r   r    r   )r   r)   r"   r   r   r   r   r   r   test_vec_1d2   s   zTestSkeletonize.test_vec_1dc                 C   sF   t jg dg dg dg dg dgtd}t||d}t|| d S )N)r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   r    r   r   r,   r"   r   r   r   r   r   r   test_already_thinned9   s   
z$TestSkeletonize.test_already_thinnedc                 C   s>   t jtddd}|dk}t|}ttd}t|| d S )Nzdata/bw_text.pngT)as_grayr   zdata/bw_text_skeleton.npy)r   imreadr   r   r   loadr   r   r   r   r-   r   r   r   test_outputH   s
   zTestSkeletonize.test_outputr!   c                 C   sZ  t jd|d}d|ddddf< d|ddddf< d	|ddddf< td
ddd\}}tdD ]
}d||| |f< q3tddd
d\}}tdD ]
}d||| |f< qLt |j\}}|d d |d d  dk }	|d d |d d  dk }
d||	< d||
< t||dt j	}t 
ddgddggt j	}tj||dd}t |dkrJ d S )N),  r8   r    r   
   id      ir         i  r      r      i  i  r   r   constant)mode)r   r   r   linerangeindicesshaper   astypeuint8r,   ndi	correlateany)r   r   r!   r   rscsiiriccircle1circle2r   maskblocksr   r   r   test_num_neighborsR   s&   z"TestSkeletonize.test_num_neighborsc                 C   s   t jg dg dg dg dg dg dgtd}t|}t jg dg dg dg dg d	g dgtd}t ||ks?J d S )
N)r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   r    )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r,   r"   r   allr6   r   r   r   test_lut_fixr   s,   zTestSkeletonize.test_lut_fix))r;   r   )r;   r   )r   r   c                 C   sD   t jd| |d}t |d}| }t||d}t j|| d S )N)r   r    r   r   )r   r)   padcopyr   testingr   )r   r   r&   r!   r   original_r   r   r   test_input_not_modified   s
   z'TestSkeletonize.test_input_not_modifiedc                 C   s\   t jdd d dd d df }d||dk < | }t||d}|jtks'J t|| d S )N)   r]   r;   g        g      ?r   )r   randomrX   r   r!   r"   r   )r   r   r   rZ   r   r   r   r   test_input_float_conv   s    z%TestSkeletonize.test_input_float_convc                 C   s   t j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td}t j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td}t|dd}t|| d S )N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r1   r   r   r-   r   r   r   r   test_two_hole_image_vs_fiji   sL   z+TestSkeletonize.test_two_hole_image_vs_fijic                 C   sJ   t ddddd}|d ddf }t|}ttdt}t|| d S )	N    g?r   i  )n_dimrng.z data/_blobs_3d_fiji_skeleton.tif)r   r   r   r4   r   rF   r"   r   r6   r   r   r   test_3d_vs_fiji   s
   zTestSkeletonize.test_3d_vs_fijiN)__name__
__module____qualname__r#   markparametrizer   r'   r+   r.   r/   r0   r2   r7   r"   floatintrT   rV   r   rG   r\   r_   ra   rf   r   r   r   r   r      s8    


	




+r   c                   @   s   e Zd Zedd Zdd Zejde	e
egdd Zejde	e
egdd	 Zejde	e
egd
d Zdd Zdd ZdS )TestThinc              	   C   s<   t jg dg dg dg dg dg dg dgtd}|S )Nr   r   r   r   r   r   r   )r   r   r;   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r      r   r   r   r   r   r    )r   r,   rl   r   iir   r   r   input_image   s   	zTestThin.input_imagec                 C   s(   t jdtd}t t|dksJ d S N)r9   r9   r    F)r   r   r"   rU   r	   r*   r   r   r   test_all_zeros   s   zTestThin.test_all_zerosr!   c                 C   s.   | j |}| }t| tj|| dS )z0Ensure thinning does not modify the input image.N)rs   rF   rX   r	   r   rY   r   )r   r!   r   rZ   r   r   r   test_thin_copies_input   s   zTestThin.test_thin_copies_inputc              	   C   sb   | j |}t|dt}tjg dg dg dg dg dg dg dgtd}t|| d S )Nr   ro   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r    rs   rF   r	   r"   r   r,   r   r   r!   r   r   r-   r   r   r   test_iter_1   s   	zTestThin.test_iter_1c              	   C   s`   | j |}t|t}tjg dg dg dg dg dg dg dgtd}t|| d S )Nro   rw   )r   r   r   r   r   r   r   r    rx   ry   r   r   r   test_noiter  s   	zTestThin.test_noiterc              	   C   sX   t jdtdt jdtdfD ]}tt t| W d    n1 s$w   Y  qd S )Nr   r    )r   r   r   )r   r   r"   r#   r$   r%   r	   rq   r   r   r   test_baddim  s    
zTestThin.test_baddimc                 C   s"   t  \}}t|t t|t d S )N)r   r   r
   r   )r   g123g123pr   r   r   test_lut_generation  s   

zTestThin.test_lut_generationN)rg   rh   ri   propertyrs   ru   r#   rj   rk   r"   rl   rm   rv   rz   r{   r|   r   r   r   r   r   rn      s    



rn   c                   @   sP   e Zd Zdd Zdd Zejdee	e
gdd Zdd	 Zd
d Zdd ZdS )TestMedialAxisc                 C   s(   t tjdtd}t|dksJ d S rt   r   r   r   r"   rU   r   r   r   r   r   ru   '  s   zTestMedialAxis.test_all_zerosc                 C   s4   t tjdtdtjdtd}t|dksJ d S rt   r   r   r   r   r   test_all_zeros_masked+  s   z$TestMedialAxis.test_all_zeros_maskedr!   c                 C   sr   t jd|d}d|d d df< d|d d df< d|d d df< t |jd}d|d d df< t|}t|| d S )	N)	   r   r    r   r;   r   r   FT)r   r   fullrE   r   r   )r   r!   r   r-   r   r   r   r   test_vertical_line1  s   z!TestMedialAxis.test_vertical_linec                 C   s   t jdtd}d|ddddf< t jg dg dg dg d	g d
g d	g dg dg dg	td}t|}t ||ks@J t|dd\}}| dksPJ d S )Nr      r    Tr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )return_distancer   )r   r   r"   r,   r   rU   max)r   r   r-   r   distancer   r   r   test_rectangle?  s&   zTestMedialAxis.test_rectanglec                 C   s   t jdtd}d|ddddf< d|dddf< t jg d	g d
g dg dg dg dg dg d
g d	g	td}t|}t ||ksHJ d S )Nr   r    Tr   r   Fr   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r"   r,   r   rU   r`   r   r   r   test_rectange_with_holeV  s$   z&TestMedialAxis.test_rectange_with_holec                 C   s@   t jdtd}d|d d ddf< t|}t ||ksJ d S )N)r   r   r    Tr   r   )r   r   r"   r   rU   )r   r   r   r   r   r   test_narrow_imagek  s   z TestMedialAxis.test_narrow_imageN)rg   rh   ri   ru   r   r#   rj   rk   r"   rl   rm   r   r   r   r   r   r   r   r   r   &  s    
r   )numpyr   r#   numpy.testingr   scipy.ndimagendimagerH   skimager   r   skimage._shared.testingr   skimage.datar   skimage.morphologyr   r   r	   skimage.morphology._skeletonizer
   r   r   r   rn   r   r   r   r   r   <module>   s     LN