
//
// This file is auto-generated. Please don't modify it!
//
package org.opencv.contrib;

import org.opencv.core.Mat;

// C++: class StereoVar
/**
 * <p>Class for computing stereo correspondence using the variational matching
 * algorithm</p>
 *
 * <p>class StereoVar <code></p>
 *
 * <p>// C++ code:</p>
 *
 *
 * <p>StereoVar();</p>
 *
 * <p>StereoVar(int levels, double pyrScale,</p>
 *
 * <p>int nIt, int minDisp, int maxDisp,</p>
 *
 * <p>int poly_n, double poly_sigma, float fi,</p>
 *
 * <p>float lambda, int penalization, int cycle,</p>
 *
 * <p>int flags);</p>
 *
 * <p>virtual ~StereoVar();</p>
 *
 * <p>virtual void operator()(InputArray left, InputArray right, OutputArray disp);</p>
 *
 * <p>int levels;</p>
 *
 * <p>double pyrScale;</p>
 *
 * <p>int nIt;</p>
 *
 * <p>int minDisp;</p>
 *
 * <p>int maxDisp;</p>
 *
 * <p>int poly_n;</p>
 *
 * <p>double poly_sigma;</p>
 *
 * <p>float fi;</p>
 *
 * <p>float lambda;</p>
 *
 * <p>int penalization;</p>
 *
 * <p>int cycle;</p>
 *
 * <p>int flags;...</p>
 *
 * <p>};</p>
 *
 * <p>The class implements the modified S. G. Kosov algorithm [Publication] that
 * differs from the original one as follows: </code></p>
 * <ul>
 *   <li> The automatic initialization of method's parameters is added.
 *   <li> The method of Smart Iteration Distribution (SID) is implemented.
 *   <li> The support of Multi-Level Adaptation Technique (MLAT) is not
 * included.
 *   <li> The method of dynamic adaptation of method's parameters is not
 * included.
 * </ul>
 *
 * @see <a href="http://docs.opencv.org/modules/contrib/doc/stereo.html#stereovar">org.opencv.contrib.StereoVar</a>
 */
public class StereoVar {

    protected final long nativeObj;
    protected StereoVar(long addr) { nativeObj = addr; }


    public static final int
            USE_INITIAL_DISPARITY = 1,
            USE_EQUALIZE_HIST = 2,
            USE_SMART_ID = 4,
            USE_AUTO_PARAMS = 8,
            USE_MEDIAN_FILTERING = 16,
            CYCLE_O = 0,
            CYCLE_V = 1,
            PENALIZATION_TICHONOV = 0,
            PENALIZATION_CHARBONNIER = 1,
            PENALIZATION_PERONA_MALIK = 2;


    //
    // C++:   StereoVar::StereoVar()
    //

/**
 * <p>The constructor</p>
 *
 * <p>The first constructor initializes <code>StereoVar</code> with all the default
 * parameters. So, you only have to set <code>StereoVar.maxDisp</code> and / or
 * <code>StereoVar.minDisp</code> at minimum. The second constructor enables
 * you to set each parameter to a custom value.</p>
 *
 * @see <a href="http://docs.opencv.org/modules/contrib/doc/stereo.html#stereovar-stereovar">org.opencv.contrib.StereoVar.StereoVar</a>
 */
    public   StereoVar()
    {

        nativeObj = StereoVar_0();

        return;
    }


    //
    // C++:   StereoVar::StereoVar(int levels, double pyrScale, int nIt, int minDisp, int maxDisp, int poly_n, double poly_sigma, float fi, float lambda, int penalization, int cycle, int flags)
    //

/**
 * <p>The constructor</p>
 *
 * <p>The first constructor initializes <code>StereoVar</code> with all the default
 * parameters. So, you only have to set <code>StereoVar.maxDisp</code> and / or
 * <code>StereoVar.minDisp</code> at minimum. The second constructor enables
 * you to set each parameter to a custom value.</p>
 *
 * @param levels The number of pyramid layers, including the initial image.
 * levels=1 means that no extra layers are created and only the original images
 * are used. This parameter is ignored if flag USE_AUTO_PARAMS is set.
 * @param pyrScale Specifies the image scale (<1) to build the pyramids for each
 * image. pyrScale=0.5 means the classical pyramid, where each next layer is
 * twice smaller than the previous. (This parameter is ignored if flag
 * USE_AUTO_PARAMS is set).
 * @param nIt The number of iterations the algorithm does at each pyramid level.
 * (If the flag USE_SMART_ID is set, the number of iterations will be
 * redistributed in such a way, that more iterations will be done on more
 * coarser levels.)
 * @param minDisp Minimum possible disparity value. Could be negative in case
 * the left and right input images change places.
 * @param maxDisp Maximum possible disparity value.
 * @param poly_n Size of the pixel neighbourhood used to find polynomial
 * expansion in each pixel. The larger values mean that the image will be
 * approximated with smoother surfaces, yielding more robust algorithm and more
 * blurred motion field. Typically, poly_n = 3, 5 or 7
 * @param poly_sigma Standard deviation of the Gaussian that is used to smooth
 * derivatives that are used as a basis for the polynomial expansion. For
 * poly_n=5 you can set poly_sigma=1.1, for poly_n=7 a good value would be
 * poly_sigma=1.5
 * @param fi The smoothness parameter, ot the weight coefficient for the
 * smoothness term.
 * @param lambda The threshold parameter for edge-preserving smoothness. (This
 * parameter is ignored if PENALIZATION_CHARBONNIER or PENALIZATION_PERONA_MALIK
 * is used.)
 * @param penalization Possible values: PENALIZATION_TICHONOV - linear
 * smoothness; PENALIZATION_CHARBONNIER - non-linear edge preserving smoothness;
 * PENALIZATION_PERONA_MALIK - non-linear edge-enhancing smoothness. (This
 * parameter is ignored if flag USE_AUTO_PARAMS is set).
 * @param cycle Type of the multigrid cycle. Possible values: CYCLE_O and
 * CYCLE_V for null- and v-cycles respectively. (This parameter is ignored if
 * flag USE_AUTO_PARAMS is set).
 * @param flags The operation flags; can be a combination of the following:
 * <ul>
 *   <li> USE_INITIAL_DISPARITY: Use the input flow as the initial flow
 * approximation.
 *   <li> USE_EQUALIZE_HIST: Use the histogram equalization in the
 * pre-processing phase.
 *   <li> USE_SMART_ID: Use the smart iteration distribution (SID).
 *   <li> USE_AUTO_PARAMS: Allow the method to initialize the main parameters.
 *   <li> USE_MEDIAN_FILTERING: Use the median filer of the solution in the post
 * processing phase.
 * </ul>
 *
 * @see <a href="http://docs.opencv.org/modules/contrib/doc/stereo.html#stereovar-stereovar">org.opencv.contrib.StereoVar.StereoVar</a>
 */
    public   StereoVar(int levels, double pyrScale, int nIt, int minDisp, int maxDisp, int poly_n, double poly_sigma, float fi, float lambda, int penalization, int cycle, int flags)
    {

        nativeObj = StereoVar_1(levels, pyrScale, nIt, minDisp, maxDisp, poly_n, poly_sigma, fi, lambda, penalization, cycle, flags);

        return;
    }


    //
    // C++:  void StereoVar::operator ()(Mat left, Mat right, Mat& disp)
    //

    public  void compute(Mat left, Mat right, Mat disp)
    {

        compute_0(nativeObj, left.nativeObj, right.nativeObj, disp.nativeObj);

        return;
    }


    //
    // C++: int StereoVar::levels
    //

    public  int get_levels()
    {

        int retVal = get_levels_0(nativeObj);

        return retVal;
    }


    //
    // C++: void StereoVar::levels
    //

    public  void set_levels(int levels)
    {

        set_levels_0(nativeObj, levels);

        return;
    }


    //
    // C++: double StereoVar::pyrScale
    //

    public  double get_pyrScale()
    {

        double retVal = get_pyrScale_0(nativeObj);

        return retVal;
    }


    //
    // C++: void StereoVar::pyrScale
    //

    public  void set_pyrScale(double pyrScale)
    {

        set_pyrScale_0(nativeObj, pyrScale);

        return;
    }


    //
    // C++: int StereoVar::nIt
    //

    public  int get_nIt()
    {

        int retVal = get_nIt_0(nativeObj);

        return retVal;
    }


    //
    // C++: void StereoVar::nIt
    //

    public  void set_nIt(int nIt)
    {

        set_nIt_0(nativeObj, nIt);

        return;
    }


    //
    // C++: int StereoVar::minDisp
    //

    public  int get_minDisp()
    {

        int retVal = get_minDisp_0(nativeObj);

        return retVal;
    }


    //
    // C++: void StereoVar::minDisp
    //

    public  void set_minDisp(int minDisp)
    {

        set_minDisp_0(nativeObj, minDisp);

        return;
    }


    //
    // C++: int StereoVar::maxDisp
    //

    public  int get_maxDisp()
    {

        int retVal = get_maxDisp_0(nativeObj);

        return retVal;
    }


    //
    // C++: void StereoVar::maxDisp
    //

    public  void set_maxDisp(int maxDisp)
    {

        set_maxDisp_0(nativeObj, maxDisp);

        return;
    }


    //
    // C++: int StereoVar::poly_n
    //

    public  int get_poly_n()
    {

        int retVal = get_poly_n_0(nativeObj);

        return retVal;
    }


    //
    // C++: void StereoVar::poly_n
    //

    public  void set_poly_n(int poly_n)
    {

        set_poly_n_0(nativeObj, poly_n);

        return;
    }


    //
    // C++: double StereoVar::poly_sigma
    //

    public  double get_poly_sigma()
    {

        double retVal = get_poly_sigma_0(nativeObj);

        return retVal;
    }


    //
    // C++: void StereoVar::poly_sigma
    //

    public  void set_poly_sigma(double poly_sigma)
    {

        set_poly_sigma_0(nativeObj, poly_sigma);

        return;
    }


    //
    // C++: float StereoVar::fi
    //

    public  float get_fi()
    {

        float retVal = get_fi_0(nativeObj);

        return retVal;
    }


    //
    // C++: void StereoVar::fi
    //

    public  void set_fi(float fi)
    {

        set_fi_0(nativeObj, fi);

        return;
    }


    //
    // C++: float StereoVar::lambda
    //

    public  float get_lambda()
    {

        float retVal = get_lambda_0(nativeObj);

        return retVal;
    }


    //
    // C++: void StereoVar::lambda
    //

    public  void set_lambda(float lambda)
    {

        set_lambda_0(nativeObj, lambda);

        return;
    }


    //
    // C++: int StereoVar::penalization
    //

    public  int get_penalization()
    {

        int retVal = get_penalization_0(nativeObj);

        return retVal;
    }


    //
    // C++: void StereoVar::penalization
    //

    public  void set_penalization(int penalization)
    {

        set_penalization_0(nativeObj, penalization);

        return;
    }


    //
    // C++: int StereoVar::cycle
    //

    public  int get_cycle()
    {

        int retVal = get_cycle_0(nativeObj);

        return retVal;
    }


    //
    // C++: void StereoVar::cycle
    //

    public  void set_cycle(int cycle)
    {

        set_cycle_0(nativeObj, cycle);

        return;
    }


    //
    // C++: int StereoVar::flags
    //

    public  int get_flags()
    {

        int retVal = get_flags_0(nativeObj);

        return retVal;
    }


    //
    // C++: void StereoVar::flags
    //

    public  void set_flags(int flags)
    {

        set_flags_0(nativeObj, flags);

        return;
    }


    @Override
    protected void finalize() throws Throwable {
        delete(nativeObj);
    }



    // C++:   StereoVar::StereoVar()
    private static native long StereoVar_0();

    // C++:   StereoVar::StereoVar(int levels, double pyrScale, int nIt, int minDisp, int maxDisp, int poly_n, double poly_sigma, float fi, float lambda, int penalization, int cycle, int flags)
    private static native long StereoVar_1(int levels, double pyrScale, int nIt, int minDisp, int maxDisp, int poly_n, double poly_sigma, float fi, float lambda, int penalization, int cycle, int flags);

    // C++:  void StereoVar::operator ()(Mat left, Mat right, Mat& disp)
    private static native void compute_0(long nativeObj, long left_nativeObj, long right_nativeObj, long disp_nativeObj);

    // C++: int StereoVar::levels
    private static native int get_levels_0(long nativeObj);

    // C++: void StereoVar::levels
    private static native void set_levels_0(long nativeObj, int levels);

    // C++: double StereoVar::pyrScale
    private static native double get_pyrScale_0(long nativeObj);

    // C++: void StereoVar::pyrScale
    private static native void set_pyrScale_0(long nativeObj, double pyrScale);

    // C++: int StereoVar::nIt
    private static native int get_nIt_0(long nativeObj);

    // C++: void StereoVar::nIt
    private static native void set_nIt_0(long nativeObj, int nIt);

    // C++: int StereoVar::minDisp
    private static native int get_minDisp_0(long nativeObj);

    // C++: void StereoVar::minDisp
    private static native void set_minDisp_0(long nativeObj, int minDisp);

    // C++: int StereoVar::maxDisp
    private static native int get_maxDisp_0(long nativeObj);

    // C++: void StereoVar::maxDisp
    private static native void set_maxDisp_0(long nativeObj, int maxDisp);

    // C++: int StereoVar::poly_n
    private static native int get_poly_n_0(long nativeObj);

    // C++: void StereoVar::poly_n
    private static native void set_poly_n_0(long nativeObj, int poly_n);

    // C++: double StereoVar::poly_sigma
    private static native double get_poly_sigma_0(long nativeObj);

    // C++: void StereoVar::poly_sigma
    private static native void set_poly_sigma_0(long nativeObj, double poly_sigma);

    // C++: float StereoVar::fi
    private static native float get_fi_0(long nativeObj);

    // C++: void StereoVar::fi
    private static native void set_fi_0(long nativeObj, float fi);

    // C++: float StereoVar::lambda
    private static native float get_lambda_0(long nativeObj);

    // C++: void StereoVar::lambda
    private static native void set_lambda_0(long nativeObj, float lambda);

    // C++: int StereoVar::penalization
    private static native int get_penalization_0(long nativeObj);

    // C++: void StereoVar::penalization
    private static native void set_penalization_0(long nativeObj, int penalization);

    // C++: int StereoVar::cycle
    private static native int get_cycle_0(long nativeObj);

    // C++: void StereoVar::cycle
    private static native void set_cycle_0(long nativeObj, int cycle);

    // C++: int StereoVar::flags
    private static native int get_flags_0(long nativeObj);

    // C++: void StereoVar::flags
    private static native void set_flags_0(long nativeObj, int flags);

    // native support for java finalize()
    private static native void delete(long nativeObj);

}
