SIFT+RANSAC识别物体,并标注边界


采用SIFT和RANSAC算法完成特征点的匹配和筛选,并求出物体的变换矩阵,通过变换矩阵计算出物体的边界。
资源截图
代码片段和文件信息
#include “sift.h“
#include “my_function.h“
#include 
#include 
#include “math.h“

//#include
using namespace std;



class CvModelEstimator2
{
public:
    CvModelEstimator2(int _modelPoints CvSize _modelSize int _maxBasicSolutions);
    virtual ~CvModelEstimator2();

    virtual int runKernel( const CvMat* m1 const CvMat* m2 CvMat* model )=0;
    virtual bool runLMeDS( const CvMat* m1 const CvMat* m2 CvMat* model
                           CvMat* mask double confidence=0.99 int maxIters=2000 );
    virtual bool runRANSAC( const CvMat* m1 const CvMat* m2 CvMat* model
                            CvMat* mask double threshold
                            double confidence=0.99 int maxIters=2000 );
    virtual bool refine( const CvMat* const CvMat* CvMat* int ) { return true; }
    virtual void setSeed( int64 seed );

protected:
    virtual void computeReprojError( const CvMat* m1 const CvMat* m2
                                     const CvMat* model CvMat* error ) = 0;
    virtual int findInliers( const CvMat* m1 const CvMat* m2
                             const CvMat* model CvMat* error
                             CvMat* mask double threshold );
    virtual bool getSubset( const CvMat* m1 const CvMat* m2
                            CvMat* ms1 CvMat* ms2 int maxAttempts=1000 );
    virtual bool checkSubset( const CvMat* ms1 int count );

    CvRNG rng;
    int modelPoints;
    CvSize modelSize;
    int maxBasicSolutions;
    bool checkPartialSubsets;
};


class CvFMEstimator : public CvModelEstimator2
{
public:
    CvFMEstimator( int _modelPoints );

    virtual int runKernel( const CvMat* m1 const CvMat* m2 CvMat* model );
    virtual int run7Point( const CvMat* m1 const CvMat* m2 CvMat* model );
    virtual int run8Point( const CvMat* m1 const CvMat* m2 CvMat* model );
protected:
    virtual void computeReprojError( const CvMat* m1 const CvMat* m2
                                     const CvMat* model CvMat* error );
};



CV_IMPL void cvConvertPointsHomogeneous( const CvMat* src CvMat* dst )
{
    Ptr temp denom;

    int i s_count s_dims d_count d_dims;
    CvMat _src _dst _ones;
    CvMat* ones = 0;

    if( !CV_IS_MAT(src) )
        CV_Error( !src ? CV_StsNullPtr : CV_StsBadArg
        “The input parameter is not a valid matrix“ );

    if( !CV_IS_MAT(dst) )
        CV_Error( !dst ? CV_StsNullPtr : CV_StsBadArg
        “The output parameter is not a valid matrix“ );

    if( src == dst || src->data.ptr == dst->data.ptr )
    {
        if( src != dst && (!CV_ARE_TYPES_EQ(src dst) || !CV_ARE_SIZES_EQ(srcdst)) )
            CV_Error( CV_StsBadArg “Invalid inplace operation“ );
        return;
    }

    if( src->rows > src->cols )
    {
        if( !((src->cols > 1) ^ (CV_MAT_CN(src->type) > 1)) )
            CV_Error( CV_StsBadSize “Either the number of channels or columns 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     119361  2012-04-28 21:07  sift_RANSACdescriptor.txt

     文件   44695552  2015-07-16 15:48  sift_RANSACipchsift-d07782aesift-bea1e15c.ipch

     文件        117  2012-04-28 21:46  sift_RANSAC
eadme.txt

     文件      55296  2015-07-16 17:47  sift_RANSACReleasesift.exe

     文件    1502208  2015-07-16 17:47  sift_RANSACReleasesift.pdb

     文件      16303  2015-06-02 16:55  sift_RANSACsiftcopy.cpp

     文件      39694  2015-03-06 09:59  sift_RANSACsiftdescriptor.txt

     文件    1774114  2015-03-06 17:20  sift_RANSACsiftdescriptor_1.txt

     文件    2768315  2015-03-17 10:20  sift_RANSACsiftdescriptor_2.txt

     文件      17185  2015-07-16 17:54  sift_RANSACsiftmain.cpp

     文件      31652  2015-07-15 16:31  sift_RANSACsiftmy_function.cpp

     文件       3812  2015-07-09 10:40  sift_RANSACsiftmy_function.h

     文件        889  2004-04-28 05:21  sift_RANSACsiftREADME

     文件      16242  2015-07-16 17:47  sift_RANSACsiftReleasecl.command.1.tlog

     文件     585090  2015-07-16 17:47  sift_RANSACsiftReleaseCL.read.1.tlog

     文件      14188  2015-07-16 17:47  sift_RANSACsiftReleaseCL.write.1.tlog

     文件    1771187  2015-06-02 16:57  sift_RANSACsiftReleasecopy.obj

     文件      14642  2015-07-16 17:47  sift_RANSACsiftReleaselink.command.1.tlog

     文件      31736  2015-07-16 17:47  sift_RANSACsiftReleaselink.read.1.tlog

     文件          2  2015-07-16 17:47  sift_RANSACsiftReleaselink.read.2.tlog

     文件       4590  2015-07-16 17:47  sift_RANSACsiftReleaselink.write.1.tlog

     文件          2  2015-07-16 17:47  sift_RANSACsiftReleaselink.write.2.tlog

     文件    1895034  2015-07-16 17:47  sift_RANSACsiftReleasemain.obj

     文件       3382  2015-07-16 17:47  sift_RANSACsiftReleasemt.command.1.tlog

     文件       4966  2015-07-16 17:47  sift_RANSACsiftReleasemt.read.1.tlog

     文件       1990  2015-07-16 17:47  sift_RANSACsiftReleasemt.write.1.tlog

     文件    1883005  2015-07-15 16:31  sift_RANSACsiftReleasemy_function.obj

     文件        381  2015-07-16 17:47  sift_RANSACsiftReleasesift.exe.intermediate.manifest

     文件         51  2015-07-16 17:47  sift_RANSACsiftReleasesift.lastbuildstate

     文件       4866  2015-07-16 17:47  sift_RANSACsiftReleasesift.log

............此处省略28个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)