a
    "Df                     @   sT   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dZ	dddZ
dd ZdS )    N   )color)draw)utils   c           
      C   s  dd }t j| t jd}t |d}t |d}t |d}t j|dddf ddd}t |t dd	d
t j}t dddd }t jjt 	||d|dd}t jjt 	||d|dd}t jjt 	||d|dd}t j
|||fddt j}|durt|ddd
}	t|tr^|	dddddf t| |	dddddf< n&t|tsnJ ||	dddddf< t|	dd
}|S )a%  Label colormap.

    Parameters
    ----------
    n_labels: int
        Number of labels (default: 256).
    value: float or int
        Value scale or value of label color in HSV space.

    Returns
    -------
    cmap: numpy.ndarray, (N, 3), numpy.uint8
        Label id to colormap.

    c                 S   s&   | j d }t| |dd| f S )N)   .)shapenpZ
unpackbitsreshape)Zbytevalidxr	    r   Y/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/imgviz/label.pybitget   s    
zlabel_colormap.<locals>.bitgetdtyper   Nr   r   Zaxis      r      )r
   arangeuint8Z	full_likerepeatZright_shiftastypeZ
bitwise_orreduceZ
left_shiftstackcolor_moduleZrgb2hsvr   
isinstancefloatintZhsv2rgb)
Zn_labelvaluer   irgbjZcmapZhsvr   r   r   label_colormap
   s(    
4r&         ?   rbc	           (   	      s  |du rt  }| jtkr$| tj} ||  }	tjjdd}
| dk }|
j|	 df d |	|< t
| }|d }t tjrt fdd	t|d
 D  nDt trt fdd	t|d
 D  nt   jd
ksJ d k d
k@  sJ  |  dddddf  |durl|jdkr2t|}d
  |t  |	t  }	t|	 ddtj}	du rz|	S ||dk }ttrfdd	|D }nfdd	|D }t|dkr|	S |dkrt|	}	|D ]}| |k}d|	  |j |k r
qtjt|td\}}| ||f |krdt |\}}tj!dt|}|| ||  }}| }t"j#|d\}}t$|	%||f}t"j&|	||d  ||d  f||d qn|dv rztfdd	|D }|j'dd\}}|t| d }|d |d  }| j(dd \}}|dkr`tj|d |d gtd}|||f }n8|dkrtjddgtd}|||f }nt)d*|d | t\} }!| t\}"}# |	| |"|!|#f   d  |	| |"|!|#f< t|	}	t+|D ]t\}$}%||$| d df }&|&|d |d f }'t"j,|	|&|'||% d t"j&|	||$| d|d  f |% d qnt)d *|t-|	S )!a  Convert label to rgb.

    Parameters
    ----------
    label: numpy.ndarray, (H, W), int
        Label image.
    image: numpy.ndarray, (H, W, 3), numpy.uint8
        RGB image.
    alpha: float, or list or dict of float
        Alpha of RGB (default: 0.5).
        If given as a list or dict, it is treated as alpha for each class
        according to the index or key.
    label_names: list or dict of string
        Label id to label name.
    font_size: int
        Font size (default: 30).
    thresh_suppress: float
        Threshold of label ratio in the label image.
    colormap: numpy.ndarray, (M, 3), numpy.uint8
        Label id to color.
        By default, :func:`~imgviz.label_colormap` is used.
    loc: string
        Location of legend (default: 'rb').
        'centroid', 'lt' and 'rb' are supported.
    font_path: str
        Font path.

    Returns
    -------
    res: numpy.ndarray, (H, W, 3), numpy.uint8
        Visualized image.

    Ni  )seedr   r      r   c                    s   g | ]} qS r   r   ).0_alphar   r   
<listcomp>u       zlabel2rgb.<locals>.<listcomp>r   c                    s   g | ]}  |d qS )r'   getr,   label_idr.   r   r   r0   x   r1   r   c                    s   g | ]}  |r|qS r   r2   r4   label_namesr   r   r0      s   c                    s   g | ]} | r|qS r   r   r4   r6   r   r   r0      s   Zcentroid      ?r   )size	font_path)yxtextr   r9   r:   )r)   ltc                    s    g | ]}t j|  d qS ))r:   )draw_module	text_sizer4   )r:   	font_sizer7   r   r   r0      s   
r         
   r)   r=   zunexpected loc: {}r'   )aabb1aabb2fill)r;   r<   r9   r:   zunsupported loc: {}).r&   r   boolr   r
   int32randomZRandomStateZrandsumuniquer   numbersNumberarrayrangedictZasarrayndimallr   Zgray2rgbr   Zcliproundr   lenr   Znumpy_to_pillowr9   _center_of_massr   whererandintr>   r?   Zget_fg_colorZgetpixelZtext_maxr	   
ValueErrorformat	enumerateZ
rectangle_Zpillow_to_numpy)(labelimager/   r7   r@   Zthresh_suppressZcolormaplocr:   resZrandom_stateZmask_unlabeledZunique_labelsZmax_label_idZlabel_imaskyxYXZpoint_indexr<   heightwidthr   Z
text_sizesZtext_height
text_widthZlegend_heightZlegend_widthrE   rD   y1x1y2Zx2r!   r5   Z	box_aabb1Z	box_aabb2r   )r/   r:   r@   r7   r   	label2rgb8   s    ,

"



 








0
rk   c                 C   s|   | j dkr| jtksJ d|  |   } t| d}t| d}t|t| jd  }t|t| jd  }||fS )Nr   r8   r   r   )rQ   r   rG   rJ   r
   r   r	   )r`   ZdxZdyZcxcyr   r   r   rU      s    rU   )r   N)Nr'   Nr(   r   Nr)   N)rL   numpyr
    r   r   r   r>   r   r&   rk   rU   r   r   r   r   <module>   s    
0        
 (