
    a6d!                         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 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
          Z G d d          Z G d d          ZdS )    N)assert_array_equal)	correlate)draw)fetch)imread)medial_axisskeletonizethin)_generate_thin_lutsG123_LUT	G123P_LUTc                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )TestSkeletonizec                     t          j        d          }t          |          }t          |t          j        d                     d S )N   r   )npzerosr	   r   selfimresults      Ilib/python3.11/site-packages/skimage/morphology/tests/test_skeletonize.pytest_skeletonize_no_foregroundz.TestSkeletonize.test_skeletonize_no_foreground   s<    XfR628F#3#344444    c                     t          j        d          }t          j        t                    5  t          |           d d d            d S # 1 swxY w Y   d S )Nr   r   r   pytestraises
ValueErrorr	   r   r   s     r   test_skeletonize_wrong_dim1z+TestSkeletonize.test_skeletonize_wrong_dim1   s    Xa[[]:&& 	 	OOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAc                     t          j        d          }t          j        t                    5  t          |d           d d d            d S # 1 swxY w Y   d S )N)r   r   r   zhang)methodr   r!   s     r   test_skeletonize_wrong_dim2z+TestSkeletonize.test_skeletonize_wrong_dim2   s    Xi  ]:&& 	, 	,7++++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   AAAc                 L    t          j        d          }t          |           d S )N      )r   onesr	   r!   s     r   test_skeletonize_all_foregroundz/TestSkeletonize.test_skeletonize_all_foreground   s    WV__Br   c                     t          j        dt           j                  }d|d<   t          |          }t	          ||           d S )Nr      r)   r)   r   r   uint8r	   r   r   s      r   test_skeletonize_single_pointz-TestSkeletonize.test_skeletonize_single_point"   s?    Xfbh''4R62&&&&&r   c                     t          j        dt           j                  }d|dddf<   d|d<   d|d<   t          |          }t	          ||           d S )Nr   r.   r)   )   r4   )r*   r   r0   r   s      r    test_skeletonize_already_thinnedz0TestSkeletonize.test_skeletonize_already_thinned(   sY    Xfbh''1ad75	4R62&&&&&r   c                     t          t          d          d          }|dk    }t          |          }t          j        t          d                    }t          ||           d S )Nzdata/bw_text.pngT)as_grayr   zdata/bw_text_skeleton.npy)r   r   r	   r   loadr   r   r   r   expecteds       r   test_skeletonize_outputz'TestSkeletonize.test_skeletonize_output0   sa    E,--t<<< AgR75!<==>>68,,,,,r   c                    t          j        d          }d|ddddf<   d|ddddf<   d|ddddf<   t          j        dddd	          \  }}t	          d          D ]}d|||z   |f<   t          j        dddd	          \  }}t	          d
          D ]}d|||z   |f<   t          j        |j                  \  }}|dz
  dz  |dz
  dz  z   dk     }|dz
  dz  |dz
  dz  z   dk     }d||<   d||<   t          |          }	t          j        ddgddggt           j	                  }
t          |	|
d          }t          j        |dk              rJ d S )N),  r>   r.   
   id   i      i        r5   i  i  r   constant)moder*   )r   r   r   linerangeindicesshaper	   arrayr1   r   any)r   imagerscsiiriccircle1circle2r   maskblockss               r   test_skeletonize_num_neighborsz.TestSkeletonize.test_skeletonize_num_neighbors:   s   $$ !"bfbfn"#d3h3"#bfd3h 3R--Br 	" 	"A !E"q&"*2sC--Br 	" 	"A !E"q&"* EK((B8a-28a-/%78a-28a-/%7ggU## x!aa"#%8- -64j9996&A+&&&&&&&r   c           	      @   t          j        dt           j                  }d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d	<   t          |          }t          j        g d
g dg dg dg dg d
gt           j                  }t          j        ||k              sJ d S )N)   rY   r.   )r.   r5   )r5   r5   )r5   r)   r/   r(   )r*   r*   )r*   r   )r   r   r   r   r   r   )r   r   r.   r   r   r   )r   r   r   r.   r   r   )r   r   r   r   r.   r   )r   r   r   r   r   r.   dtype)r   r   r1   r	   rK   allr:   s       r   test_lut_fixzTestSkeletonize.test_lut_fixY   s    Xfbh''4444444R8//////////////////1
 9;B B B vf()))))))r   N)__name__
__module____qualname__r   r"   r&   r,   r2   r6   r<   rW   r]    r   r   r   r      s        5 5 5
  
, , ,
  ' ' '' ' '- - -' ' '>* * * * *r   r   c                   B    e Zd Zed             Zd Zd Zd Zd Zd Z	dS )TestThinc           
      p    t          j        g dg dg dg dg dg dg dgt           j                  }|S )zimage to test thinning withr   r   r   r   r   r   r   )r   r.   r.   r.   r.   r.   r   )r   r.   r   r.   r.   r.   r   rZ   )r   rK   r1   r   iis     r   input_imagezTestThin.input_imagem   sl     X,,,,,,,,,,,,,,,,,,,,,. 68X? ? ? 	r   c                 x    t          j        t          t          j        d                    dk              sJ d S )Nr?   r?   F)r   r\   r
   r   )r   s    r   
test_zeroszTestThin.test_zerosy   s5    vd28H--..%78888888r   c           
          t          | j        d                              t          j                  }t          j        g dg dg dg dg dg dg dgt          j                  }t          ||           d S )Nr.   re   r   r   r.   r   r   r   r   )r   r.   r   r.   r.   r   r   )r   r   r.   r.   r.   r   r   rZ   r
   rh   astyper   r1   rK   r   r   r   r;   s      r   test_iter_1zTestThin.test_iter_1|   s    d&**11"(;;82222222222222222222224 <>8E E E 	68,,,,,r   c           
          t          | j                                      t          j                  }t          j        g dg dg dg dg dg dg dgt          j                  }t          ||           d S )Nre   rm   )r   r.   r   r.   r   r   r   rZ   rn   rp   s      r   test_noiterzTestThin.test_noiter   s    d&''..rx8882222222222222222222224 <>8E E E 	68,,,,,r   c                     t          j        d          t          j        d          fD ]B}t          j        t                    5  t          |           d d d            n# 1 swxY w Y   Cd S )Nr)   )r)   r)   r)   )r   r   r   r   r    r
   rf   s     r   test_baddimzTestThin.test_baddim   s    8A;; 3 34 	 	Bz**  R              	 	s   A  A$	'A$	c                 |    t                      \  }}t          |t                     t          |t                     d S )N)r   r   r   r   )r   g123g123ps      r   test_lut_generationzTestThin.test_lut_generation   s7    )++e4***5),,,,,r   N)
r^   r_   r`   propertyrh   rk   rq   rs   ru   ry   ra   r   r   rc   rc   l   sx        	 	 X	9 9 9	- 	- 	-	- 	- 	-  
- - - - -r   rc   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )TestMedialAxisc                     t          t          j        dt                              }t          j        |dk              sJ dS )z)Test skeletonize on an array of all zerosrj   FNr   r   r   boolr\   r   r   s     r   test_00_00_zeroszTestMedialAxis.test_00_00_zeros   s;    RXh5566vfo&&&&&&&r   c                     t          t          j        dt                    t          j        dt                              }t          j        |dk              sJ dS )z6Test skeletonize on an array that is completely maskedrj   FNr~   r   s     r   test_00_01_zeros_maskedz&TestMedialAxis.test_00_01_zeros_masked   sN    RXh55Xh557 7vfo&&&&&&&r   c                     t          j        d          }d|dddf<   d|dddf<   d|dddf<   t          j        |j        d          }d|dddf<   t	          |          }t          ||           dS )	z'Test a thick vertical line, issue #3861)	   r   r.   Nr5   r)   r*   FT)r   r   fullrJ   r   r   )r   imgr;   r   s       r   test_vertical_linez!TestMedialAxis.test_vertical_line   s    hvAAAqD	AAAqD	AAAqD	739e,,AS!!68,,,,,r   c                 j   t          j        dt                    }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          
          }t	          |          }t          j        ||k              sJ t	          |d          \  }}|                                dk    sJ dS )zTest skeletonize on a rectangler      Tr.   r4   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r.   r   r   r   r   r   r   r   r   r   r   r   r.   r   r   r   r.   r   r   r   r   r   r   r   r   r   r.   r   r   )r   r   r   r.   r   r   r   r   r   r   r   r.   r   r   r   )r   r   r   r   r.   r.   r.   r.   r.   r.   r.   r   r   r   r   rZ   )return_distancer*   N)r   r   r   rK   r   r\   max)r   rM   r;   r   distances        r   test_01_01_rectanglez#TestMedialAxis.test_01_01_rectangle   s    $'' adAbDj
 8JJJJJJJJJJJJJJJJJJJJJJJJJJJL #'	( 	( 	( U##vf()))))&udCCC||~~""""""r   c                     t          j        dt                    }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                    }t	          |          }t          j        ||k              sJ dS )z9Test skeletonize on a rectangle with a hole in the middler   Tr.   r4   Fr*   r   r   )r   r   r.   r.   r.   r.   r.   r.   r.   r.   r.   r.   r.   r   r   r   rZ   N)r   r   r   rK   r   r\   )r   rM   r;   r   s       r   test_01_02_holezTestMedialAxis.test_01_02_hole   s    $'' adAbDja2g8JJJJJJJJJJJJJJJJJJJJJJJJJJJL #'	( 	( 	( U##vf()))))))r   c                     t          j        dt                    }d|ddddf<   t          |          }t          j        ||k              sJ dS )z(Test skeletonize on a 1-pixel thin strip)r.   r   TNr.   r4   )r   r   r   r   r\   )r   rM   r   s      r   test_narrow_imagez TestMedialAxis.test_narrow_image   sU    &&aaa2gU##vfo&&&&&&&r   N)	r^   r_   r`   r   r   r   r   r   r   ra   r   r   r|   r|      sn        ' ' '
' ' '- - -# # #.* * *$' ' ' ' 'r   r|   )numpyr   r   numpy.testingr   scipy.ndimager   skimager   skimage._shared.testingr   
skimage.ior   skimage.morphologyr   r	   r
   skimage.morphology._skeletonizer   r   r   r   rc   r|   ra   r   r   <module>r      sd        , , , , , , # # # # # #       ) ) ) ) ) )       = = = = = = = = = =B B B B B B B B B B[* [* [* [* [* [* [* [*|/- /- /- /- /- /- /- /-dG' G' G' G' G' G' G' G' G' G'r   