
    1-PhG?                     V   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 dlmZmZmZ d dlmZ ej                            dej        ej        ej        ej        g          ej                            d	d
dg          d                         Zej                            dej        ej        ej        ej        g          ej                            d	d
dg          d                         Zej                            dej        ej        ej        ej        g          ej                            d	d
dg          d                         Zej                            dddg          ej                            dg d          d                         Zej                            dddg          ej                            dg d          ej                            dddg          d                                     Zej                            dej        ej        ej        ej        g          ej                            d	d
dg          d                         Zd Zd  Zd! Z ej                            dddg          ej                            dg d          d"                         Z!ej                            dej        ej        ej        g          ej                            d	d
dg          d#                         Z"d$ Z#d% Z$d& Z%d' Z&d( Z'd) Z(d* Z)d+ Z*dS ),    N)assert_almost_equal)feature)disk)	ellipsoid)blob_dogblob_dohblob_log)_blob_overlapdtypethreshold_typeabsoluterelativec                    t          j        d          t          j        d|           }t	          dd          \  }}d|||f<   t	          dd          \  }}d|||f<   t	          d	d
          \  }}d|||f<   |dk    r,d}|j        j        dk    r|t          j        |          z  }d }n
|dk    rd }d}t          |dd||          }fd}t          ||          }	d}
d}|	d         }t          |d         dz
            |
k    sJ t          |d         dz
            |
k    sJ t           ||          dz
            |dz  k    sJ |	d         }t          |d         dz
            |
k    sJ t          |d         dz
            |
k    sJ t           ||          dz
            |dz  k    sJ |	d         }t          |d         dz
            |
k    sJ t          |d         dz
            |
k    sJ t           ||          d
z
            |d
z  k    sJ t          j        d|           }t          |          j        dk    sJ d S )N      r   r              d   ,        ^  -   r          @fr         ?   2   	min_sigma	max_sigma	thresholdthreshold_relc                     | d         z  S Nr    xr2s    _/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/skimage/feature/tests/test_blob.pyradiusztest_blob_dog.<locals>.radius/       AaDy    keyg      ?r   r      r   r   r   r   r   r   r   )mathsqrtnponesr   r   kindptpr   sortedabszerossize)r   r   imgxsysr)   r*   blobsr2   sthreshratio_threshb	img_emptyr0   s                 @r1   test_blob_dogrL      s    
1B
'*E
*
*
*C*a  FBCBK*b!!FBCBK*b!!FBCBK##	9>S  $I	:	%	%	#  E     	u&!!!AFL	!Aqtcz??f$$$$qtcz??f$$$$vvayy1}!11111	!Aqtcz??f$$$$qtcz??f$$$$vvayy2~,"33333	!Aqtcz??f$$$$qtcz??f$$$$vvayy2~,"33333 5111II#q((((((r4   c                    d}d}t          |||          }t          j        ||d          }|dk    rd}d}n
|dk    rd}d}t          |d	dd
||          }|d         }|j        dk    sJ |d         ||z   dz   k    sJ |d         ||z   dz   k    sJ |d         ||z   dz   k    sJ t          t          j        d	          |d	         z  |z
            dk     sJ d S )N
   constantmoder   MbP?r   r   r#      333333?r'   r(   sigma_ratior)   r*   r$   r7   r   皙?)r   r;   padr   shaper@   r9   r:   	r   r   rrY   im3r)   r*   rF   rJ   s	            r1   test_blob_dog_3dr^   J   s-    	A
C
Aq!

C
&c

+
+
+C##		:	%	%	#  E 	aA7d????Q41s7Q;Q41s7Q;Q41s7Q;ty||ad"Q&''#------r4   c                    d}d}t          |dz  ||          }t          j        ||d          }|dk    rd}d }n
|dk    rd }d}t          |                    | d	
          g dg dd||          }|d         }|j        dk    sJ |d         |dz  |z   dz   k    sJ |d         ||z   dz   k    sJ |d         ||z   dz   k    sJ t          t          j        d          |d         z  |dz  z
            dk     sJ t          t          j        d          |d         z  |z
            dk     sJ t          t          j        d          |d         z  |z
            dk     sJ d S )NrN   r   rO   rP   r   rR   r   r#   F)copy)      ?rS   rS   r   rN   rN   rT   rU   r      r7   rS   rX   r$   r   )	r   r;   rY   r   astyperZ   r@   r9   r:   r[   s	            r1   test_blob_dog_3d_anisotropicrf   k   s    	A
C
AE1a
 
 C
&c

+
+
+C##		:	%	%	

5u
%%++++#  E 	aA7d????Q41q53;?""""Q41s7Q;Q41s7Q;ty||ad"QU*++c1111ty||ad"Q&''#----ty||ad"Q&''#------r4   disc_centerr   r   r      exclude_border)rd   )rd   rd   r$      c                    t          j        d          }t          | d          \  }}d|||f<   t          |ddd          }|j        d         dk    s
J d	            |d         }|d         | d         k    sJ d
| d          d            |d         | d         k    sJ d
| d          d            t          |ddd|          }| dk    rw|dk    rq|j        d         dk    s
J d	            |d         }|d         | d         k    sJ d
| d          d            |d         | d         k    sJ d
| d          d            d S d}|j        d         dk    s
J |            d S )Nr   r   r   ra   rT   )r'   r(   rV   r   r7   "one blob should have been detectedblob should be  px from x border px from y border)r'   r(   rV   rk   ri   rl   ?zero blobs should be detected, as only blob is 5 px from border)r;   r<   r   r   rZ   rg   rk   rC   rD   rE   rF   rJ   msgs           r1   test_blob_dog_exclude_borderrv      s    '*

C+q!!FBCBK	  E ;q>Q DaAQ4;q>!!!#V[^#V#V#V!!!Q4;q>!!!#V[^#V#V#V!!!%  E g.G";";{1~"""$H"""!HaDKN""">[^>>> #"" aDKN""">[^>>> #"""" P{1~"""C"""""r4   anisotropicFTndim)r7   r   rS   r$   function_namer   r	   c                    t          j        d|z  t           j                  }|rdt          j        |          z   }nd}t	          t
          |           } |||          }|r
d|j        z  n	|j        dz   }|j        d|fk    sJ d S )N)   r      )r(   r   r7   r   )r;   rA   float32arangegetattrr   rx   rZ   )ry   rx   rw   zr(   	blob_funcrF   expected_shapes           r1   test_nd_blob_no_peaks_shaper      s    
 	RZ000A 	$'			//IIa9---E#.>QZZAFQJN;1n-------r4   c                    t          j        d          t          j        d|           }t	          dd          \  }}d|||f<   t	          dd          \  }}d|||f<   t	          d	d
          \  }}d|||f<   t	          dd          \  }}d|||f<   |dk    r,d}|j        j        dk    r|t          j        |          z  }d }n
|dk    rd }d}t          |dd||          }fd}t          ||          }	d}
|	d         }t          |d         dz
            |
k    sJ t          |d         dz
            |
k    sJ t           ||          dz
            |
k    sJ |	d         }t          |d         dz
            |
k    sJ t          |d         d
z
            |
k    sJ t           ||          dz
            |
k    sJ |	d         }t          |d         dz
            |
k    sJ t          |d         dz
            |
k    sJ t           ||          d
z
            |
k    sJ |	d         }t          |d         dz
            |
k    sJ t          |d         dz
            |
k    sJ t           ||          dz
            |
k    sJ t          |dd||d           }|	d         }t          |d         dz
            |
k    sJ t          |d         dz
            |
k    sJ t           ||          dz
            |
k    sJ |	d         }t          |d         dz
            |
k    sJ t          |d         d
z
            |
k    sJ t           ||          dz
            |
k    sJ |	d         }t          |d         dz
            |
k    sJ t          |d         dz
            |
k    sJ t           ||          d
z
            |
k    sJ |	d         }t          |d         dz
            |
k    sJ t          |d         dz
            |
k    sJ t           ||          dz
            |
k    sJ t          j        d!          }t          |          j        dk    sJ d S )"Nr      r   r   )r   A   r   r   )P   r   rm   )r%      r   )r         r   r7   r"   r   r#   rj   r&   c                     | d         z  S r,   r-   r.   s    r1   r2   ztest_blob_log.<locals>.radius   r3   r4   r5   rS   r   r   r   r   r%   r   r   r   T)r'   r(   r)   r*   	log_scaler8   )r9   r:   r;   r<   r   r   r=   r>   r	   r?   r@   rA   rB   )r   r   rC   rD   rE   r)   r*   rF   r2   rG   rH   rJ   rK   r0   s                @r1   test_blob_logr      s    
1B
'*E
*
*
*C)QFBCBK(BFBCBK)R  FBCBK*b!!FBCBK##	9>S  $I	:	%	%	qB)=  E     	u&!!!AF	!Aqtcz??f$$$$qtby>>V####vvayy1}''''	!Aqtby>>V####qtby>>V####vvayy2~&((((	!Aqtby>>V####qtcz??f$$$$vvayy2~&((((	!Aqtcz??f$$$$qtcz??f$$$$vvayy2~&(((( #  E 	
!Aqtcz??f$$$$qtby>>V####vvayy1}''''	!Aqtby>>V####qtby>>V####vvayy2~&((((	!Aqtby>>V####qtcz??f$$$$vvayy2~&((((	!Aqtcz??f$$$$qtcz??f$$$$vvayy2~&(((( $$II#q((((((r4   c                      t          j        d          } t          dd          \  }}d| ||f<   t          dd          \  }}d| ||f<   t          | ddd	           d S )
N)   r   rh   r   r      rd   rj   rN   皙?)r(   	num_sigmar)   )r;   r<   r   r	   )rC   rD   rE   s      r1   test_blob_log_no_warningsr   &  sj    
'(

C&!__FBCBK&!__FBCBKSB"<<<<<<r4   c                     d} d}t          | | |           }t          j        ||d          }t          |dd          }|d         }|j        dk    sJ |d         | |z   d	z   k    sJ |d	         | |z   d	z   k    sJ |d
         | |z   d	z   k    sJ t          t          j        d          |d         z  | z
            d	k     sJ d S )Nrd   rN   rO   rP   rS   r'   r(   r   rW   r7   r   r   r;   rY   r	   rZ   r@   r9   r:   r\   rY   r]   rF   rJ   s        r1   test_blob_log_3dr   2  s    	A
C
Aq!

C
&c

+
+
+CSA444EaA7d????Q41s7Q;Q41s7Q;Q41s7Q;ty||ad"Q&''!++++++r4   c                  p   d} d}t          | dz  | |           }t          j        ||d          }t          |g dg d          }|d	         }|j        d
k    sJ |d	         | dz  |z   dz   k    sJ |d         | |z   dz   k    sJ |d         | |z   dz   k    sJ t          t          j        d          |d         z  | dz  z
            dk     sJ t          t          j        d          |d         z  | z
            dk     sJ t          t          j        d          |d         z  | z
            dk     sJ d S )Nrd   rN   r   rO   rP   )r7   r   r   rb   r   r   rc   r7   rS   r$   r   r   r   s        r1   test_blob_log_3d_anisotropicr   C  sh   	A
C
AE1a
 
 C
&c

+
+
+C))++  E 	aA7d????Q41q53;?""""Q41s7Q;Q41s7Q;ty||ad"QU*++a////ty||ad"Q&''!++++ty||ad"Q&''!++++++r4   c                    t          j        d          }t          | d          \  }}d|||f<   t          |dd          }|j        d         dk    sJ |d         }|d         | d         k    sJ d| d          d	            |d         | d         k    sJ d| d          d
            t          |dd|          }| dk    rw|dk    rq|j        d         dk    s
J d            |d         }|d         | d         k    sJ d| d          d	            |d         | d         k    sJ d| d          d
            d S d}|j        d         dk    s
J |            d S )Nr   r   r   ra   r   r   r7   rp   rq   rr   )r'   r(   rk   ri   rl   ro   rs   )r;   r<   r   r	   rZ   rt   s           r1   test_blob_log_exclude_borderr   Z  s    '*

C+q!!FBCBK  E
 ;q>QaAQ4;q>!!!#V[^#V#V#V!!!Q4;q>!!!#V[^#V#V#V!!!%	  E g.G";";{1~"""$H"""!HaDKN""">[^>>> #"" aDKN""">[^>>> #"""" P{1~"""C"""""r4   c                    t          j        d|           }t          dd          \  }}d|||f<   t          dd          \  }}d|||f<   t          dd	          \  }}d|||f<   t          d
d          \  }}d|||f<   |dk    r1d}|j        j        dk    rt          j        |          }||dz  z  }d }n
|dk    rd }d}t          |ddd||          }d }	t          ||	          }
d}|
d         }t          |d         dz
            |k    sJ t          |d         dz
            |k    sJ t           |	|          dz
            |k    sJ |
d         }t          |d         dz
            |k    sJ t          |d         dz
            |k    sJ t           |	|          dz
            |k    sJ |
d         }t          |d         dz
            |k    sJ t          |d         dz
            |k    sJ t           |	|          d	z
            |k    sJ |
d         }t          |d         d z
            |k    sJ t          |d         d!z
            |k    sJ t           |	|          dz
            |k    sJ d S )"Nr   r   r   rj   r     r%   r   r   (   r   r%   r   皙?r"   r   r   r#   r7   <   rN   )r'   r(   r   r)   r*   c                     | d         S r,   r-   r/   s    r1   r2   ztest_blob_doh.<locals>.radius      tr4   r5   r$   r   r   r   r   r   r   rS   r   r   )	r;   r<   r   r   r=   r>   r   r?   r@   )r   r   rC   rD   rE   r)   r>   r*   rF   r2   rG   rH   rJ   s                r1   test_blob_dohr     s    '*E
*
*
*C*b!!FBCBK)R  FBCBK*b!!FBCBK*b!!FBCBK## 	9>S  &++CaI	:	%	%	#  E   	u&!!!AF	!Aqtcz??f$$$$qtcz??f$$$$vvayy2~&((((	!Aqtcz??f$$$$qtby>>V####vvayy2~&((((	!Aqtcz??f$$$$qtcz??f$$$$vvayy2~&((((	!Aqtcz??f$$$$qtcz??f$$$$vvayy2~&((((((r4   c                     t          j        dt           j                  } t          dd          \  }}d| ||f<   t          dd          \  }}d| ||f<   t          dd	          \  }}d| ||f<   t          d
d          \  }}d| ||f<   t	          | ddddd          }d }t          ||          }d}|d         }t          |d         dz
            |k    sJ t          |d         dz
            |k    sJ t           ||          dz
            |k    sJ |d         }t          |d         dz
            |k    sJ t          |d         dz
            |k    sJ t           ||          dz
            |k    sJ |d         }t          |d         dz
            |k    sJ t          |d         dz
            |k    sJ t           ||          d	z
            |k    sJ |d         }t          |d         dz
            |k    sJ t          |d         dz
            |k    sJ t           ||          dz
            |k    sJ d S )Nr   r   r   rj   r   r   r   r   r   r   r%   r7   r   rN   Tr   )r'   r(   r   r   r)   c                     | d         S r,   r-   r   s    r1   r2   z'test_blob_doh_log_scale.<locals>.radius  r   r4   r5   r   r   r   r   r   r   r   rS   r   r   )r;   r<   uint8r   r   r?   r@   )rC   rD   rE   rF   r2   rG   rH   rJ   s           r1   test_blob_doh_log_scaler     s   
'*BH
-
-
-C*b!!FBCBK)R  FBCBK*b!!FBCBK*b!!FBCBKqB"PT  E   	u&!!!AF	!Aqtcz??f$$$$qtcz??f$$$$vvayy2~&((((	!Aqtcz??f$$$$qtby>>V####vvayy2~&((((	!Aqtcz??f$$$$qtcz??f$$$$vvayy2~&((((	!Aqtcz??f$$$$qtcz??f$$$$vvayy2~&((((((r4   c                  b    t          j        d          } t          |           j        dk    sJ d S )Nr8   r   )r;   rA   r   rB   )rK   s    r1   test_blob_doh_no_peaksr     s3    $$II#q((((((r4   c                      t          j        dt           j                  } t          dd          \  }}d| ||f<   t          dd          \  }}d| ||f<   t	          | dd	d
d          }t          |          dk    sJ d S )Nr   r   r8   rj   r   )x   r   r   r7   r   rN   r   )r'   r(   r   r)   )r;   r<   r   r   r   len)rC   rD   rE   rF   s       r1   test_blob_doh_overlapr     s    
'*BH
-
-
-C*b!!FBCBK*b!!FBCBKSArTRRREu::??????r4   c                  R   d\  } }d\  }}t          | | |           }t          j        ||d          }t          |||          }t          j        |||f|dz
  |dz   f||fgd          }t          j        ||          }t	          |ddd	          }t          |          d
k    sJ d S )Nr   r      rO   rP   	   r   rN   r   r'   r(   overlapr7   )r   r;   rY   
logical_orr	   r   )r1r0   pad1pad2blob1blob2r]   rF   s           r1   test_blob_log_overlap_3dr     s    FBJD$b"b!!EF5$Z000Eb"b!!EFttax2T4LA
  E -u
%
%CSASAAAEu::??????r4   c                     t          j        d          } t          t          j        dddd| z  d| z  d| z  g          t          j        dddd| z  d| z  d| z  g          d          }t          |d           t          t          j        dddd| z  d| z  d| z  g          t          j        dddd| z  d| z  d| z  g          d          }t          |d           d S )	NrS   r   r   rN   g?r7   )	sigma_dimg?)r9   r:   r
   r;   arrayr   )s3r   s     r1    test_blob_overlap_3d_anisotropicr     s    
1B
!Q1r627BG455
!QC"Ha"fa"f566  G
 )))
!Q1r627BG455
!Q38QVQV455  G
 )))))r4   c                      t          j        d          } d| dddf<   t          | ddd          }t          |          dk    sJ t          | dd	gddgd          }t          |          dk    sJ d S )
N)r%   r%   r7   rj   rN   r#   r   rS   r'   r(   r   r   r;   rA   r	   r   )imageisotropic_blobs	ani_blobss      r1   test_blob_log_anisotropicr   '  s    HXEE"be)uqANNNO!#####qaW  I y>>Qr4   c                     d\  } }d\  }}t          | | |           }t          j        ||d          }t          |||          }t          j        |||f|dz
  |dz   f||fgd          }t          j        ||          }t	          |g ddd	          }t          |          d
k    sJ t          t          j        dddt          j	        d          z  g          t          j        dddt          j	        d          z  g                    }t          |dt          j        z  dt          j        d          z  t          j	        d          dz  z
  z             d S )Nr   r   rO   rP   r   )r   gGz @g
ףp=
 @rN   r   r   r7   r   r   g      ?r#   rS   r!   )r   r;   rY   r   r	   r   r
   r   r9   r:   r   piacos)	r   r0   r   r   r   r   r]   rF   r   s	            r1   $test_blob_log_overlap_3d_anisotropicr   2  si   FBJD$b"b!!EF5$Z000Eb"b!!EFttax2T4LA
  E -u
%
%CS$4$4$4CPPPEu::???? 
!QTYq\\)*++RXq"b49Q<<>O6P-Q-Q G tw!di&8&8"849Q<<#;M"MN    r4   c                  ~    t          j        d          } t          | ddd          }t          |          dk    sJ d S )N)rN   rN   r   r   r$   r   r   r   )imrF   s     r1   test_no_blobr   I  s>    	(		BR1Q???Eu::??????r4   )+r9   numpyr;   pytestnumpy.testingr   skimager   skimage.drawr   skimage.draw.draw3dr   skimage.featurer   r   r	   skimage.feature.blobr
   markparametrizer   float16r}   float64rL   r^   rf   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r-   r4   r1   <module>r      sl         - - - - - -             ) ) ) ) ) ) 8 8 8 8 8 8 8 8 8 8 . . . . . . 28RZRZ"PQQ)J
+CDD7) 7) ED RQ7)t 28RZRZ"PQQ)J
+CDD. . ED RQ.> 28RZRZ"PQQ)J
+CDD. . ED RQ.B (9::)+?+?+?@@%( %( A@ ;:%(P 66..:z*BCC. . DC /. 76. 28RZRZ"PQQ)J
+CDDX) X) ED RQX)v	= 	= 	=, , ,", , ,. (9::)+?+?+?@@"( "( A@ ;:"(J 28RZ"DEE)J
+CDD=) =) ED FE=)@+) +) +)\) ) )    * * *&    .    r4   