o
    :ήc
M                     @   s`  d dl Zd dlZd dlmZmZ d dlmZmZ d dl	m
Z
 d dlmZmZmZ e
 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 d! Zd"d# Ze
 d$d% Zd&d' Zd(d) Z d*d+ Z!d,d- Z"d.d/ Z#d0d1 Z$d2d3 Z%d4d5 Z&d6d7 Z'd8d9 Z(d:d; Z)d<d= Z*d>d? Z+d@dA Z,dBdC Z-dDdE Z.dS )F    N)assert_almost_equalassert_equal)data	transform)test_parallel)circle_perimeterellipse_perimeterlinec            
      C   s   t jdtd} tdddd\}}d| ||f< t| \}}}t || k\}}||d  }||d  }	t|d	d t|	d
d d S )Nd      dtype<      P   
      r   g      T@(\?)	npzerosintr	   r   
hough_linewheremaxr   )
imgrrccoutanglesdyxdisttheta r%   S/tmp/pip-target-vg8gfxp4/lib/python/skimage/transform/tests/test_hough_transform.pytest_hough_line
   s   r'   c                  C   s@   t d} d| d< t| t ddd\}}}tt|d d S )N)r   r   r   )r   r   r   h  r   )r   r   r   r   linspacer   len)r   r   r   r    r%   r%   r&   test_hough_line_angles   s   
r+   c               	   C   sX   t d} d| d< tt t| t ddd W d    d S 1 s%w   Y  d S )Nr   r   r   r   r(   )r   r   pytestraises
ValueErrorr   r   r)   r   r%   r%   r&   test_hough_line_bad_input$   s
   
"r0   c                  C   s   t jdtd} tddD ]}d| d| |f< d| ||f< qt dt jd}tj| ddd	|d
}g }|D ]}t|}|j	dd d |
| q3ddg|v sOJ ddg|v sWJ tj| ddd d S )Nr   r   r      K   r   r   -   r   r   )	thresholdline_lengthline_gapr$   c                 S   s   | d S )Nr   r%   )r"   r%   r%   r&   <lambda>=   s    z*test_probabilistic_hough.<locals>.<lambda>)key)r2   r3   )J      r2   r2   )r:   r:      )r6   r7   )r   r   r   ranger)   pir   probabilistic_hough_linelistsortappend)r   ir$   linessorted_lineslnr%   r%   r&   test_probabilistic_hough-   s    
rH   c                  C   s0   t  } tj| ddddd}t|dksJ d S )N2   r   iy)r5   r6   r7   seed8   )r   checkerboardr   r@   r*   )imagerE   r%   r%   r&   test_probabilistic_hough_seedG   s   rN   c                  C   sL   t d} d| d< tt t|  W d    d S 1 sw   Y  d S )Nr   r   r   )r   r   r,   r-   r.   r   r@   r/   r%   r%   r&   "test_probabilistic_hough_bad_inputR   s
   
"rO   c                  C   s   t jdtd} tdddd\}}d| ||f< t| \}}}t|||\}}}tt|d t	|d d	d t	|d d
d d S )Nr
   r   r   r   r   r   r   r   g     @T@r   )
r   r   r   r	   r   r   hough_line_peaksr   r*   r   )r   r   r   r   r   r    r$   r#   r%   r%   r&   test_hough_line_peaks[   s   rQ   c                  C   s   t jdtd} d| dddf< d| dddf< d| d	d
df< d| dddf< t| \}}}t|||\}}}|d |d ksCJ d S )N)   @   r   TrI   r         r2      #   r   :   r   )r   r   boolr   r   rP   )testimhough_spacer   distshspace_r%   r%   r&   test_hough_line_peaks_orderedi   s   r`   c            	      C   s   t jdtd} d| dd d f< t| \}}}t|||\}}}t|dks)J t|dks1J t j d }d}t|d | dk sEJ t|d | dk sQJ d S )	Nr1   r   r         ir   g{Gz?)	r   r   rZ   r   r   rP   r*   r?   abs)	r   r\   r   r#   best_h_spacebest_angles	best_distexpected_angleexpected_distr%   r%   r&   !test_hough_line_peaks_single_linex   s   
ri   c                  C   s   t jdtd} d| d d df< d| d d df< t| \}}}ttj|||ddd d	ks0J ttj|||d
dd dksAJ d S )Nr1   r   Tra   (      )min_distancer   rb   rV   r   r   r   rZ   r   r   r*   rP   r   r^   r   r]   r%   r%   r&   test_hough_line_peaks_dist   s$   ro   c                   C   s
   t   d S )N)check_hough_line_peaks_angler%   r%   r%   r&   test_hough_line_peaks_angle   s   
rq   c                  C   s\  t jdtd} d| d d df< d| dd d f< t| \}}}ttj|||ddd dks0J ttj|||ddd d	ksAJ t dt jd
}t| |\}}}ttj|||ddd dkscJ ttj|||ddd d	kstJ t t jd dt j d
}t| |\}}}ttj|||ddd dksJ ttj|||ddd d	ksJ d S )Nr1   r   Tr   r4   )	min_anglerb   Z   r   r   r=   gUUUUUU?)	r   r   rZ   r   r   r*   rP   r)   r?   )r   r^   r   r]   r$   r%   r%   r&   rp      sd   rp   c               	   C   sh   t jdtd} d| d d df< d| d d df< t| \}}}ttj|||ddddd dks2J d S )	Nr1   r   Tra   rj   r   r   )rl   rr   	num_peaksrm   rn   r%   r%   r&   test_hough_line_peaks_num   s   ru   c                  C   sX   t jddd} t dt jd}t| |\}}}t|||\}}}t|t g  d S )Nr1   uint8r   r   r   )	r   r   r)   r?   r   r   rP   r   array)r   r$   r^   r   r]   har    r%   r%   r&    test_hough_line_peaks_zero_input   s
   rz   c                  C   sN   t jd} t t jd g}tj| |d\}}}tj|||dd\}}}d S )Nr1   rb   )r$   r5   )r   randomrw   r?   r   r   rP   )r   tested_anglesrx   r$   r    accumr   r]   r%   r%   r&   "test_hough_line_peaks_single_angle   s   r   c            	      C   s   t jdtd} d}d\}}t|||\}}d| ||f< t| |}t| |g}t|| t| t j|gt jd}t|| t 	|d |d 
 k\}}t|d | t|d | d S )Nx   r   r   rT   )c   rI   r   r   )r   r   r   r   r   hough_circler   rw   intpr   r   )	r   radiusx_0y_0r!   r"   out1out2r   r%   r%   r&   test_hough_circle   s   

r   c                  C   s   t jdtd} d}d\}}t|||\}}d| |t |dk |t |dk f< tj| t j|gt jddd}t |d |d 	 k\}}t
|d ||  t
|d ||  d S )	Nr1   r   rT   )rI   r   r   T)full_output)r   r   r   r   r   r   r   rw   r   r   r   )r   r   r   r   r!   r"   r   r%   r%   r&   test_hough_circle_extended   s   (r   c               	   C   s   d\} }}t jdtd}t|| |\}}d|||f< d\}}}t|||\}}d|||f< ||g}	t||	}
tj|
|	ddd t jt jd}t |d }t	|d | t 
||g t	|d | t 
| |g t	|d | t 
||g d S )	Nr   rI   rT   r   r   r   1   r   ra   min_xdistancemin_ydistancer5   rt   total_num_peaksr=   rb   )r   r   r   r   r   r   hough_circle_peaksinfargsortr   rw   )r   r   rad_0r   r!   r"   x_1y_1rad_1radiihspacesr   sr%   r%   r&   test_hough_circle_peaks   s$   


 r   c               	   C   s   t jdtd} d\}}}t|||\}}d| ||f< d\}}}t|||\}}d| ||f< ||g}	t| |	}
tj|
|	ddd t jdd}t|d d t 	|g t|d d t 	|g t|d	 d t 	|g d S )
Nr   r   r   r   r   r   r   rb   r=   
r   r   r   r   r   r   r   r   r   rw   )r   r   r   r   r!   r"   r   r   r   r   r   r   r%   r%   r&   "test_hough_circle_peaks_total_peak  s    


r   c               
   C   sX  d\} }}t jdtd}t|| |\}}d|||f< d\}}}t|||\}}|d d d  d7  < |d d d  d7  < d|||f< d\}	}
}t|
|	|\}}|d d d  d7  < |d d d  d7  < d|||f< |||g}t||}tj||ddd t jt jd	d
}t|d t 	||
g t|d t 	| |	g t|d t 	||g d S )NrI   rI   rT   r   r   r   r   r   ra   rb   )F   r   rT   rV   Tr   r   r5   rt   r   	normalizer=   r   )r   r   r   r   r!   r"   r   r   r   x_2y_2rad_2r   r   r   r%   r%   r&   $test_hough_circle_peaks_min_distance"  s2   




	r   c            	   
   C   s   t jdtd} g d }}tddd}tt|D ]}t|| || || \}}d| ||f< qt| |}tj||ddd t j	dd	d
}t
|d t |d dd  t
|d t |d dd  t
|d t |d dd  d S )N)r   r   r   )rj   rI   r   r   r   rT   ra   rb   r   rV   Tr      r=   )r   r   r   r>   r*   r   r   r   r   r   r   rw   )	r   cxcyr   rD   r!   r"   r   r   r%   r%   r&   3test_hough_circle_peaks_total_peak_and_min_distanceF  s    
"r   c               
   C   s   d\} }}t jdtd}t|| |\}}d|||f< d\}}}t|||\}}d|||f< ||g}	t||	}
tj|
|	ddd t jt jdd}t|d t 	|g t|d	 t 	|g t|d
 t 	|g d S )Nr   r   r   r   r   rV   Fr   rb   r=   r   )r   r   r   r   r!   r"   r   r   r   r   r   r   r%   r%   r&   !test_hough_circle_peaks_normalize\  s$   


r   c                  C   s   t jdtd} d}d}d}d}d}t||||\}}d| ||f< tj| d	d
}|d }	t|	d | t|	d | t|	d |dd t|	d |dd t|	d | t||t|	d t|	d |	d d\}
}t||
 t|| d S )Nr<   r            rV   r   r   	   r{   rX   rb   r=   decimalr   rk   orientation)r   r   r   r   r   hough_ellipser   r   r   rxryx0y0angler   r   resultbestrr2cc2r%   r%   r&   test_hough_ellipse_zero_angleu  s(   

r   c                  C   *  t jdtd} d}d}d}d}t jd }t|||||d\}}d	| ||f< tj| dd
d}|jdd |d }	t|	d	 d |d d	d t|	d d |d d	d t|	d
 d |d d	d t|	d d |d d	d t|	d |d	d t||t|	d
 t|	d |	d d\}
}t	||
 t	|| d S )Nra      r   r   r   r   rV   皙?r   r   r=   r5   accuracyaccumulatororderrX         Y@r   rb         $@r   rk   
r   r   r   r?   r   r   r   rB   r   r   r   r%   r%   r&   %test_hough_ellipse_non_zero_posangle1  *   


r   c                  C   r   )Nr   r   r   r   r   rV   r   r   r   r=   r   r   r   rX   r   r   rb   r   r   rk   r   r   r%   r%   r&   %test_hough_ellipse_non_zero_posangle2  r   r   c                  C   s   t jdtd} d}d}d}d}t jd t jd  }t|||||d	\}}d
| ||f< tj| ddd}|jdd |d }	t||t|	d t|	d |	d d	\}
}t||
 t|| d S Nr   r   r   r   r   rV   r   g       @r   r   r=   r   r   r   rX   r   rk   	r   r   r   r?   r   r   r   rB   r   r   r%   r%   r&   %test_hough_ellipse_non_zero_posangle3  s    

r   c                  C   s   t jdtd} d}d}d}d}t jd t j }t|||||d\}}d	| ||f< tj| dd
d}|jdd |d }	t||t|	d
 t|	d |	d d\}
}t||
 t|| d S Nr   r   r   r   r   rV   r   r   r   r=   r   r   r   rX   r   rk   r   r   r%   r%   r&   %test_hough_ellipse_non_zero_posangle4  s    

r   c                  C      t jdtd} d}d}d}d}t j d }t|||||d\}}d	| ||f< tj| dd
d}|jdd |d }	t||t|	d
 t|	d |	d d\}
}t||
 t|| d S )Nr   r   r   r   r   rV   r   r   r   r=   r   r   r   rX   r   rk   r   r   r%   r%   r&   %test_hough_ellipse_non_zero_negangle1      

r   c                  C   r   r   r   r   r%   r%   r&   %test_hough_ellipse_non_zero_negangle2   r   r   c                  C   s   t jdtd} d}d}d}d}t j d t jd  }t|||||d	\}}d
| ||f< tj| ddd}|jdd |d }	t||t|	d t|	d |	d d	\}
}t||
 t|| d S r   r   r   r%   r%   r&   %test_hough_ellipse_non_zero_negangle3  s    

r   c                  C   s   t jdtd} d}d}d}d}t j d t j }t|||||d\}}d	| ||f< tj| dd
d}|jdd |d }	t||t|	d
 t|	d |	d d\}
}t||
 t|| d S r   r   r   r%   r%   r&   %test_hough_ellipse_non_zero_negangle4*  s    

r   c                   C   s   t tdjdksJ d S )Nr1   )r   r   )r   r   r   r   shaper%   r%   r%   r&    test_hough_ellipse_all_black_img?  s   r   )/numpyr   r,   numpy.testingr   r   skimager   r   skimage._shared.testingr   skimage.drawr   r   r	   r'   r+   r0   rH   rN   rO   rQ   r`   ri   ro   rq   rp   ru   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r%   r%   r%   r&   <module>   sP    
			
		
$