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

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

?? mg.cpp

?? 把黑白照片轉換成彩色照片的數值優化算法。
?? CPP
字號:
#include "mg.h"
#include <iostream.h>

 

void MG::smooth(int level) {
  Tensor3d& P = _P[level] ;
  Tensor3d& D = _Div[level];
  
  
  int len_x = (int)(_len_x * pow(2,-level)) ;
  int len_y = (int)(_len_y * pow(2,-level)) ;
  
  
 
  double v,av;
  int nanind=-1;
  vector<pair<index,float> >::iterator cnebl_itr;
  
  bool first_nan=1;
  
  for(int z = 0 ; z< _len_z ; z++){
    for(int y = 0 ; y < len_y ; y++){
      for(int x = 0 ; x < len_x ; x++) {
	
	if ((level==0)&(!_I[level](x,y,z))){
	  P(x,y,z)=D(x,y,z);
	  continue;
	}
	if ((level>0)&(!_I[level](x,y,z))){
	  continue;
	}
	vector<pair<index,float> >& cnebl=_nebl[level](x,y,z);
	  
	v=0;
        av=cnebl.begin()->second;

        cnebl_itr=cnebl.begin(); cnebl_itr++;
	for (; cnebl_itr!=cnebl.end();cnebl_itr++){
	  v+=cnebl_itr->second*(*cnebl_itr->first);
	}
	P(x,y,z)=(D(x,y,z)-v)/(av);
	
      }
    } 
  }
}

void MG::set_init_guess(void) {
}
  
void MG::calc_next_level_residual(int level) {
  Tensor3d& D = _Div[level] ;
  int len_x = (int)(_len_x * pow(2,-level)) ;
  int len_y = (int)(_len_y * pow(2,-level)) ;

  Tensor3d R(len_x, len_y,_len_z) ;
  vector<pair<index,float> >::iterator cnebl_itr;
  
  double v ;
  
  if (level==0){
    _residual=0;
  }
 
  R.clear(0);
  for(int z = 0 ; z < _len_z ; z++){
    for(int y = 0 ; y < len_y ; y++){
      for(int x = 0 ; x < len_x ; x++) {
	if(_I[level](x,y,z) < 1) {
	  R(x,y,z) = 0 ;
	  continue;
	}
	v=0;
	vector<pair<index,float> >& cnebl=_nebl[level](x,y,z);
	cnebl_itr=cnebl.begin();
	for (; cnebl_itr!=cnebl.end();cnebl_itr++){
	  v+=cnebl_itr->second*(*cnebl_itr->first);
	}
	R(x,y,z)=D(x,y,z)-v;
      }
    }
  }
  if (level==0){
    _residual =_residual+ R.norm_euc() ;
  }
  if ( (level+1)<_depth){
    restrict(_P[level],_P[level+1]) ;
  }
  
  int nx = len_x / 2 ;
  int ny = len_y / 2 ;
  
  if(level == 0) {
    //  cout <<"level "<<level<<" residual "<< _residual << endl ;
  }
  
}

void MG::zero_next_level(int level) {
}


void MG::add_prolonged_prev_level(int level) {
  Tensor3d pP,tpP; 

  restrict(_P[level],tpP);
  tpP-=_P[level+1];
  prolong(tpP, pP);  
  _P[level] -= pP ;
}


void MG::advance_in_time() {
}


void MG::prolong(Tensor3d& P, Tensor3d& pP) {
  {
    int nx = P.len_x ;
    int ny = P.len_y ;
    int nz = P.len_z ;
    
    int px = nx ;
    int py = ny ;
    int pz = nz ;
    
    int ppx = nx * 2 ;
    int ppy = ny * 2 ;
    int ppz = nz ;
    
    pP.set(ppx, ppy ,ppz) ;

    /* prolonging P */
    for (int z=0; z<nz; z++){
      
      int xxyy = 1 + ppx +z*ppx*ppy;
      int xxpyy = xxyy + 1 ;
      int xxyyp = xxyy + ppx ;
      int xxpyyp = xxyy + 1 + ppx ;
    
      int xy = 0 +z*px*py;
      int xpy = 1 +z*px*py;
      int xyp = px +z*px*py;
      int xpyp = 1 + px +z*px*py ;
      int x,y;
      for( y = 1 ; y < py ; y++) {
	for(x = 1 ; x < px ; x++) {
         
	  pP[xxyy] = 0.5 * P[xy] + 0.25 * (P[xpy] + P[xyp]) ;
	  pP[xxpyy] = 0.5 * P[xpy] + 0.25 * (P[xy] + P[xpyp]) ;
	  pP[xxyyp] = 0.5 * P[xyp] + 0.25 * (P[xpyp] + P[xy]) ;
	  pP[xxpyyp] = 0.5 * P[xpyp] + 0.25 * (P[xpy] + P[xyp]) ;
	  xy ++ ; xpy ++ ; xyp ++ ; xpyp ++ ;
	  xxyy += 2 ; xxpyy += 2 ; xxyyp += 2 ; xxpyyp += 2 ; 
	}
	xy ++ ; xpy ++ ; xyp ++ ; xpyp ++ ;
	xxyy += ppx + 2 ; xxpyy += ppx + 2 ; xxyyp += ppx + 2 ; xxpyyp += ppx + 2 ;
      }

      for( x = 1 ; x < px ; x++) {
	pP(2*x-1,0,z) = P(x-1,0,z) * 0.75 +  P(x,0,z) * 0.25 ;
	pP(2*x-1,ppy-1,z) = P(x-1,py-1,z) * 0.75 +  P(x,py-1,z) * 0.25 ;

	pP(2*x,0,z) = P(x-1,0,z) * 0.25 +  P(x,0,z) * 0.75 ;
	pP(2*x,ppy-1,z) = P(x-1,py-1,z) * 0.25 +  P(x,py-1,z) * 0.75 ;

      }
      for( y = 1 ; y < py ; y++) {
	pP(0,2*y-1,z) = P(0,y-1,z) * 0.75 +  P(0,y,z) * 0.25 ;
	pP(ppx-1,2*y-1,z) = P(px-1,y-1,z) * 0.75 +  P(px-1,y,z) * 0.25 ;

	pP(0,2*y,z) = P(0,y-1,z) * 0.25 + P(0,y,z) * 0.75 ;
	pP(ppx-1,2*y,z) = P(px-1,y-1,z) * 0.25 +  P(px-1,y,z) * 0.75 ;
      }
     
      pP(0,0,z) = P(0,0,z) ;
      pP(ppx-1,0,z) = P(px-1,0,z) ;
      pP(0,ppy-1,z) = P(0,py-1,z) ;
      pP(ppx-1,ppy-1,z) = P(px-1,py-1,z) ;
    }
  }

}



void MG::restrict(Tensor3d& P, Tensor3d& rP) {
 
  int nx = P.len_x ;
  int ny = P.len_y ;
  int nz = P.len_z;
  
  int px = nx / 2 ;
  int py = ny / 2 ;
  int pz = nz;
  rP.set(px, py, pz) ;
  
  int ppx = nx ;

  for (int z=0; z<nz; z++)
  {
    int xy = z*px*py;
    int xxyy = z*nx*ny ;
    int xxpyy = 1 + z*nx*ny;
    int xxyyp = 1 * ppx + z*nx*ny ;
    int xxpyyp = 1 + 1 * ppx + z*nx*ny ;
    
    for(int y = 0 ; y < py ; y++) {
      for(int x = 0 ; x < px ; x++) {
	rP[xy] = (P[xxyy] + P[xxpyy] + P[xxyyp] + P[xxpyyp]) * 0.25 ;
	xy ++ ;
	xxyy += 2 ; xxpyy += 2 ; xxyyp += 2 ; xxpyyp += 2 ;
      }   
      xxyy += ppx  ; xxpyy += ppx ; xxyyp += ppx ; xxpyyp += ppx ;
    }
  }
}



void MG::setFlow(Tensor3d& dx,Tensor3d& dy,Tensor3d& idx,Tensor3d& idy){
  int x0, y0, z0, cx0, cy0, x,y,z,level;
  int len_x=2*_len_x;
  int len_y=2*_len_y;
  double tw;

  Tensor3d pdx,pdy,pidx,pidy,td;
  pdx=dx;
  pdy=dy;
  pidx=idx;
  pidy=idy;
  vector< vector< Tensore3dVI> > neb;
  neb.resize(_depth);
  
  for ( level=0; level<_depth; level++){
    len_x=len_x/2;
    len_y=len_y/2;
    neb[level].resize(_perms_num);
    
    for (int p=0; p<_perms_num;p++){
      neb[level][p].set(len_x,len_y,_len_z);
      
      for ( z=0; z<_len_z; z++){ 
	for ( y=0; y<len_y; y++){
	  for ( x=0; x<len_x; x++){
	    neb[level][p](x,y,z).reserve( _perms_len);
	  }
	}
      }
    
      for ( z=0; z<_len_z; z++){ 
	for ( y=0; y<len_y; y++){
	  for ( x=0; x<len_x; x++){
       
	    for (int q=0; q<_perms_len; q++){
	      x0=x+_perms[p][q][0];
	      y0=y+_perms[p][q][1];
	      z0=z+_perms[p][q][2];
	      
	      if ((x0<0)|(y0<0)|(z0<0)|(x0>=len_x)|(y0>=len_y)|(z0>=_len_z)){
		continue;
	      }
	      if (z0<z){
		 cx0=int(x0-pdx(x0,y0,z0)+0.5);
		 cy0=int(y0-pdy(x0,y0,z0)+0.5);
	      }
	      if (z0>z){
		 cx0=int(x0-pidx(x0,y0,z)+0.5);
		 cy0=int(y0-pidy(x0,y0,z)+0.5);
	      }
	      if (z0==z){
		cx0=x0; cy0=y0;
	      }
	      if ((cx0<0)|(cy0<0)|(z0<0)|(cx0>=len_x)|(cy0>=len_y)|(z0>=_len_z)){
		continue;
	      } 
	      
	      neb[level][p](x,y,z).push_back(cx0+cy0*len_x+z0*len_x*len_y);
	   
	    }  
	  }
	}
      }
    }


    restrict(pdx,td);
    pdx=td;
    restrict(pdy,td);
    pdy=td;
    restrict(pidx,td);
    pidx=td;
    restrict(pidy,td);
    pidy=td;
  }
  



  vector<int> tlist, tneb;
  vector<int>::iterator tneb_itr,tlist_itr,end_itr;
  
  vector<pair<index,float> > cnebl;
  vector<pair<index,float> > *pcnebl;
  pair<index,float> tpair;
  int prev_ind;
  len_x=2*_len_x; len_y=2*_len_y;
  
  for ( level=0; level<_depth; level++){
    len_x=len_x/2;
    len_y=len_y/2;
    _nebl[level].set(len_x,len_y,_len_z);
 
    for (int z=0; z<_len_z; z++){ 
      for (int y=0; y<len_y; y++){
	for (int x=0; x<len_x; x++){
	  
          tlist.resize(0);
	  for (int p=0; p<_perms_num;p++){
	    tneb=neb[level][p](x,y,z);
	    for (tneb_itr=tneb.begin(); tneb_itr!=tneb.end();tneb_itr++){
	      tlist.push_back(*tneb_itr); 
	    }
	    
	  }
	  
          sort(tlist.begin(),tlist.end());
	
 
	  if ( _len_z==1){
	    _nebl[level](x,y,z).reserve(9);
	  }else{
	    _nebl[level](x,y,z).reserve(27);
	  }
	  
 
	  pcnebl=&_nebl[level](x,y,z);
	  
	  prev_ind=-1;
	  for(tlist_itr=tlist.begin(); tlist_itr!=tlist.end(); tlist_itr++){
	    if (prev_ind< (*tlist_itr)){
              tpair.first=&(_P[level][*tlist_itr]);
	      tpair.second=0;		   
	      pcnebl->push_back(tpair);
	      prev_ind= (*tlist_itr);   
	    }
	  }
	 
	  
	}

      }
    }
    
  }

  
  
   
  double var, mean, g_val, sum_w, t_val;
  vector<double> g_vec,w_vec,b_g_vec;
  vector<index> p_vec;
  vector<pair<index, pair<double,double> > > t_vec;
  vector<pair<index, pair<double,double> > >::iterator t_vec_itr;
  pair<index, pair<double,double> > t_data;
  vector<pair<index,float> >::iterator cnebl_itr;
  len_x=2*_len_x; len_y=2*_len_y;
  bool first_nan=1;
  
  
  for ( level=0; level<_depth; level++){
    len_x=len_x/2;
    len_y=len_y/2;
    
    for (int z=0; z<_len_z; z++){ 
      for (int y=0; y<len_y; y++){
	for (int x=0; x<len_x; x++){
	 
	  for (int p=0; p<_perms_num;p++){
	   
	    tneb=neb[level][p](x,y,z);
	   
	    sort(tneb.begin(),tneb.end());
	    end_itr=unique(tneb.begin(),tneb.end());

	   
	    
	    double csig;
	    int i;
            var=0; t_val=_G[level][1](x,y,z);
	    
	   
	    var=0; mean=0; sum_w=0;
	    g_vec.resize(0);
	    tneb_itr=tneb.begin();
	    for (i=0; tneb_itr!=end_itr;tneb_itr++, i++){
	      g_val=_G[level][1][*tneb_itr];
	      g_vec.push_back((g_val-t_val)*(g_val-t_val)); 
	      sum_w+=1;
	      var+=g_val*g_val;
	      mean+=g_val;
	    }

	    if (g_vec.size()<2){
	      continue;
	    }
	    
	    var/=sum_w;
	    mean/=sum_w;
	    var-=mean*mean;
  
	    sort(g_vec.begin(),g_vec.end());
	    csig=var*0.6;
	    
	    if (csig<(-g_vec[1]/log(0.01))){
	      csig=-g_vec[1]/log(0.01);
	    }
	    if (csig<0.000002){
	      csig=0.000002;
	    }
            sum_w=0;
	    for(i=0; i<g_vec.size(); i++){
	      sum_w+=exp(-g_vec[i]/csig);
	    }
	 
	    t_vec.resize(0);
	    tneb_itr=tneb.begin();   
	    
	    for (i=0; tneb_itr!=end_itr;tneb_itr++, i++){	
	      g_val=_G[level][1][*tneb_itr];
	       
	      tw=exp(-(g_val-t_val)*(g_val-t_val)/csig)/sum_w;
	      
	      if(  (&_P[level][tneb[i]])==(&_P[level](x,y,z))){
		tw-=1;
	      }
	      t_data.first=&_P[level][tneb[i]];
	      t_data.second.first=g_val;
	      t_data.second.second=tw;
	      t_vec.push_back(t_data); 
	
	    }
  
            sort(t_vec.begin(),t_vec.end());
	    
	    pcnebl=&_nebl[level](x,y,z);
	    cnebl_itr=pcnebl->begin();
	  
	    for (t_vec_itr=t_vec.begin();t_vec_itr!=t_vec.end();t_vec_itr++){
	      for(;cnebl_itr->first<t_vec_itr->first;++cnebl_itr);	
	
	      cnebl_itr->second+=(t_vec_itr->second.second);
	      cnebl_itr++; 
	    }
	     
	  }
	   
	  
	}
      }
    }
  }
  
  index cp;
  vector<pair<index,float> >::iterator pnebl_itr;
  len_x=2*_len_x; len_y=2*_len_y;
  for (level=0; level<_depth; level++){
    len_x=len_x/2;
    len_y=len_y/2;
    
    for (int z=0; z<_len_z; z++){ 
      for (int y=0; y<len_y; y++){
	for (int x=0; x<len_x; x++){
	  pcnebl=&_nebl[level](x,y,z);
	  cp=&_P[level](x,y,z);
	 
	  for (cnebl_itr=pcnebl->begin(); cnebl_itr->first!=cp; cnebl_itr++);
	  tpair=*cnebl_itr;
	  pnebl_itr=cnebl_itr;
	   
	  for (; cnebl_itr!=pcnebl->begin();--cnebl_itr){
	    --pnebl_itr;
	    *cnebl_itr=*pnebl_itr;
	  }
	   
	  *(pcnebl->begin())=tpair;
	}

      }
    }
  }  
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品视频免费看| 亚洲欧美日韩综合aⅴ视频| 欧美午夜不卡视频| 一本久道中文字幕精品亚洲嫩| 国产91富婆露脸刺激对白| 国产精品中文字幕一区二区三区| 综合在线观看色| 一色屋精品亚洲香蕉网站| 最好看的中文字幕久久| 亚洲一区在线电影| 亚洲一区二区三区免费视频| 亚洲一区二区三区美女| 日本不卡1234视频| 久久99久久99小草精品免视看| 精品一区二区在线视频| 国产精品资源网站| 一本色道久久综合狠狠躁的推荐| 在线看日本不卡| 日韩美女在线视频| 国产日韩欧美高清| 亚洲一区二区成人在线观看| 丝袜美腿亚洲一区二区图片| 久久99最新地址| av在线一区二区| 欧美日韩极品在线观看一区| 欧美v日韩v国产v| 亚洲欧洲成人av每日更新| 亚洲第一综合色| 国产一区二区三区蝌蚪| 色欧美日韩亚洲| 日韩欧美一区二区不卡| 国产精品久久久久久久蜜臀| 亚洲国产视频网站| 国产69精品久久99不卡| 欧美日韩三级一区二区| 国产日韩欧美综合一区| 日韩中文字幕亚洲一区二区va在线| 精品亚洲成av人在线观看| 91成人网在线| 欧美激情艳妇裸体舞| 亚洲国产成人av| 粗大黑人巨茎大战欧美成人| 欧美精品日韩一区| 国产精品萝li| 激情图片小说一区| 欧美美女一区二区三区| 国产精品久久久久四虎| 激情五月激情综合网| 欧美伦理视频网站| 亚洲黄色尤物视频| 国产高清精品久久久久| 日韩欧美国产三级| 日韩精品乱码免费| 在线观看视频一区二区| 国产精品不卡一区| 成人午夜碰碰视频| 久久你懂得1024| 美国十次综合导航| 欧美日本一区二区| 午夜欧美一区二区三区在线播放| 成人性生交大片免费| 26uuu亚洲| 久久超碰97中文字幕| 欧美美女视频在线观看| 亚洲成在线观看| 欧美熟乱第一页| 一区二区三区在线视频观看| 成人免费视频网站在线观看| 国产亚洲婷婷免费| 韩国精品主播一区二区在线观看 | 日韩一区二区三区在线| 亚洲一区二区视频在线| 欧美色手机在线观看| 一区二区三区在线观看欧美 | 美女尤物国产一区| 欧美最猛黑人xxxxx猛交| 一区二区三区高清不卡| 91免费看视频| 亚洲一区二区三区爽爽爽爽爽| 色域天天综合网| 亚洲大片免费看| 日韩欧美国产小视频| 国内精品视频666| 国产色产综合色产在线视频 | 亚洲桃色在线一区| youjizz久久| 亚洲一区视频在线| 91麻豆精品国产自产在线 | 久久久国产综合精品女国产盗摄| 极品尤物av久久免费看| 国产日产欧产精品推荐色| 99久久综合99久久综合网站| 亚洲精品va在线观看| 91精品国产一区二区三区蜜臀| 免费成人小视频| 国产人成亚洲第一网站在线播放| 9l国产精品久久久久麻豆| 亚洲国产视频一区| 久久奇米777| 91浏览器打开| 日本欧美一区二区三区乱码| 久久久久久麻豆| 91久久线看在观草草青青| 欧美aaaaa成人免费观看视频| 久久只精品国产| 日本福利一区二区| 免费不卡在线观看| 18成人在线视频| 欧美一级黄色录像| 99久久精品免费观看| 免费成人在线播放| 亚洲激情成人在线| 久久伊人中文字幕| 欧美日韩亚洲综合一区二区三区| 91香蕉视频黄| 欧美96一区二区免费视频| 国产精品嫩草99a| 欧美成人a∨高清免费观看| av爱爱亚洲一区| 精品亚洲成a人| 亚洲成av人片www| 国产精品国产三级国产aⅴ中文 | 久久电影网电视剧免费观看| 综合在线观看色| 久久综合999| 日韩一区二区电影在线| 色欧美日韩亚洲| av午夜一区麻豆| 国产精品1024| 蜜桃在线一区二区三区| 亚洲另类一区二区| 国产精品精品国产色婷婷| 欧美xxxx在线观看| 日韩一级大片在线观看| 欧美日韩国产色站一区二区三区| av电影在线观看完整版一区二区| 狠狠色丁香久久婷婷综合丁香| 亚洲高清视频在线| 亚洲精品视频在线观看网站| 亚洲成人7777| 亚洲乱码日产精品bd| 国产精品视频九色porn| 国产亚洲欧美在线| 久久一区二区三区四区| 欧美sm美女调教| 日韩区在线观看| 日韩精品影音先锋| 日韩欧美国产精品| 精品国产伦一区二区三区观看方式 | 亚洲午夜精品一区二区三区他趣| 中文字幕中文字幕一区二区| 国产欧美精品区一区二区三区 | www久久精品| 精品三级在线观看| 欧美成人猛片aaaaaaa| 精品精品国产高清a毛片牛牛 | 欧美电影一区二区| 日韩欧美激情一区| 精品久久久久一区二区国产| 欧美mv日韩mv国产网站app| 91麻豆精品国产91久久久使用方法| 欧美日韩不卡在线| 欧美一级一区二区| 久久久久久久综合日本| 国产免费成人在线视频| 亚洲人成精品久久久久久| 亚洲免费观看高清在线观看| 亚洲五月六月丁香激情| 日韩av二区在线播放| 国产一区不卡视频| www.成人在线| 欧美日韩亚洲综合一区二区三区| 欧美喷潮久久久xxxxx| 日韩免费视频线观看| 国产精品污污网站在线观看| 一区二区在线观看免费视频播放| 亚洲chinese男男1069| 狠狠色丁香婷综合久久| a4yy欧美一区二区三区| 4438x亚洲最大成人网| 亚洲综合视频在线观看| 久久精品国产亚洲5555| 不卡的av在线播放| 欧美日韩情趣电影| 国产无遮挡一区二区三区毛片日本| 中文字幕永久在线不卡| 天堂一区二区在线| 成人黄色网址在线观看| 欧美日韩成人综合在线一区二区| 精品免费一区二区三区| 亚洲男人电影天堂| 国产一区二区三区免费观看| 在线观看91视频| 久久视频一区二区| 香蕉久久夜色精品国产使用方法 | 亚洲国产精品久久人人爱蜜臀| 韩国v欧美v日本v亚洲v| 欧洲一区二区av| 懂色中文一区二区在线播放| 久久久久一区二区三区四区|