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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gsnake.c

?? snake算法
?? C
?? 第 1 頁 / 共 2 頁
字號:
/****************************************************************************
 File Name  : gsnake.c
 Purpose    : provides g-snake manipulation routines, includes energy
	      minimization, minimax regularization and initialization
	      by generalized Hough transform.
 Release    : Version 1.0
 Date	    : Aug 31,1995

GSNAKE API is jointly developed by the Information Technology Institute (ITI), Singapore, and the School of Applied Science, Nanyang Technological
University (NTU), Singapore. 

These software programs are available to the user without any license or royalty fees. Permission is hereby granted to use, copy, modify, and distribute this software and its documentation for any purpose. ITI and NTU gives no warranty, express, implied, or statuary for the software and/or documentation provided, including, without limitation, waranty of merchantibility and warranty of fitness for a particular purpose. The software provided hereunder is on an "as is"  basis, and ITI and NTU has no obligation to provide maintenance, support, updates, enhancements, or modifications.

GSNAKE API is available for any UNIX compatible system. User feedback, bugs, or software and manual suggestions should be sent via electronic mail to one of the following, who may or may not act on them as he/she desires :

		asschan@ntu.ac.sg
		kflai@iti.gov.sg
***************************************************************************/

#include "gsnake.h"
#include "xwindow.h"

GSNAKE::GSNAKE(EEXTTYPE etype, double glambda)
{
	EextType = etype;
	global_lambda = glambda;
	EdgeMap = NULL;
	GaussImg = NULL;
}

GSNAKE::~GSNAKE(void)
{
	reset();
}

void GSNAKE::reset(void)
{
	 EdgeMap = NULL;
	 GaussImg = NULL;
}

GSNAKE::genPyramid(short level, short verbose)
{
	if(EextType == _INTENSITY) 
	  return PYRAMID::generate(level, verbose, 1, 1, 1, 1, 1, _INTENSITY);
	else
	  return PYRAMID::generate(level, verbose) ;
}

/* localize gsnake at desired place. 
   19 May - For original version, localise will crash if called when pyramid 
            is not built.
            Implemented to check for this, will use root image if no pyramid.
            If no root image, will exit 
   
 */
int GSNAKE::localize(int _Qx, int _Qy, 
               int _NR, double _QR, 
               int _Nrxy, double _Qrxy,
               int _Nt,  double _Qt,
               int _Ndx, double _Qdx,
               int _Ndy, double _Qdy,
               double _R, double _THETA)	
{
	CONTOUR *contour;
	GHOUGH GHT_OBJ(_Qx, _Qy, _NR, _QR, _Nrxy, _Qrxy,
               	_Nt, _Qt, _Ndx, _Qdx, _Ndy, _Qdy, _R, _THETA);

        short level = PYRAMID::getLevel() - 1;
       
        if (level<0) {
        	printf("\nAuto generating pyramid to level 1 to localize.\n");
        	PYRAMID::generate(1,1);
        	level = 0;
        }
        
  	expand( LEVEL(-level) );
  	
  	GaussImg = getGauss(level) ;
	EdgeMap = getEdge(level) ;

 
  	/* generalize hough transform */
	switch(EextType) {
	    case _INTENSITY :
  		contour = GHT_OBJ.localize(this, GaussImg) ;
		break ;
	    case _EDGE :
		contour = GHT_OBJ.localize(this, EdgeMap) ;
		break ;
	    case _EDGEMAG :
		contour = GHT_OBJ.localize(this, EdgeMap->getMagImg());
		break ;
	}
        
	contour->duplicate( (CONTOUR *) this); 

	if ( _Qx > 1 || _Qy > 1 ) 
		fineLocalize( _Qx, _Qy); 

	GaussImg = getGauss(0) ;
        EdgeMap = getEdge(0) ;


	/* Expand contour to original size */
	CONTOUR::expand(LEVEL(level));
	
  
	delete contour ;

	return NOERROR;
}

/*
 *  perform fine correlation around center of gravity
    
    Edit : 22 June tmp now duplicates a contour instead of the whole gsnake
 
 */
 
void GSNAKE::fineLocalize(  int _qx,	/* translation resolution */
			    int _qy,
			    int _cg_col,/* centre of gravity */
			    int _cg_row )
{
	register short i, j ;
	SNAXEL *sxptr;
	int max_i, max_j ;
	double max_match, match ;

	/* at least correlate in 3x3 window */
	_qx = MAX(_qx, 3) ;
	_qy = MAX(_qy, 3) ;

	 /* get gaussian pyramid */
        GaussImg = PYRAMID::getGauss( 0 );
        EdgeMap  = PYRAMID::getEdge( 0 );

	/* move centre of gravity if neccessary */
	if ( _cg_col || _cg_row ) {
		translate( ROUNDOFF( _cg_col - cg_col ) , 
			   ROUNDOFF( _cg_row - cg_row ) );
	}
						    
	CONTOUR *tmp = CONTOUR::duplicate();
	
	max_i = max_j = 0 ;
	max_match = -getNumSnaxel() ;
	for (i = - (_qy/2) ; i <= _qy/2 ; i++)
	   for(j = - (_qx/2) ; j <= _qx/2 ; j++) {

		tmp->duplicate(this, 1);
		translate( j, i );
		match = 0;

		/* compute external energy */
		for (sxptr=getHead(); sxptr; sxptr=sxptr->getNext())
			match += EExternal( sxptr ) ;

		match = -match;	

		/* select maximun energy */
		if ( match > max_match ) {
			max_match = match;
			max_i = i;
			max_j = j;
		} 
	}

	tmp->duplicate(this, 1);
	translate( max_j, max_i );
	
	delete tmp;  
}

/*
 * Use a gaussian pyramid to perform coarse to fine minimization
 */
int  GSNAKE::minimize( 
		int segmentSpacing,   /* coarse search spacing */
                int numSearchSegment, /* region to move around */
                int snaxelSpacing,   /* snaxel spacing */
                unsigned char blowup, /* blow up ratio */
                int verbose,
                double theLambda,     /* lambda */
                int showImg,		/* show image ? */
		int img_Xoffset,	/* offset from image */
		int img_Yoffset)
{
        short curLevel;                 /* current gaussian pyramid level */
        int not_minimize = 1;		/* Initialise to not minimized */ 
	double old_lambda;
	
        /* get gaussian pyramid level */
        short level = PYRAMID::getLevel() - 1;

        if (level<0) {
        	printf("\nAuto generating pyramid to level 1 to minimize.\n");
        	PYRAMID::generate(1,1);
        	level = 0;
        }
        
        old_lambda = global_lambda;
        if( theLambda != _DEFINED_LAMBDA) 
             	global_lambda = theLambda;
        
	
	/* Reduce contour back to highest level */
	expand(LEVEL(-level)); 
       
        /* beginning from top-most level, do coarse to fine minimization */
        for (curLevel = level; curLevel >= 0; --curLevel) {

                not_minimize = mn_dymprog(curLevel,
                        segmentSpacing, numSearchSegment, blowup, verbose,
			showImg, img_Xoffset, img_Yoffset);

                 /* go down the levels if neccessary */
                if ( curLevel ) {

		        /* expand snake */
                        expand( LEVEL(1), snaxelSpacing );
                     
                        computeShape() ;

                        /* all verification step must use local minimax */
                        if(snaxelSpacing) global_lambda =  _LOCAL_MINMAX;
                }

        }
	global_lambda = old_lambda;

        return not_minimize;
}

/* 
 * marginalize gsnake to get probability 
 */
double GSNAKE::marginalize(int nhoodTangent, int nhoodNormal)
{
	LOCATIONS searchLocs ;
	nhoodTangent = 2*((int) nhoodTangent/2) + 1;
	nhoodNormal  = 2*((int) nhoodNormal/2)  + 1 ;
	
	/* must use lowest level */
        EdgeMap = getEdge(0) ;
        GaussImg = getGauss(0) ;
        
        if( searchLocs.init(numsnaxel, nhoodTangent*nhoodNormal) == MEMORYERROR)
        {
            fprintf(stderr, 
            	"ERROR : <GSNAKE::dymprog> memory allocation error\n");
	    return MEMORYERROR;
	}

	/* generate square window for marginalization */
	searchLocs.generateLoc(mode, head, tail, 
		nhoodNormal/2, nhoodTangent/2, 1, 0, 1) ;
	
	return dymprog(1, &searchLocs, 1) * 
			 exp(getNumSnaxel()/sig_nu_sqr) / getZ() ;		
}


/*
 * compute total energy of a gsnake object
 */
double GSNAKE::ESnake( short level, int verbose )    /* pyramid edge map */
{
        SNAXEL *pnow;           /* current snaxel */
        
        switch(EextType) {

            case _INTENSITY :
            	if( !(GaussImg = getGauss(level)))
			return PARAMERROR ;
            		break ;

            case _EDGE :
            case _EDGEMAG :
        	if ( !(EdgeMap = getEdge(level))  || 
		     !(GaussImg = getGauss(level)) )
			return PARAMERROR ;
			break;
       }
	
        /* compute average distant of snaxel coordinate */
        computeAvgLength() ;

        /* get initial value */
        Esnake = 0;     /* snake energy */
        Eext = 0;       /* average gradient power on snake */
    
        /* compute snake energy */

        for ( pnow = getHead(); pnow; pnow = pnow->getNext() ) {

                Esnake += ESnaxel( pnow,  _TRUE, verbose );
                Eext += pnow->getEext();                /* gradient power */
        }

        /* compute data strength information */
        Eext    /= (double) numsnaxel;  /* ave. gradient power */
  
        /* compute ave. snake energy */
        Esnake /= (double) numsnaxel;

	
        return Esnake;
}

/*
 * compute  total energy at current snaxel
 */
double GSNAKE::ESnaxel( SNAXEL *now,	/* current snaxel */
                        BOOLEAN store,
                        int verbose )
{
        double Eimage;  /* edge energy */
        double Emodel;  /* model energy */
        double Epoint;  /* total energy at current snaxel */

	double row = now->getRow();
	double col = now->getCol();

        /* check out of range */
        if (row != CAP(0, row, GaussImg->getRow()-1) ||
            col != CAP(0, col, GaussImg->getCol()-1) ) {

                if ( store == _TRUE ) {
                        now->putEext( 1 );
                        now->putEsnaxel( 1 );
                }
                return 1.0;
        }
        
        Eimage = EExternal(now);

        /* compute internal (model) energy */
        Emodel = EInternal( now );

        /* regularize */
        regularize( now, &Emodel, &Eimage, &Epoint);

        /* store energy term if neccessary */
        if (store == _TRUE) {
                now->putEint( Emodel );
                now->putEext( Eimage );
                now->putEsnaxel( Epoint );
        }

        if (verbose){
        	
           fprintf(stdout, "[%d, %d]\t%1.3f\t%1.3f\t%1.3f\t%1.3f\n",
                 ROUNDOFF(col), ROUNDOFF(row), Emodel, Eimage, Epoint ,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品免费网站在线观看| 亚洲国产精品嫩草影院| 一区二区三区精品久久久| 日韩成人dvd| 欧美在线视频你懂得| 欧美激情综合网| 免费成人你懂的| 欧美在线观看视频在线| 国产精品乱子久久久久| 极品美女销魂一区二区三区| 欧美中文字幕亚洲一区二区va在线| 久久精品一区二区三区四区| 日韩成人精品视频| 欧美日韩综合在线| 亚洲欧洲精品一区二区精品久久久 | xnxx国产精品| 日韩激情av在线| 欧洲精品在线观看| 最新国产成人在线观看| 国产高清无密码一区二区三区| 日韩网站在线看片你懂的| 亚洲伊人伊色伊影伊综合网| 91首页免费视频| 国产精品第五页| 国产91精品精华液一区二区三区| 欧美tickling挠脚心丨vk| 丝袜美腿成人在线| 欧美妇女性影城| 亚洲国产va精品久久久不卡综合| 日本高清成人免费播放| 亚洲欧美日韩成人高清在线一区| 成人网在线播放| 中文字幕在线观看不卡| 99re视频这里只有精品| 中文字幕中文乱码欧美一区二区| 国产盗摄女厕一区二区三区| 国产亚洲成aⅴ人片在线观看| 国产乱码精品一区二区三区忘忧草 | 国产欧美一区二区三区鸳鸯浴| 日本女人一区二区三区| 日韩丝袜情趣美女图片| 国产一区二区三区免费观看| 久久伊99综合婷婷久久伊| 国产一区二区三区免费播放| 国产精品午夜春色av| av男人天堂一区| 亚洲午夜私人影院| 91精品国产免费久久综合| 国产一区二区视频在线| 欧美国产精品v| 色婷婷综合久色| 日韩精品电影一区亚洲| 欧美精品一区二区久久久| 粉嫩在线一区二区三区视频| 综合久久久久久| 欧美日本视频在线| 国产美女精品在线| 夜夜爽夜夜爽精品视频| 欧美高清视频一二三区 | 亚洲啪啪综合av一区二区三区| 日本久久电影网| 久久精品国产一区二区| 国产精品免费人成网站| 欧美色图12p| 极品销魂美女一区二区三区| 中文字幕av一区 二区| 欧美午夜精品免费| 国产乱码一区二区三区| 亚洲福中文字幕伊人影院| 久久女同互慰一区二区三区| 色婷婷综合在线| 国产精品一级黄| 亚洲午夜电影网| 国产精品久久99| 欧美一卡二卡三卡四卡| 色综合网站在线| 国精产品一区一区三区mba桃花| 亚洲日本va在线观看| 欧美大片拔萝卜| 色欧美日韩亚洲| 国产成人在线电影| 美女久久久精品| 一区二区三区日韩精品| 国产欧美日韩精品在线| 91精品在线一区二区| 99精品国产99久久久久久白柏| 久久精品国产一区二区三| 一区二区三区欧美久久| 亚洲国产精品成人综合色在线婷婷| 91精品婷婷国产综合久久性色| 94-欧美-setu| 国产 日韩 欧美大片| 日本91福利区| 亚洲成人资源网| 亚洲精品一二三| 国产精品国产自产拍高清av王其| 精品福利视频一区二区三区| 在线不卡一区二区| 欧美日韩dvd在线观看| 91麻豆高清视频| 成人免费视频caoporn| 国产一区二区看久久| 美女网站色91| 麻豆精品视频在线观看| 天天影视网天天综合色在线播放| 亚洲精品老司机| 一区二区免费在线播放| 亚洲欧洲成人精品av97| 国产精品视频看| 国产精品色噜噜| 中文成人综合网| 国产精品女主播av| 中文无字幕一区二区三区 | 国产一区二区女| 精品一区二区三区在线观看 | 亚洲精品国产a| 亚洲一区在线视频观看| 亚洲最新视频在线播放| 一区二区视频在线看| 亚洲日本电影在线| 亚洲午夜电影在线观看| 亚洲午夜一区二区| 日本少妇一区二区| 黄色成人免费在线| 成人自拍视频在线观看| 91视视频在线观看入口直接观看www | 欧美大片一区二区| 国产亚洲精品久| 国产精品的网站| 一区二区日韩电影| 日本视频在线一区| 国产精品小仙女| 成人av一区二区三区| 99re热视频这里只精品| 91豆麻精品91久久久久久| 欧美男同性恋视频网站| 欧美不卡在线视频| 国产色综合一区| 一区二区三区日本| 老司机精品视频线观看86| 国产成人免费视频精品含羞草妖精| 国产成人高清视频| 日本久久精品电影| 欧美大片在线观看一区二区| 亚洲国产精品成人综合| 亚洲一区二区黄色| 九色|91porny| 色婷婷av久久久久久久| 日韩一区和二区| 亚洲欧洲日产国产综合网| 午夜精品久久久久久久久久| 国产自产2019最新不卡| 91麻豆.com| 精品国产乱码久久久久久久久 | 国产精品天美传媒沈樵| 亚洲成精国产精品女| 国产a视频精品免费观看| 欧美色窝79yyyycom| 精品噜噜噜噜久久久久久久久试看| 中文字幕在线视频一区| 丝袜美腿一区二区三区| 波多野结衣欧美| 欧美r级在线观看| 亚洲精品国产无天堂网2021| 久久国内精品视频| 色av一区二区| 国产精品久久久久久久久免费相片 | 激情五月激情综合网| 欧美主播一区二区三区| 国产精品日产欧美久久久久| 蜜臀av一级做a爰片久久| 色婷婷综合久久久久中文一区二区| 久久亚洲捆绑美女| 日本不卡一区二区| 欧美最新大片在线看| 国产精品久久久久影院亚瑟| 看电影不卡的网站| 欧美男人的天堂一二区| 自拍偷拍欧美激情| 国产精品白丝av| 精品人伦一区二区色婷婷| 亚洲va欧美va人人爽午夜| 91网上在线视频| 国产精品无圣光一区二区| 国产一区二区三区不卡在线观看 | 亚洲私人影院在线观看| 高清成人免费视频| 久久免费国产精品| 精品一区二区三区免费毛片爱| 7777精品伊人久久久大香线蕉最新版 | 国内精品不卡在线| 欧美一区二区精美| 日本一区中文字幕| 在线播放欧美女士性生活| 亚洲一区二区欧美日韩| 欧美亚洲一区二区在线| 一区二区日韩av| 欧美日韩国产高清一区二区三区| 亚洲精品一二三四区| 在线日韩av片|