~gabriel1984sibiu/opencv1/opencv

« back to all changes in this revision

Viewing changes to modules/contrib/src/polyfit.cpp

  • Committer: Vadim Pisarevsky
  • Date: 2014-06-24 15:18:51 UTC
  • mto: This revision was merged to the branch mainline in revision 6051.
  • Revision ID: git-v1:3858f2291d64652a82fea930ba5c598045633843
removed contrib, legacy and softcsscade modules; removed latentsvm and datamatrix detector from objdetect. removed haartraining and sft apps.
some of the stuff will be moved to opencv_contrib module.
in order to make this PR pass buildbot, please, comment off opencv_legacy, opencv_contrib and opencv_softcascade test runs.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*M///////////////////////////////////////////////////////////////////////////////////////
2
 
//
3
 
//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
4
 
//
5
 
//  By downloading, copying, installing or using the software you agree to this license.
6
 
//  If you do not agree to this license, do not download, install,
7
 
//  copy or use the software.
8
 
//
9
 
//
10
 
//                           License Agreement
11
 
//                For Open Source Computer Vision Library
12
 
//
13
 
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
14
 
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
15
 
// Third party copyrights are property of their respective owners.
16
 
//
17
 
// Redistribution and use in source and binary forms, with or without modification,
18
 
// are permitted provided that the following conditions are met:
19
 
//
20
 
//   * Redistribution's of source code must retain the above copyright notice,
21
 
//     this list of conditions and the following disclaimer.
22
 
//
23
 
//   * Redistribution's in binary form must reproduce the above copyright notice,
24
 
//     this list of conditions and the following disclaimer in the documentation
25
 
//     and/or other materials provided with the distribution.
26
 
//
27
 
//   * The name of the copyright holders may not be used to endorse or promote products
28
 
//     derived from this software without specific prior written permission.
29
 
//
30
 
// This software is provided by the copyright holders and contributors "as is" and
31
 
// any express or implied warranties, including, but not limited to, the implied
32
 
// warranties of merchantability and fitness for a particular purpose are disclaimed.
33
 
// In no event shall the Intel Corporation or contributors be liable for any direct,
34
 
// indirect, incidental, special, exemplary, or consequential damages
35
 
// (including, but not limited to, procurement of substitute goods or services;
36
 
// loss of use, data, or profits; or business interruption) however caused
37
 
// and on any theory of liability, whether in contract, strict liability,
38
 
// or tort (including negligence or otherwise) arising in any way out of
39
 
// the use of this software, even if advised of the possibility of such damage.
40
 
//
41
 
//M*/
42
 
 
43
 
// This original code was written by
44
 
//  Onkar Raut
45
 
//  Graduate Student,
46
 
//  University of North Carolina at Charlotte
47
 
 
48
 
#include "precomp.hpp"
49
 
 
50
 
typedef double polyfit_type;
51
 
 
52
 
void cv::polyfit(const Mat& src_x, const Mat& src_y, Mat& dst, int order)
53
 
{
54
 
    const int wdepth = DataType<polyfit_type>::depth;
55
 
    int npoints = src_x.checkVector(1);
56
 
    int nypoints = src_y.checkVector(1);
57
 
 
58
 
    CV_Assert(npoints == nypoints && npoints >= order+1);
59
 
 
60
 
    Mat srcX = Mat_<polyfit_type>(src_x), srcY = Mat_<polyfit_type>(src_y);
61
 
 
62
 
    Mat X = Mat::zeros(order + 1, npoints, wdepth);
63
 
    polyfit_type* pSrcX = (polyfit_type*)srcX.data;
64
 
    polyfit_type* pXData = (polyfit_type*)X.data;
65
 
    int stepX = (int)(X.step/X.elemSize1());
66
 
    for (int y = 0; y < order + 1; ++y)
67
 
    {
68
 
        for (int x = 0; x < npoints; ++x)
69
 
        {
70
 
            if (y == 0)
71
 
                pXData[x] = 1;
72
 
            else if (y == 1)
73
 
                pXData[x + stepX] = pSrcX[x];
74
 
            else pXData[x + y*stepX] = pSrcX[x]* pXData[x + (y-1)*stepX];
75
 
        }
76
 
    }
77
 
 
78
 
    Mat A, b, w;
79
 
    mulTransposed(X, A, false);
80
 
    b = X*srcY;
81
 
    solve(A, b, w, DECOMP_SVD);
82
 
    w.convertTo(dst, std::max(std::max(src_x.depth(), src_y.depth()), CV_32F));
83
 
}