
    k h`                     l    d Z ddlZddlmZ ddlmZ ddlm	Z	 d Z
d ZddZdd	d
ej                  fdZy)z(Common tools to optical flow algorithms.    N)ndimage   )pyramid_reduce)_convertc                 j    |j                         }t        |       D ]  \  }}||dfxx   |z  cc<    |S )a>  Compute warp point coordinates.

    Parameters
    ----------
    grid : iterable
        The sparse grid to be warped (obtained using
        ``np.meshgrid(..., sparse=True)).``)
    flow : ndarray
        The warping motion field.

    Returns
    -------
    out : ndarray
        The warp point coordinates.

    .)copy	enumerate)gridflowoutidxgs        /home/developers/rajanand/mypropertyqr-fmb-refixing-v2/venv/lib/python3.12/site-packages/skimage/registration/_optical_flow_utils.py_get_warp_pointsr   
   s=    " ))+CD/ QCHJ    c                 *   t        || j                  dd       D cg c]
  \  }}||z   }}}t        j                  || j                        }|D ]  }|dt        j
                  f   } |t        j                  | dg|z   ddd      z  }|S c c}}w )	a  Rescale the values of the vector field (u, v) to the desired shape.

    The values of the output vector field are scaled to the new
    resolution.

    Parameters
    ----------
    flow : ndarray
        The motion field to be processed.
    shape : iterable
        Couple of integers representing the output shape.

    Returns
    -------
    rflow : ndarray
        The resized and rescaled motion field.

       Ndtype.r   nearestF)ordermode	prefilter)zipshapenparrayr   newaxisndizoom)r   r   noscalescale_factor_rflows           r   _resize_flowr'   !   s    (  #5$**QR.9:tq!QU:E:88E4L 5#CO45 388qcEke E L ;s   B
      c                     | g}t        | j                        }d}||k  rR|||z  kD  rJt        |d   |d      }|j                  |       t        |j                        }|dz  }||k  r	|||z  kD  rJ|ddd   S )a  Construct image pyramid.

    Parameters
    ----------
    I : ndarray
        The image to be preprocessed (Grayscale or RGB).
    downscale : float
        The pyramid downscale factor.
    nlevel : int
        The maximum number of pyramid levels.
    min_size : int
        The minimum size for any dimension of the pyramid levels.

    Returns
    -------
    pyramid : list[ndarray]
        The coarse to fine images pyramid.

    r   N)channel_axis)minr   r   append)I	downscalenlevelmin_sizepyramidsizecountJs           r   _get_pyramidr7   B   s    * cGqww<DE6>y8'; ;72;	Eq177|
	 6>y8'; ; 4R4=r   c                     | j                   |j                   k7  rt        d      t        j                  |      j                  dvrt        d      t        t        t        t        | |      |||      t        t        ||      |||                  }t        j                  |d   d   j                  f|d   d   j                   z   |      } ||d   d   |d   d   |      }|dd D ]#  \  }	}
 ||	|
t        ||	j                               }% |S )ay  Generic coarse to fine solver.

    Parameters
    ----------
    I0 : ndarray
        The first grayscale image of the sequence.
    I1 : ndarray
        The second grayscale image of the sequence.
    solver : callable
        The solver applied at each pyramid level.
    downscale : float
        The pyramid downscale factor.
    nlevel : int
        The maximum number of pyramid levels.
    min_size : int
        The minimum size for any dimension of the pyramid levels.
    dtype : dtype
        Output data type.

    Returns
    -------
    flow : ndarray
        The estimated optical flow components for each axis.

    z'Input images should have the same shapeefdgz8Only floating point data type are valid for optical flowr   r   r   N)r   
ValueErrorr   r   charlistr   r7   r   zerosndimr'   )I0I1solverr0   r1   r2   r   r3   r   J0J1s              r   _coarse_to_finerD   d   s   : 
xx288BCC	xx6)VWW"e,iJ"e,iJ	
G 88WQZ]'')GAJqM,?,??uMD'!*Q-A5D!"+ <Bb"l4:;< Kr   )g       @r(   r)   )__doc__numpyr   scipyr   r   	transformr   
util.dtyper   r   r'   r7   float32rD    r   r   <module>rL      s9    .    & !.BF  Rrzz2r   