U
    ?h                     @   sf   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                   @   s   e Zd Zdd Zdd ZdS )FeatureDetectorc                 C   s   t g | _d S N)nparrayZ
keypoints_self r   F/var/www/html/venv/lib/python3.8/site-packages/skimage/feature/util.py__init__	   s    zFeatureDetector.__init__c                 C   s
   t  dS )z}Detect keypoints in image.

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

        NNotImplementedError)r   imager   r   r   detect   s    	zFeatureDetector.detectN)__name__
__module____qualname__r   r   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd Zdd ZdS )DescriptorExtractorc                 C   s   t g | _d S r   )r   r	   Zdescriptors_r
   r   r   r   r      s    zDescriptorExtractor.__init__c                 C   s
   t  dS )zExtract feature descriptors in image for given keypoints.

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

        Nr   )r   r   	keypointsr   r   r   extract   s    zDescriptorExtractor.extractN)r   r   r   r   r   r   r   r   r   r      s   r   kF
horizontalc
                 C   s  t |}t |}t|j}
t|j}|jd |jd k rH|jd |
d< n"|jd |jd krj|jd |d< |jd |jd k r|jd |
d< n"|jd |jd kr|jd |d< |
|jkrt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rt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 ]}||df }||df }|dkr|d}n|}| j||df ||df |d  f||df ||df |d  fd|d qXd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)Z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 .

" r-   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
    


r3   c                 C   s:   t | } t| tdd t| } t| j}| j|ddS )Nr      Fr.   )r   r0   r   r(   r   r   r   r1   r2   r   r   r   _prepare_grayscale_input_nD   s
    

r5   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    r9   )r   NFr   )numpyr   utilr   Z_shared.utilsr   r   r   r   r-   r3   r5   r9   r   r   r   r   <module>   s         
b