U
    ?h?                     @   sv  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d Zejdejejejejgejd	d
dgdd Zejdejejejejgejd	d
dgdd Zejdddgejddddgdd Zejdddgejddd d!d"gejd#d$d%gd&d' Zejdejejejejgejd	d
dgd(d) Zd*d+ Zd,d- Zd.d/ Z ejdddgejddddgd0d1 Z!ejdejejejgejd	d
dgd2d3 Z"d4d5 Z#d6d7 Z$d8d9 Z%d:d; Z&d<d= Z'd>d? Z(d@dA Z)dBdC Z*dS )D    N)assert_almost_equal)feature)disk)	ellipsoid)blob_dogblob_dohblob_log)_blob_overlapdtypethreshold_typeabsoluterelativec                    s  t d tjd| d}tdd\}}d|||f< tdd\}}d|||f< td	d
\}}d|||f< |dkrd}|jjdkr||  }d }n|dkrd }d}t|dd||d} fdd}t	||d}	d}
d}|	d }t
|d d |
kstt
|d d |
kstt
||d |d ks*t|	d }t
|d d |
ksLtt
|d d |
ksftt
||d |d kst|	d }t
|d d |
kstt
|d d |
kstt
||d
 |d
 ksttjd| d}t|jdks td S ) N      r   r
              d   ,        ^  -   r          @fr         ?   2   	min_sigma	max_sigma	thresholdthreshold_relc                    s    | d  S Nr    xr2r*   Q/var/www/html/venv/lib/python3.8/site-packages/skimage/feature/tests/test_blob.pyradius0   s    ztest_blob_dog.<locals>.radiuskeyg      ?r   r      r   r   r   r   r   r   r   )mathsqrtnponesr   r
   kindptpr   sortedabsAssertionErrorzerossize)r
   r   imgxsysr'   r(   blobsr0   sthreshZratio_threshb	img_emptyr*   r-   r/   test_blob_dog   sR    
rH   c           	      C   s   d}d}t |||}tj||dd}|dkr6d}d}n|dkrFd}d}t|d	dd
||d}|d }|jdkspt|d || d kst|d || d kst|d || d kstttd	|d	  | dk std S )N
   constantmoder   MbP?r   r   r!      333333?r%   r&   sigma_ratior'   r(   r"   r3   r   皙?)	r   r7   padr   shaper=   r<   r5   r6   	r
   r   rrT   im3r'   r(   rC   rF   r*   r*   r/   test_blob_dog_3dJ   s0    rY   c           	      C   sH  d}d}t |d ||}tj||dd}|dkr:d}d }n|dkrJd }d}t|j| d	d
dddgdddgd||d}|d }|jdkst|d |d | d kst|d || d kst|d || d ksttt	d|d  |d  dk sttt	d|d  | dk s ttt	d|d  | dk sDtd S )NrI   r   rJ   rK   r   rM   r   r!   F)copy      ?rN   r   rO   rP   r      r3   rS   r"   )
r   r7   rT   r   ZastyperU   r=   r<   r5   r6   rV   r*   r*   r/   test_blob_dog_3d_anisotropicm   s4    &$r^   disc_centerr   r   r      exclude_borderr]   )r]   r]   r"      c                 C   sL  t d}t| d\}}d|||f< t|dddd}|jd dksJtd	|d }|d | d ksvtd
| d  d|d | d kstd
| d  dt|ddd|d}| dkr,|dkr,|jd dkstd	|d }|d | d kstd
| d  d|d | d ksHtd
| d  dnd}|jd dksHt|d S )Nr   r   r   r[   rO   )r%   r&   rQ   r   r3   "one blob should have been detectedblob should be  px from x border px from y border)r%   r&   rQ   rc   ra   rd   ?zero blobs should be detected, as only blob is 5 px from border)r7   r8   r   r   rU   r=   r_   rc   r@   rA   rB   rC   rF   msgr*   r*   r/   test_blob_dog_exclude_border   s6    
$$&(rm   anisotropicFTndimr3   r   rN   r"   function_namer   r   c                 C   sp   t jd| t jd}|r(dt | }nd}tt| }|||d}|rPd|j n|jd }|jd|fksltd S )N)   r      )r&   r   r3   r   )	r7   r>   float32Zarangegetattrr   ro   rU   r=   )rp   ro   rn   zr&   Z	blob_funcrC   Zexpected_shaper*   r*   r/   test_nd_blob_no_peaks_shape   s    
rv   c                    s  t d tjd| d}tdd\}}d|||f< tdd\}}d|||f< td	d
\}}d|||f< tdd\}}d|||f< |dkrd}|jjdkr||  }d }n|dkrd }d}t|dd||d} fdd}t	||d}	d}
|	d }t
|d d |
ks
tt
|d d |
ks$tt
||d |
ks>t|	d }t
|d d |
ks`tt
|d d
 |
ksztt
||d |
kst|	d }t
|d d |
kstt
|d d |
kstt
||d
 |
kst|	d }t
|d d |
kstt
|d d |
ks&tt
||d |
ks@tt|dd||d d!}|	d }t
|d d |
ksvtt
|d d |
kstt
||d |
kst|	d }t
|d d |
kstt
|d d
 |
kstt
||d |
ks t|	d }t
|d d |
ks"tt
|d d |
ks<tt
||d
 |
ksVt|	d }t
|d d |
ksxtt
|d d |
kstt
||d |
ksttd"}t|jdkstd S )#Nr      rx   r   )r   A   r   r   )P   r   re   )r#      r   )r         r   r3   r    r   r!   rb   r$   c                    s    | d  S r)   r*   r+   r-   r*   r/   r0      s    ztest_blob_log.<locals>.radiusr1   rN   r   r   ry   rz   r#   r{   r   r|   T)r%   r&   r'   r(   	log_scaler4   )r5   r6   r7   r8   r   r
   r9   r:   r   r;   r<   r=   r>   r?   )r
   r   r@   rA   rB   r'   r(   rC   r0   rD   rE   rF   rG   r*   r-   r/   test_blob_log   s    


r   c                  C   sR   t d} tdd\}}d| ||f< tdd\}}d| ||f< t| dddd	 d S )
N)   r   r`   r   r      r]   rb   rI   皙?)r&   	num_sigmar'   )r7   r8   r   r   )r@   rA   rB   r*   r*   r/   test_blob_log_no_warnings%  s    
r   c                  C   s   d} d}t | | | }tj||dd}t|ddd}|d }|jdksHt|d | | d	 ks`t|d	 | | d	 ksxt|d
 | | d	 kstttd|d  |  d	k std S )Nr]   rI   rJ   rK   rN   r%   r&   r   rR   r3   r   	r   r7   rT   r   rU   r=   r<   r5   r6   rW   rT   rX   rC   rF   r*   r*   r/   test_blob_log_3d1  s    r   c                  C   s  d} d}t | d | | }tj||dd}t|dddgdddgd}|d	 }|jd
ksXt|d	 | d | d kstt|d | | d kst|d | | d kstttd|d  | d  dk stttd|d  |  dk stttd|d  |  dk std S )Nr]   rI   r   rJ   rK   r3   r   r   r   r\   rN   r"   r   r   r*   r*   r/   test_blob_log_3d_anisotropicB  s"    &"r   c                 C   sB  t d}t| d\}}d|||f< t|ddd}|jd dksDt|d }|d | d ksptd| d  d	|d | d kstd| d  d
t|dd|d}| dkr"|dkr"|jd dkstd|d }|d | d kstd| d  d	|d | d ks>td| d  d
nd}|jd dks>t|d S )Nr   r   r   r[   r   r   r3   rg   rh   ri   )r%   r&   rc   ra   rd   rf   rj   )r7   r8   r   r   rU   r=   rk   r*   r*   r/   test_blob_log_exclude_borderX  s2    
$$$(r   c                 C   s@  t jd| d}tdd\}}d|||f< tdd\}}d|||f< tdd	\}}d|||f< td
d\}}d|||f< |dkrd}|jjdkr| }||d 9 }d }n|dkrd }d}t|ddd||d}dd }	t||	d}
d}|
d }t|d d |kst	t|d d |ks t	t|	|d |ks:t	|
d }t|d d |ks\t	t|d d |ksvt	t|	|d |kst	|
d }t|d d |kst	t|d d |kst	t|	|d	 |kst	|
d  }t|d d! |kst	t|d d" |ks"t	t|	|d |ks<t	d S )#Nr   r   r   rb   r     r#   r}   r   (   r   r#   r   皙?r    r   r   r!   r3   <   rI   )r%   r&   r   r'   r(   c                 S   s   | d S r)   r*   r+   r*   r*   r/   r0     s    ztest_blob_doh.<locals>.radiusr1   r"   r   r   r   r   r   r   rN   r   r   )
r7   r8   r   r
   r9   r:   r   r;   r<   r=   )r
   r   r@   rA   rB   r'   r:   r(   rC   r0   rD   rE   rF   r*   r*   r/   test_blob_doh{  sZ    r   c                  C   s  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< t| dddddd}dd }t||d}d}|d }t|d d |kstt|d d |kstt||d |kst|d }t|d d |kstt|d d |ks0tt||d |ksJt|d }t|d d |ksltt|d d |kstt||d	 |kst|d }t|d d |kstt|d d |kstt||d |kstd S )Nr   r   r   rb   r   r   r}   r   r   r   r#   r3   r   rI   Tr   )r%   r&   r   r~   r'   c                 S   s   | d S r)   r*   r+   r*   r*   r/   r0     s    z'test_blob_doh_log_scale.<locals>.radiusr1   r   r   r   r   r   r   r   rN   r   r   )r7   r8   uint8r   r   r;   r<   r=   )r@   rA   rB   rC   r0   rD   rE   rF   r*   r*   r/   test_blob_doh_log_scale  sH    r   c                  C   s    t d} t| jdkstd S )Nr4   r   )r7   r>   r   r?   r=   )rG   r*   r*   r/   test_blob_doh_no_peaks  s    
r   c                  C   sj   t jdt jd} tdd\}}d| ||f< tdd\}}d| ||f< t| dd	d
dd}t|dksftd S )Nrw   r   r4   rb   r   )x   r   r}   r3   r   rI   r   )r%   r&   r   r'   )r7   r8   r   r   r   lenr=   )r@   rA   rB   rC   r*   r*   r/   test_blob_doh_overlap  s    r   c                  C   s   d\} }d\}}t | | | }tj||dd}t |||}tj|||f|d |d f||fgdd}t||}t|dddd	}t|d
kstd S )Nr   r      rJ   rK   	   r   rI   r   r%   r&   overlapr3   )r   r7   rT   
logical_orr   r   r=   )r1r.   pad1pad2blob1blob2rX   rC   r*   r*   r/   test_blob_log_overlap_3d  s    r   c                  C   s   t d} ttdddd|  d|  d|  gtdddd|  d|  d|  gdd}t|d ttdddd|  d|  d|  gtdddd|  d|  d|  gdd}t|d d S )	NrN   r   r   rI   g?r3   )Z	sigma_dimg?)r5   r6   r	   r7   arrayr   )Zs3r   r*   r*   r/    test_blob_overlap_3d_anisotropic  s    
" 
" r   c                  C   sf   t d} d| dddf< t| dddd}t|dks:tt| dd	gddgdd}t|dksbtd S )
N)r#   r#   r3   rb   rI   r!   r   rN   r%   r&   r   r   r7   r>   r   r   r=   )imageZisotropic_blobsZ	ani_blobsr*   r*   r/   test_blob_log_anisotropic$  s    
r   c            	   
   C   s   d\} }d\}}t | | | }tj||dd}t |||}tj|||f|d |d f||fgdd}t||}t|dddgd	d
d}t|dkstttddd	t	
d gtdd	d	t	
d g}t|dt	j dt	d t	
dd    d S )Nr   r   rJ   rK   r   r   gGz @g
ףp=
 @rI   r   r   r3   r   g      ?r!   rN   r   )r   r7   rT   r   r   r   r=   r	   r   r5   r6   r   piacos)	r   r.   r   r   r   r   rX   rC   r   r*   r*   r/   $test_blob_log_overlap_3d_anisotropic.  s,     $r   c                  C   s.   t d} t| dddd}t|dks*td S )N)rI   rI   r   r   r"   r   r   r   )ZimrC   r*   r*   r/   test_no_blobD  s    
r   )+r5   numpyr7   ZpytestZnumpy.testingr   Zskimager   Zskimage.drawr   Zskimage.draw.draw3dr   Zskimage.featurer   r   r   Zskimage.feature.blobr	   markZparametrizer   Zfloat16rs   Zfloat64rH   rY   r^   rm   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r*   r*   r*   r/   <module>   sp    8  !$ X!>1
