o
    h                     @   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array
keypoints_self r   O/var/www/html/scripts/venv/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   descriptors_r   r   r   r   r      r   zDescriptorExtractor.__init__c                 C   r   )zExtract 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rtj||jd}||d|jd d|jd f< |}t|j}|	dkrt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 ]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)
facecolors
edgecolorsgray)cmap   -)color)r   listshaper
   zerosr#   r   concatenate
ValueErrorscatterimshowr$   randomdefault_rngrangeplot)aximage1image2
keypoints1
keypoints2matcheskeypoints_colormatches_coloronly_matches	alignment
new_shape1
new_shape2
new_image1
new_image2offsetr   mesgrngiidx1idx2r-   r   r   r   plot_matches+   sh   !


 
 

 0.

"
rM   c                 C   s4   t | } t| d t| } t| j}| j|ddS )Nr   Fcopy)r
   squeezer   r   r   r#   astyper   float_dtyper   r   r   _prepare_grayscale_input_2D   s
   


rT   c                 C   s:   t | } t| tdd t| } t| j}| j|ddS )Nr      FrN   )r
   rP   r   r7   r   r   r#   rQ   rR   r   r   r   _prepare_grayscale_input_nD   s
   

rV   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   )image_shaper   distancerowscolsmaskr   r   r   _mask_border_keypoints   s   r\   )r    NFr!   )numpyr
   utilr   _shared.utilsr   r   r   r   rM   rT   rV   r\   r   r   r   r   <module>   s    
b