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

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

?? perform_front_propagation_2d.cpp.svn-base

?? fast marching method
?? SVN-BASE
字號:
/*=================================================================% perform_front_propagation_2d - perform a Fast Marching front propagation.%%   [D,S,Q] = perform_front_propagation_2d(W,start_points,end_points,nb_iter_max, H, L, values);%%   'D' is a 2D array containing the value of the distance function to seed.%	'S' is a 2D array containing the state of each point : %		-1 : dead, distance have been computed.%		 0 : open, distance is being computed but not set.%		 1 : far, distance not already computed.%	'W' is the weight matrix (inverse of the speed).%	'start_points' is a 2 x num_start_points matrix where k is the number of starting points.%	'H' is an heuristic (distance that remains to goal). This is a 2D matrix.%   %   Copyright (c) 2004 Gabriel Peyr?*=================================================================*/// select to test or not to test (debug purpose)// #define CHECK_HEAP check_heap(i,j,k);#ifndef CHECK_HEAP	#define CHECK_HEAP#endif// error display// #define ERROR_MSG(a) mexErrMsgTxt(a)#ifndef ERROR_MSG	#define ERROR_MSG(a) #endif// #define WARN_MSG(a)  mexWarnMsgTxt(a) #ifndef WARN_MSG	#define WARN_MSG(a)#endif#include "perform_front_propagation_2d.h"#include "fheap/fib.h"#include "fheap/fibpriv.h"#define kDead -1#define kOpen 0#define kFar 1/* Global variables */int n;			// widthint p;			// heightdouble* D = NULL;double* S = NULL;double* W = NULL;double* Q = NULL;double* start_points = NULL;double* end_points = NULL;double* values = NULL;double* H = NULL;double* L = NULL;int nb_iter_max = 100000;int nb_start_points = 0;int nb_end_points = 0;fibheap_el** heap_pool = NULL;#define ACCESS_ARRAY(a,i,j) a[(i)+n*(j)]#define D_(i,j) ACCESS_ARRAY(D,i,j)#define S_(i,j) ACCESS_ARRAY(S,i,j)#define W_(i,j) ACCESS_ARRAY(W,i,j)#define H_(i,j) ACCESS_ARRAY(H,i,j)#define Q_(i,j) ACCESS_ARRAY(Q,i,j)#define L_(i,j) ACCESS_ARRAY(L,i,j)#define heap_pool_(i,j) ACCESS_ARRAY(heap_pool,i,j)#define start_points_(i,k) start_points[(i)+2*(k)]#define end_points_(i,k) end_points[(i)+2*(k)]struct point{	point( int ii, int jj )	{ i = ii; j = jj; }	int i,j;};typedef std::vector<point*> point_list;inline bool end_points_reached(const int i, const int j ){	for( int k=0; k<nb_end_points; ++k )	{		if( i==((int)end_points_(0,k)) && j==((int)end_points_(1,k)) )			return true;	}	return false;}inline int compare_points(void *x, void *y){	point& a = *( (point*) x );	point& b = *( (point*) y );	if( H==NULL )		return cmp( D_(a.i,a.j), D_(b.i,b.j) );	else		return cmp( D_(a.i,a.j)+H_(a.i,a.j), D_(b.i,b.j)+H_(b.i,b.j) );}// test the heap validityvoid check_heap( int i, int j ){	for( int x=0; x<n; ++x )		for( int y=0; y<p; ++y )		{			if( heap_pool_(x,y)!=NULL )			{				point& pt = * (point*)heap_pool_(x,y)->fhe_data;				if( H==NULL )				{					if( D_(i,j)>D_(pt.i,pt.j) )						ERROR_MSG("Problem with heap.\n");				}				else				{					if( D_(i,j)+H_(i,j)>D_(pt.i,pt.j)+H_(pt.i,pt.j) )						ERROR_MSG("Problem with heap.\n");				}			}		}}void perform_front_propagation_2d(T_callback_intert_node callback_insert_node){	// create the Fibonacci heap	struct fibheap* open_heap = fh_makeheap();	fh_setcmp(open_heap, compare_points);	double h = 1.0/n;		// initialize points	for( int i=0; i<n; ++i )	for( int j=0; j<p; ++j )	{		D_(i,j) = GW_INFINITE;		S_(i,j) = kFar;		Q_(i,j) = -1;	}	// record all the points	heap_pool = new fibheap_el*[n*p]; 	memset( heap_pool, NULL, n*p*sizeof(fibheap_el*) );	// inialize open list	point_list existing_points;	for( int k=0; k<nb_start_points; ++k )	{		int i = (int) start_points_(0,k);		int j = (int) start_points_(1,k);		if( D_( i,j )==0 )			ERROR_MSG("start_points should not contain duplicates.");		point* pt = new point( i,j );		existing_points.push_back( pt );			// for deleting at the end		heap_pool_(i,j) = fh_insert( open_heap, pt );			// add to heap		if( values==NULL ) 			D_( i,j ) = 0;		else			D_( i,j ) = values[k];		S_( i,j ) = kOpen;		Q_(i,j) = k;	}	// perform the front propagation	int num_iter = 0;	bool stop_iteration = GW_False;	while( !fh_isempty(open_heap) && num_iter<nb_iter_max && !stop_iteration )	{		num_iter++;		// current point		point& cur_point = * ((point*) fh_extractmin( open_heap ));		int i = cur_point.i;		int j = cur_point.j;		heap_pool_(i,j) = NULL;		S_(i,j) = kDead;		stop_iteration = end_points_reached(i,j);				/*		char msg[200];		sprintf(msg, "Cool %f", Q_(i,j) );		WARN_MSG( msg ); 		*/				CHECK_HEAP;		// recurse on each neighbor		int nei_i[4] = {i+1,i,i-1,i};		int nei_j[4] = {j,j+1,j,j-1};		for( int k=0; k<4; ++k )		{			int ii = nei_i[k];			int jj = nei_j[k];			bool bInsert = true;			if( callback_insert_node!=NULL )				bInsert = callback_insert_node(i,j,ii,jj);			// check that the contraint distance map is ok			if( ii>=0 && jj>=0 && ii<n && jj<p && bInsert )			{				double P = h/W_(ii,jj);				// compute its neighboring values				double a1 = GW_INFINITE;				int k1 = -1;				if( ii<n-1 )				{					bool bParticipate = true;					if( callback_insert_node!=NULL )						bParticipate = callback_insert_node(ii,jj,ii+1,jj);					if( bParticipate )					{						a1 = D_(ii+1,jj);						k1 = Q_(ii+1,jj);					}				}				if( ii>0 )				{					bool bParticipate = true;					if( callback_insert_node!=NULL )						bParticipate = callback_insert_node(ii,jj,ii-1,jj);					if( bParticipate )					{						if( D_(ii-1,jj)<a1 )							k1 = Q_(ii-1,jj);						a1 = GW_MIN( a1, D_(ii-1,jj) );					}				}				double a2 = GW_INFINITE;				int k2 = -1;				if( jj<p-1 )				{					bool bParticipate = true;					if( callback_insert_node!=NULL )						bParticipate = callback_insert_node(ii,jj,ii,jj+1);					if( bParticipate )					{						a2 = D_(ii,jj+1);						k2 = Q_(ii,jj+1);					}				}				if( jj>0 )				{					bool bParticipate = true;					if( callback_insert_node!=NULL )						bParticipate = callback_insert_node(ii,jj,ii,jj-1);					if( bParticipate )					{						if( D_(ii,jj-1)<a2 )							k2 = Q_(ii,jj-1);						a2 = GW_MIN( a2, D_(ii,jj-1) );					}				}				if( a1>a2 )	// swap so that a1<a2				{					double tmp = a1; a1 = a2; a2 = tmp;					int tmpi = k1; k1 = k2; k2 = tmpi;				}				// update its distance				// now the equation is   (a-a1)^2+(a-a2)^2 = P, with a >= a2 >= a1.				double A1 = 0;				if( P*P > (a2-a1)*(a2-a1) )				{					double delta = 2*P*P-(a2-a1)*(a2-a1);					A1 = (a1+a2+sqrt(delta))/2.0;				}				else					A1 = a1 + P;				if( ((int) S_(ii,jj)) == kDead )				{					// check if action has change. Should not happen for FM					// if( A1<D_(ii,jj) )					//	WARN_MSG("The update is not monotone");#if 1					if( A1<D_(ii,jj) )	// should not happen for FM					{						D_(ii,jj) = A1;						// update the value of the closest starting point						//if( GW_ABS(a1-A1)<GW_ABS(a2-A1) && k1>=0  )							Q_(ii,jj) = k1;						//else						//	Q_(ii,jj) = k2;						//Q_(ii,jj) = Q_(i,j);					}#endif				}				else if( ((int) S_(ii,jj)) == kOpen )				{					// check if action has change.					if( A1<D_(ii,jj) )					{						D_(ii,jj) = A1;						// update the value of the closest starting point						//if( GW_ABS(a1-A1)<GW_ABS(a2-A1) && k1>=0  )							Q_(ii,jj) = k1;						//else						//	Q_(ii,jj) = k2;						//Q_(ii,jj) = Q_(i,j);						// Modify the value in the heap						fibheap_el* cur_el = heap_pool_(ii,jj);						if( cur_el!=NULL )							fh_replacedata( open_heap, cur_el, cur_el->fhe_data );	// use same data for update						else							ERROR_MSG("Error in heap pool allocation."); 					}				}				else if( ((int) S_(ii,jj)) == kFar )				{					if( D_(ii,jj)!=GW_INFINITE )						ERROR_MSG("Distance must be initialized to Inf");					if( L==NULL || A1<=L_(ii,jj) )					{						S_(ii,jj) = kOpen;						// distance must have change.						D_(ii,jj) = A1;						// update the value of the closest starting point						//if( GW_ABS(a1-A1)<GW_ABS(a2-A1) && k1>=0 )							Q_(ii,jj) = k1;						//else						//	Q_(ii,jj) = k2;						//Q_(ii,jj) = Q_(i,j);						// add to open list						point* pt = new point(ii,jj);						existing_points.push_back( pt );						heap_pool_(ii,jj) = fh_insert( open_heap, pt );			// add to heap						}				}				else 					ERROR_MSG("Unkwnown state."); 								}	// end switch		}		// end for	}			// end while//				char msg[200];//				sprintf(msg, "Cool %f", Q_(100,100) );//				 WARN_MSG( msg ); 	// free heap	fh_deleteheap(open_heap);	// free point pool	for( point_list::iterator it = existing_points.begin(); it!=existing_points.end(); ++it )		GW_DELETE( *it );	// free fibheap pool	GW_DELETEARRAY(heap_pool);}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩亚洲欧美在线| 欧美精品一区二区三区久久久| 日本一区二区三区在线观看| 国产乱码精品一区二区三| 精品国产伦一区二区三区免费| 亚洲成人三级小说| 欧美乱妇15p| 久久精品99久久久| 国产亚洲污的网站| 91在线视频播放| 亚洲一区在线观看免费观看电影高清| 在线这里只有精品| 偷拍一区二区三区| 精品人在线二区三区| 麻豆成人久久精品二区三区红| 538在线一区二区精品国产| 日韩视频一区二区三区在线播放| 欧美一区二区美女| 欧美精品久久99久久在免费线 | 国产剧情av麻豆香蕉精品| 国产综合色产在线精品| 粉嫩一区二区三区在线看| 欧美色爱综合网| 国产精品网曝门| 亚洲综合色噜噜狠狠| 日韩制服丝袜先锋影音| 91欧美激情一区二区三区成人| 91精品国产91热久久久做人人 | 久久激情五月激情| 正在播放一区二区| 国产精品情趣视频| 美女视频一区二区| 欧美日韩精品电影| 一区二区高清免费观看影视大全| 国产精品亚洲第一| 欧美va亚洲va| 国产成人自拍网| 亚洲欧洲成人自拍| 蜜桃视频在线观看一区| 欧美私人免费视频| 麻豆精品久久精品色综合| 欧美老女人在线| 国内精品伊人久久久久av影院| 欧美精品一区二区精品网| 成人午夜激情影院| 亚洲一区二区精品3399| 久久久久久久电影| 国产成人免费高清| 欧美丝袜丝nylons| 亚洲一区二区三区美女| 在线亚洲一区观看| 亚洲精品少妇30p| 欧美天天综合网| 国产麻豆一精品一av一免费| 国产精品国产三级国产普通话99 | 色综合网站在线| 一区二区三区免费| 26uuuu精品一区二区| 97久久超碰国产精品电影| 亚洲午夜羞羞片| 国产精品久久久久久一区二区三区 | 免费在线看成人av| 国产精品欧美一区二区三区| 欧美日韩精品一区二区在线播放| 久久国产成人午夜av影院| 亚洲欧洲色图综合| 久久综合色一综合色88| 欧美精品1区2区| 亚洲色图欧美在线| 精品一二三四区| 一二三四社区欧美黄| 中文字幕一区二区三区四区不卡| 欧美一级黄色片| 在线精品视频小说1| 国产尤物一区二区| 国产一区二区三区观看| 99re热视频这里只精品| 国产成人在线视频播放| 日韩黄色小视频| 国产精品狼人久久影院观看方式| 91精品免费观看| 欧美视频一区二区三区在线观看 | 26uuu亚洲综合色欧美| 久久久久久久久伊人| 亚洲免费视频中文字幕| 天天综合网 天天综合色| 免费在线看一区| 不卡欧美aaaaa| 精品日韩一区二区三区免费视频| 国产欧美1区2区3区| 精品久久久久久久久久久久久久久久久 | 国产91富婆露脸刺激对白| 欧美撒尿777hd撒尿| 欧美国产精品专区| 麻豆免费精品视频| 在线亚洲免费视频| 精品盗摄一区二区三区| 亚洲精品视频在线| 国产一区91精品张津瑜| 日韩欧美国产一二三区| 精品成人a区在线观看| 国产欧美一区二区在线| 欧美电影精品一区二区| 国产精品不卡在线| 男女男精品视频| 99久久精品免费看国产| 欧美精品九九99久久| 日本一区二区视频在线| 久久99久久精品| 中文字幕 久热精品 视频在线| 国产精品亚洲第一区在线暖暖韩国| 久久久精品中文字幕麻豆发布| 久久国产尿小便嘘嘘尿| 成人禁用看黄a在线| 欧美成人官网二区| 亚洲精品v日韩精品| 国产成人免费视频网站 | 美女视频一区在线观看| 97se亚洲国产综合在线| 欧美va在线播放| 三级久久三级久久| 欧美色图在线观看| 一区二区三区精品视频在线| 国产精品自在在线| 国产日韩欧美高清| caoporn国产一区二区| 欧美国产在线观看| 色综合网站在线| 美日韩黄色大片| 国产午夜久久久久| 欧美最新大片在线看 | 欧美哺乳videos| 狠狠色综合色综合网络| 精品电影一区二区三区| 一本一道久久a久久精品| 亚洲国产精品天堂| 精品国产乱码久久久久久1区2区 | 久久国产剧场电影| 亚洲激情男女视频| 欧美mv日韩mv国产网站app| 91色视频在线| 日韩黄色一级片| 综合久久久久久| 欧美日韩免费观看一区三区| 亚洲视频一区在线| 91视频xxxx| 色婷婷综合在线| 91亚洲精华国产精华精华液| 国产一区二区不卡在线| 国产一区中文字幕| 国产一区二区三区精品视频| 视频一区二区不卡| 免费在线欧美视频| 麻豆精品视频在线| 亚洲va欧美va天堂v国产综合| 精品国偷自产国产一区| 欧美日韩一区二区三区高清| 色综合夜色一区| 99v久久综合狠狠综合久久| 成人午夜碰碰视频| 国产精品影视在线观看| 另类小说色综合网站| 捆绑变态av一区二区三区| 天天综合色天天综合色h| 天涯成人国产亚洲精品一区av| 亚洲444eee在线观看| 亚洲国产日韩综合久久精品| 亚洲成国产人片在线观看| 视频在线观看一区二区三区| 奇米色777欧美一区二区| 日韩—二三区免费观看av| 青青草成人在线观看| 日本欧美一区二区| 国内外成人在线视频| 成人综合婷婷国产精品久久蜜臀 | 日韩欧美国产综合一区| 久久蜜桃香蕉精品一区二区三区| 久久久777精品电影网影网 | 一色桃子久久精品亚洲| 亚洲成人www| 加勒比av一区二区| 午夜天堂影视香蕉久久| 成人午夜激情视频| 久久亚区不卡日本| 日日嗨av一区二区三区四区| 日本高清成人免费播放| 欧美国产乱子伦| 成人免费观看男女羞羞视频| 日韩欧美激情在线| 久久9热精品视频| 欧美大片在线观看一区| 免费观看在线综合色| 91精品免费在线观看| 美女免费视频一区| 在线成人高清不卡| 免费在线观看日韩欧美| 欧美电影免费观看高清完整版在 | 亚洲摸摸操操av| 在线视频综合导航| 亚洲亚洲人成综合网络|