B
    ¶‰\‚  ã               @   s^   d dl ZddlmZ ddlmZ G dd„ deƒZG dd„ deƒZddd„Z	dd„ Z
dd„ ZdS )é    Né   )Úimg_as_float)Ú	assert_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	   ú3lib/python3.7/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 )N)r   r   Zdescriptors_)r   r	   r	   r
   r      s    zDescriptorExtractor.__init__c             C   s
   t ƒ ‚dS )zïExtract feature descriptors in image for given keypoints.

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

        N)r   )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rît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< n8|	dkr†tj||gdd}d|d< n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 |  d|jd |d  |jd |d  df¡ x–t|jd ƒD ]„}||df }||df }|dkr„tj d¡}n|}| j||df ||df |d  f||df ||df |d  fd|d qPW 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   )ÚaxisZverticalzÁplot_matches accepts either 'horizontal' or 'vertical' for alignment, but '{}' was given. See http://scikit-image.org/docs/dev/api/skimage.feature.html#skimage.feature.plot_matches for details.Znone)Z
facecolorsZ
edgecolorsZnearestZgray)ZinterpolationZcmapé   ú-)Úcolor)r   ÚlistÚshaper   Zzerosr   r   ZconcatenateÚformatÚ
ValueErrorZscatterZimshowr   ÚrangeZrandomZrandZplot)ZaxZimage1Zimage2Z
keypoints1Z
keypoints2ZmatchesZkeypoints_colorZmatches_colorZonly_matchesZ	alignmentZ
new_shape1Z
new_shape2Z
new_image1Z
new_image2Úoffsetr   ZmesgÚiZidx1Zidx2r   r	   r	   r
   Úplot_matches+   s\    "


  



 
0
.
"r$   c             C   s   t  | ¡} t| dƒ t| ƒS )Nr   )r   Zsqueezer   r   )r   r	   r	   r
   Ú_prepare_grayscale_input_2DŒ   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distanceZrowsZcolsÚmaskr	   r	   r
   Ú_mask_border_keypoints’   s    hr'   )r   NFr   )Znumpyr   Úutilr   Z_shared.utilsr   Úobjectr   r   r$   r%   r'   r	   r	   r	   r
   Ú<module>   s    
_