亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? xform.c

?? 利用VC 編寫的SIFT 特征匹配程序,可以在影像 旋轉(zhuǎn),縮放時仍能成功匹配
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*This file contains definitions for functions to compute transforms fromimage feature correspondencesCopyright (C) 2006  Rob Hess <hess@eecs.oregonstate.edu>@version 1.1.1-20070330*/#include "xform.h"#include "imgfeatures.h"#include "utils.h"#include <cxcore.h>#include <gsl/gsl_sf.h>#include <gsl/gsl_rng.h>#include <gsl/gsl_randist.h>#include <time.h>
/************************* Local Function Prototypes *************************/static __inline struct feature* get_match( struct feature*, int );int get_matched_features( struct feature*, int, int, struct feature*** );int calc_min_inliers( int, int, double, double );struct feature** draw_ransac_sample( struct feature**, int, int, gsl_rng* );void extract_corresp_pts( struct feature**, int, int, CvPoint2D64f**,						 CvPoint2D64f** );int find_consensus( struct feature**, int, int, CvMat*, ransac_err_fn,				   double, struct feature*** );static __inline void release_mem( CvPoint2D64f*, CvPoint2D64f*,struct feature** );/********************** Functions prototyped in xform.h **********************//*Calculates a best-fit image transform from image feature correspondences
using RANSAC.

For more information refer to:

Fischler, M. A. and Bolles, R. C.  Random sample consensus: a paradigm for
model fitting with applications to image analysis and automated cartography.
<EM>Communications of the ACM, 24</EM>, 6 (1981), pp. 381--395.

@param features an array of features; only features with a non-NULL match
	of type mtype are used in homography computation
@param n number of features in feat
@param mtype determines which of each feature's match fields to use
	for model computation; should be one of FEATURE_FWD_MATCH,
	FEATURE_BCK_MATCH, or FEATURE_MDL_MATCH; if this is FEATURE_MDL_MATCH,
	correspondences are assumed to be between a feature's img_pt field
	and its match's mdl_pt field, otherwise correspondences are assumed to
	be between the the feature's img_pt field and its match's img_pt field
@param xform_fn pointer to the function used to compute the desired
	transformation from feature correspondences
@param m minimum number of correspondences necessary to instantiate the
	model computed by xform_fn
@param p_badxform desired probability that the final transformation
	returned by RANSAC is corrupted by outliers (i.e. the probability that
	no samples of all inliers were drawn)
@param err_fn pointer to the function used to compute a measure of error
	between putative correspondences and a computed model
@param err_tol correspondences within this distance of a computed model are
	considered as inliers
@param inliers if not NULL, output as an array of pointers to the final
	set of inliers
@param n_in if not NULL and \a inliers is not NULL, output as the final
	number of inliers

@return Returns a transformation matrix computed using RANSAC or NULL
	on error or if an acceptable transform could not be computed.*/CvMat* ransac_xform( struct feature* features, int n, int mtype,					ransac_xform_fn xform_fn, int m, double p_badxform,					ransac_err_fn err_fn, double err_tol,struct feature*** inliers, int* n_in ){	struct feature** matched, ** sample, ** consensus, ** consensus_max = NULL;	struct ransac_data* rdata;	CvPoint2D64f* pts, * mpts;	CvMat* M = NULL;	gsl_rng* rng;	double p, in_frac = RANSAC_INLIER_FRAC_EST;	int i, nm, in, in_min, in_max = 0, k = 0;	nm = get_matched_features( features, n, mtype, &matched );	if( nm < m )	{		fprintf( stderr, "Warning: not enough matches to compute xform, %s" \			" line %d\n", __FILE__, __LINE__ );		goto end;	}	/* initialize random number generator */	rng = gsl_rng_alloc( gsl_rng_mt19937 );	gsl_rng_set( rng, time(NULL) );	in_min = calc_min_inliers( nm, m, RANSAC_PROB_BAD_SUPP, p_badxform );	p = pow( 1.0 - pow( in_frac, m ), k );	i = 0;	while( p > p_badxform )	{		sample = draw_ransac_sample( matched, nm, m, rng );		extract_corresp_pts( sample, m, mtype, &pts, &mpts );		M = xform_fn( pts, mpts, m );		if( ! M )			goto iteration_end;		in = find_consensus( matched, nm, mtype, M, err_fn, err_tol, &consensus);		if( in > in_max )		{			if( consensus_max )				free( consensus_max );			consensus_max = consensus;			in_max = in;			in_frac = (double)in_max / nm;		}		else			free( consensus );		cvReleaseMat( &M );iteration_end:		release_mem( pts, mpts, sample );		p = pow( 1.0 - pow( in_frac, m ), ++k );	}	/* calculate final transform based on best consensus set */	if( in_max >= in_min )	{		extract_corresp_pts( consensus_max, in_max, mtype, &pts, &mpts );		M = xform_fn( pts, mpts, in_max );		in = find_consensus( matched, nm, mtype, M, err_fn, err_tol, &consensus);		cvReleaseMat( &M );		release_mem( pts, mpts, consensus_max );		extract_corresp_pts( consensus, in, mtype, &pts, &mpts );		M = xform_fn( pts, mpts, in );		if( inliers )		{			*inliers = consensus;			consensus = NULL;		}		if( n_in )			*n_in = in;		release_mem( pts, mpts, consensus );	}	else if( consensus_max )	{		if( inliers )			*inliers = NULL;		if( n_in )			*n_in = 0;		free( consensus_max );	}	gsl_rng_free( rng );end:	for( i = 0; i < nm; i++ )	{		rdata = feat_ransac_data( matched[i] );		matched[i]->feature_data = rdata->orig_feat_data;		free( rdata );	}	free( matched );	return M;}/*Calculates a least-squares planar homography from point correspondeces.@param pts array of points@param mpts array of corresponding points; each pts[i], i=0..n-1, corresponds	to mpts[i]@param n number of points in both pts and mpts; must be at least 4@return Returns the 3 x 3 least-squares planar homography matrix that	transforms points in pts to their corresponding points in mpts or NULL if	fewer than 4 correspondences were provided*/CvMat* lsq_homog( CvPoint2D64f* pts, CvPoint2D64f* mpts, int n ){	CvMat* H, * A, * B, X;
	double x[9];	int i;

	if( n < 4 )	{		fprintf( stderr, "Warning: too few points in lsq_homog(), %s line %d\n",			__FILE__, __LINE__ );		return NULL;	}	/* set up matrices so we can unstack homography into X; AX = B */	A = cvCreateMat( 2*n, 8, CV_64FC1 );	B = cvCreateMat( 2*n, 1, CV_64FC1 );	X = cvMat( 8, 1, CV_64FC1, x );	H = cvCreateMat(3, 3, CV_64FC1);	cvZero( A );	for( i = 0; i < n; i++ )	{		cvmSet( A, i, 0, pts[i].x );		cvmSet( A, i+n, 3, pts[i].x );		cvmSet( A, i, 1, pts[i].y );		cvmSet( A, i+n, 4, pts[i].y );		cvmSet( A, i, 2, 1.0 );		cvmSet( A, i+n, 5, 1.0 );		cvmSet( A, i, 6, -pts[i].x * mpts[i].x );		cvmSet( A, i, 7, -pts[i].y * mpts[i].x );		cvmSet( A, i+n, 6, -pts[i].x * mpts[i].y );		cvmSet( A, i+n, 7, -pts[i].y * mpts[i].y );		cvmSet( B, i, 0, mpts[i].x );		cvmSet( B, i+n, 0, mpts[i].y );	}	cvSolve( A, B, &X, CV_SVD );	x[8] = 1.0;	X = cvMat( 3, 3, CV_64FC1, x );	cvConvert( &X, H );
	cvReleaseMat( &A );
	cvReleaseMat( &B );
	return H;}/*Calculates the transfer error between a point and its correspondence fora given homography, i.e. for a point x, it's correspondence x', andhomography H, computes d(x', Hx)^2.@param pt a point@param mpt pt's correspondence@param H a homography matrix@return Returns the transfer error between pt and mpt given H*/double homog_xfer_err( CvPoint2D64f pt, CvPoint2D64f mpt, CvMat* H ){	CvPoint2D64f xpt = persp_xform_pt( pt, H );	return sqrt( dist_sq_2D( xpt, mpt ) );}/*Performs a perspective transformation on a single point.  That is, for apoint (x, y) and a 3 x 3 matrix T this function returns the point(u, v), where[x' y' w']^T = T * [x y 1]^T,and(u, v) = (x'/w', y'/w').Note that affine transforms are a subset of perspective transforms.@param pt a 2D point@param T a perspective transformation matrix@return Returns the point (u, v) as above.*/CvPoint2D64f persp_xform_pt( CvPoint2D64f pt, CvMat* T ){	CvMat XY, UV;	double xy[3] = { pt.x, pt.y, 1.0 }, uv[3] = { 0 };	CvPoint2D64f rslt;	cvInitMatHeader( &XY, 3, 1, CV_64FC1, xy, CV_AUTOSTEP );	cvInitMatHeader( &UV, 3, 1, CV_64FC1, uv, CV_AUTOSTEP );	cvMatMul( T, &XY, &UV );	rslt = cvPoint2D64f( uv[0] / uv[2], uv[1] / uv[2] );	return rslt;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
www..com久久爱| 欧美视频完全免费看| 在线欧美日韩国产| 久久久久亚洲综合| 亚洲国产精品久久不卡毛片| 国产精品综合二区| 91精品国产高清一区二区三区蜜臀 | 亚洲电影在线免费观看| 国产一区二区三区四区五区入口 | 9久草视频在线视频精品| 69堂精品视频| 亚洲风情在线资源站| 成人综合婷婷国产精品久久免费| 欧美一级在线免费| 视频一区视频二区在线观看| 一本大道久久a久久精二百| 久久青草国产手机看片福利盒子| 日本成人中文字幕在线视频 | 日韩精品最新网址| 午夜av电影一区| 在线观看免费视频综合| 日韩一区欧美小说| 99国内精品久久| 国产精品久久久久久久久图文区 | 中文字幕在线不卡一区| 国产精品一区专区| 久久精品一区二区| 国产二区国产一区在线观看| 久久综合九色综合欧美亚洲| 亚洲线精品一区二区三区八戒| 91一区二区在线| 亚洲人成小说网站色在线| 99久久精品免费看国产| 中文字幕色av一区二区三区| 国产 日韩 欧美大片| 国产精品国产三级国产aⅴ原创| 国产成人av影院| 国产精品天天摸av网| 97se亚洲国产综合自在线不卡| 中文字幕一区不卡| 色吊一区二区三区| 石原莉奈一区二区三区在线观看| 91精品综合久久久久久| 国产真实精品久久二三区| 精品少妇一区二区三区在线播放 | 国产欧美日韩不卡| 99re免费视频精品全部| 怡红院av一区二区三区| 欧美精品乱码久久久久久按摩| 蜜桃久久久久久| 中文字幕欧美激情一区| 色婷婷国产精品久久包臀 | 日韩欧美在线影院| 国产成人免费视频网站| 一区二区久久久久久| 欧美一区二区网站| 国产69精品久久777的优势| 亚洲精品写真福利| 日韩欧美电影在线| 94色蜜桃网一区二区三区| 日韩黄色免费电影| 国产日产精品1区| 欧美怡红院视频| 国内精品伊人久久久久av一坑| 日本一区二区三区在线不卡| 欧美视频一区二| 国产精品1区二区.| 亚洲成在线观看| 国产欧美一区二区三区网站| 欧美羞羞免费网站| 国产精品自拍av| 亚洲成av人影院在线观看网| 久久精品男人的天堂| 欧美在线视频日韩| 国产a久久麻豆| 亚洲va欧美va天堂v国产综合| 久久久久国产免费免费| 欧美日韩高清一区二区| 成人黄色av网站在线| 日本亚洲三级在线| 一区二区在线免费观看| 久久精品夜色噜噜亚洲a∨| 欧美亚洲国产一区二区三区va| 国产精品一区二区在线看| 亚洲成人免费观看| 亚洲男女毛片无遮挡| 久久久精品国产免大香伊| 欧美嫩在线观看| 在线影院国内精品| 99精品偷自拍| 国产成a人亚洲| 精品一区二区在线观看| 日韩av中文字幕一区二区三区| 亚洲精品久久久蜜桃| 国产精品人成在线观看免费| 欧美精品一区二区三区在线| 欧美性欧美巨大黑白大战| av欧美精品.com| 成人手机电影网| 国产大陆精品国产| 国产精品一区二区果冻传媒| 日韩电影网1区2区| 婷婷综合五月天| 亚洲一区二区av电影| 自拍偷拍亚洲欧美日韩| 国产欧美精品一区| 国产日韩精品视频一区| 久久女同性恋中文字幕| 久久午夜免费电影| 国产视频一区在线观看| 久久只精品国产| 久久网站热最新地址| 久久久久久99久久久精品网站| 久久网站最新地址| 国产欧美日韩精品在线| 中文字幕免费不卡| 中文字幕一区二区在线播放| 国产精品大尺度| 一区二区三区四区视频精品免费 | 8v天堂国产在线一区二区| 欧美剧在线免费观看网站| 欧美色手机在线观看| 欧美夫妻性生活| 欧美电影免费观看高清完整版在 | 这里只有精品免费| 日韩久久免费av| 欧美韩国日本综合| 国产精品视频一二三| 亚洲免费伊人电影| 日韩有码一区二区三区| 美女尤物国产一区| 风流少妇一区二区| 色伊人久久综合中文字幕| 欧美日韩国产高清一区二区| 日韩一区二区在线观看视频| 久久美女高清视频| 亚洲欧美日韩国产一区二区三区 | 成人国产精品免费观看视频| 91麻豆视频网站| 欧美挠脚心视频网站| 26uuu另类欧美亚洲曰本| 亚洲欧洲日韩在线| 日韩国产在线观看| 丰满亚洲少妇av| 欧美性猛交xxxxxxxx| 久久综合久久久久88| 日韩一区在线播放| 麻豆91在线播放免费| 91在线国产福利| 欧美一级精品在线| 国产精品九色蝌蚪自拍| 日韩和欧美的一区| 91在线视频免费91| 欧美一区二区日韩一区二区| 国产亚洲1区2区3区| 一二三区精品视频| 韩国v欧美v日本v亚洲v| 91福利国产精品| 亚洲国产精品成人久久综合一区 | 高清不卡在线观看av| 欧美三级蜜桃2在线观看| 国产农村妇女精品| 免费黄网站欧美| 91久久久免费一区二区| 精品久久久久久久久久久久包黑料| 国产精品国产自产拍在线| 蜜臀av一区二区在线观看| 色欧美片视频在线观看| 国产视频一区不卡| 麻豆成人免费电影| 欧美日韩一区二区三区视频| 欧美激情一区不卡| 久久99精品国产麻豆婷婷洗澡| 色8久久人人97超碰香蕉987| 国产清纯在线一区二区www| 美国三级日本三级久久99| 欧美三级电影在线看| 一区二区三区 在线观看视频| 丁香婷婷综合网| 久久综合网色—综合色88| 青青草97国产精品免费观看 | 欧美女孩性生活视频| 一区二区在线看| 91亚洲大成网污www| 国产精品亲子伦对白| 国产一本一道久久香蕉| 精品人伦一区二区色婷婷| 舔着乳尖日韩一区| 欧美美女激情18p| 亚洲二区在线视频| 欧美巨大另类极品videosbest| 亚洲在线视频一区| 欧美亚洲动漫制服丝袜| 亚洲一区二区影院| 欧美三级一区二区| 午夜久久久久久| 日韩一区二区三区在线| 男男gaygay亚洲| 久久综合色8888| 丰满白嫩尤物一区二区|