o
    ¥&?eÞ  ã                   @   sj   d dl ZddlmZ ddlmZmZ G dd„ dƒZG dd„ dƒZ	
	ddd„Z	dd„ Z
dd„ Zdd„ ZdS )é    Né   )Úimg_as_float)Ú_supported_float_typeÚcheck_nDc                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚFeatureDetectorc                 C   ó   t  g ¡| _d S ©N)ÚnpÚarrayZ
keypoints_©Úself© r   úU/home/www/facesmatcher.com/pyenv/lib/python3.10/site-packages/skimage/feature/util.pyÚ__init__	   ó   zFeatureDetector.__init__c                 C   ó   t ƒ ‚)z}Detect keypoints in image.

        Parameters
        ----------
        image : 2D array
            Input image.

        ©ÚNotImplementedError)r   Úimager   r   r   Údetect   s   	zFeatureDetector.detectN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r      ó    r   c                   @   r   )ÚDescriptorExtractorc                 C   r   r	   )r
   r   Zdescriptors_r   r   r   r   r      r   zDescriptorExtractor.__init__c                 C   r   )zïExtract feature descriptors in image for given keypoints.

        Parameters
        ----------
        image : 2D array
            Input image.
        keypoints : (N, 2) array
            Keypoint locations as ``(row, col)``.

        r   )r   r   Ú	keypointsr   r   r   Úextract   s   zDescriptorExtractor.extractN)r   r   r   r   r   r   r   r   r   r      r   r   ÚkFÚ
horizontalc
                 C   sØ  t |ƒ}t |ƒ}t|jƒ}
t|jƒ}|jd |jd k r$|jd |
d< n|jd |jd kr5|jd |d< |jd |jd k rG|jd |
d< n|jd |jd krX|jd |d< |
|jkrwtj|
|jd}||d|jd …d|jd …f< |}||jkr–tj||jd}||d|jd …d|jd …f< |}t |j¡}|	dkr®tj||gdd}d|d< n|	dkrÀtj||gdd}d|d< n
d|	› d	}t|ƒ‚|sþ| j	|dd…df |dd…df d
|d | j	|dd…df |d  |dd…df |d  d
|d | j
|dd |  d|jd |d  |jd |d  df¡ tj ¡ }t|jd ƒD ]A}||df }||df }|du rA| d¡}n|}| j||df ||df |d  f||df ||df |d  fd|d q(dS )a¼  Plot matched features.

    Parameters
    ----------
    ax : matplotlib.axes.Axes
        Matches and image are drawn in this ax.
    image1 : (N, M [, 3]) array
        First grayscale or color image.
    image2 : (N, M [, 3]) array
        Second grayscale or color image.
    keypoints1 : (K1, 2) array
        First keypoint coordinates as ``(row, col)``.
    keypoints2 : (K2, 2) array
        Second keypoint coordinates as ``(row, col)``.
    matches : (Q, 2) array
        Indices of corresponding matches in first and second set of
        descriptors, where ``matches[:, 0]`` denote the indices in the first
        and ``matches[:, 1]`` the indices in the second set of descriptors.
    keypoints_color : matplotlib color, optional
        Color for keypoint locations.
    matches_color : matplotlib color, optional
        Color for lines which connect keypoint matches. By default the
        color is chosen randomly.
    only_matches : bool, optional
        Whether to only plot matches and not plot the keypoint locations.
    alignment : {'horizontal', 'vertical'}, optional
        Whether to show images side by side, ``'horizontal'``, or one above
        the other, ``'vertical'``.

    r   é   )ÚdtypeNr   )ÚaxisÚverticalzKplot_matches accepts either 'horizontal' or 'vertical' for alignment, but 'zu' was given. See https://scikit-image.org/docs/dev/api/skimage.feature.html#skimage.feature.plot_matches for details.Únone)Z
facecolorsZ
edgecolorsÚgray)Zcmapé   ú-)Úcolor)r   ÚlistÚshaper
   Zzerosr!   r   ZconcatenateÚ
ValueErrorZscatterZimshowr"   ÚrandomZdefault_rngÚrangeZplot)ÚaxZimage1Zimage2Z
keypoints1Z
keypoints2ÚmatchesZkeypoints_colorZmatches_colorZonly_matchesZ	alignmentZ
new_shape1Z
new_shape2Z
new_image1Z
new_image2Úoffsetr   ZmesgÚrngÚiZidx1Zidx2r(   r   r   r   Úplot_matches+   sh   !


 
 

ÿ ÿ0ÿ.

"
þ÷r3   c                 C   s4   t  | ¡} t| dƒ t| ƒ} t| jƒ}| j|ddS )Nr   F©Úcopy)r
   Úsqueezer   r   r   r!   Úastype©r   Zfloat_dtyper   r   r   Ú_prepare_grayscale_input_2D   s
   


r9   c                 C   s:   t  | ¡} t| tddƒƒ t| ƒ} t| jƒ}| j|ddS )Nr   é   Fr4   )r
   r6   r   r-   r   r   r!   r7   r8   r   r   r   Ú_prepare_grayscale_input_nD•   s
   

r;   c                 C   s|   | d }| d }|d |dd…df k |dd…df || d k @ |d |dd…df k @ |dd…df || d k @ }|S )aò  Mask coordinates that are within certain distance from the image border.

    Parameters
    ----------
    image_shape : (2, ) array_like
        Shape of the image as ``(rows, cols)``.
    keypoints : (N, 2) array
        Keypoint coordinates as ``(rows, cols)``.
    distance : int
        Image border distance.

    Returns
    -------
    mask : (N, ) bool array
        Mask indicating if pixels are within the image (``True``) or in the
        border region of the image (``False``).

    r   r    Nr   )Zimage_shaper   ZdistanceÚrowsÚcolsÚmaskr   r   r   Ú_mask_border_keypoints   s   ÿþýr?   )r   NFr   )Únumpyr
   Úutilr   Z_shared.utilsr   r   r   r   r3   r9   r;   r?   r   r   r   r   Ú<module>   s    
þb