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

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

?? ang.c

?? 3DMEDLIB - 三維醫學圖像開發源程序庫及范例
?? C
字號:
/********************  ang.c  ******************************

   Three dimensional surface reconstruction program

   This program assumes that the views from the main axis
   directions were done thus an angle view between two main
   axis views can be created from the depth_code viewa(floating
   point). 

 Daniel Geist
 Michael W. Vannier

 Mallinckrodt Institute of Radiology
 Washington University School of Medicine
 510 S. Kingshighway Blvd.
 St. Louis, Mo. 63110

 Note:  This program is intended for the private non-commercial
 use of interested individuals to provide a fuller explanation of
 the algorithms described in "Three dimensional reconstruction in
 Medical Imaging" by D. Geist and M. Vannier.

 1988
 *************************************************************/

#include <stdio.h>
#include <math.h>
#define FLOAT_LINE 1024
#define PI 3.141592653

/* the structure below is the data for a point on the surface projected
   on the view plane                        */
typedef struct DIS_REC {
      float dist;            /*distance from view plane */
      int indXY;             /* index of data on main axis view */
      char XY;               /* Which main axis view obtained from (X or Y)*/
};

struct DIS_REC distances[256]; /* one projected line */

int NLINES,IXmax,IYmax,xinc,yinc;
int (*xdir)(),(*ydir)();
float THETA,cosTheta,sinTheta,tgnTheta;
float fxbuf[3][256],fybuf[3][256];/* input buffers */

/*  output files  */
char fng[13],fnd[13],xfile[13],yfile[13],DR;

succ(i)
int i;
{return(i==2?0:i+1);}

prev(i)
int i;
{return(i==0?2:i-1);}

forward(i)
int i;
{ return(i); }

backward(i,start)
int i;
{return(start-i); }

/* PUTD - fill a DIS_REC with values */
putd(pdis,D,i,xy_sym)
struct DIS_REC *pdis;
float D;
int i,xy_sym;

{ pdis->dist=D;
  pdis->indXY=i;
  pdis->XY=xy_sym;
}

/* take one line from X and Y views and create a projrcted line */
getdistances(linex,liney)
float linex[],liney[];

{ int i,IND,X,Y;
  float D;
  for(i=0;i<256;i++) distances[i].XY=0;
  /* project Y-data onto image line */
  for(i=0;i<256;i++) if(liney[i]!=256.0){
       X=(*ydir)(i,255);
       IND=IXmax -(X*sinTheta-liney[i]*cosTheta)+0.5;
       D=liney[i]/sinTheta+(X-liney[i]/tgnTheta)*cosTheta;
       if((IND>=0) && (IND<256)){
           if(distances[IND].XY==0)putd(&distances[IND],D,i,1);
           else if(distances[IND].dist>D)putd(&distances[IND],D,i,1);
       }
  }

  /*project X-data onto image plane */
 for(i=0;i<256;i++) if(linex[i]!=256.0){
       Y=(*xdir)(i,255);
       IND=IXmax-(linex[i]*sinTheta-Y*cosTheta)+0.5;
       D=Y/sinTheta+(linex[i]-Y/tgnTheta)*cosTheta;
       if((IND>=0) && (IND<256)){
           if(distances[IND].XY==0)putd(&distances[IND],D,i,2);
           else if(distances[IND].dist>D)putd(&distances[IND],D,i,2);
       }
  }

  /* fill holes due to low resolution */
  for(i=1;i<255;i++)if( (distances[i].XY==0) && (distances[i+1].XY!=0) &&
            (distances[i-1].XY!=0))
             putd(&distances[i],distances[i-1].dist,
                   distances[i-1].indXY,(int)distances[i-1].XY);
}

/* returns gradient shade in point given the variations of the surface */
unsigned char grad(x1,x2,y1,y2,z1,z2,x_fac,y_fac,z_fac)
float x1,x2,y1,y2,z1,z2;
int x_fac,y_fac,z_fac;
{float gx,gy,gz,G,nx,ny;
 unsigned char gxint;
     /* components of gradient */
  gx=(x2-x1)/x_fac;
  gy=(y2-y1)/y_fac;
  gz=(z1-z2)/z_fac;
  G=sqrt(gx*gx+gy*gy+gz*gz);
     /*compute nx,ny normalized x,y component of gradient */
  nx=gx/G;
  ny=gy/G;
  gxint=255*(nx*cosTheta+ny*sinTheta)+0.5; /*scale gradient shade by 256 */
  return(gxint);
}

doline(linex,linex1,linex2,liney,liney1,liney2,z_fac,fg,fd)
float linex[],linex1[],linex2[],liney[],liney1[],liney2[];
int z_fac;
FILE *fg,*fd;

{ int i;
  unsigned char lined[256],lineg[256];
      /* empty bit on image line */
  for(i=0;i<256;i++)if(distances[i].XY==0)lineg[i]=lined[i]=0;
  else{
      lined[i]=(distances[i].dist<256)?255-distances[i].dist+0.5:0;
      /* bit on image line projected from Y view */
      if(distances[i].XY==1) switch(distances[i].indXY){
           case 0:lineg[i]=
                   grad(liney[1]*yinc,liney[0]*yinc,(float)0,(float)2,
                        liney1[0],liney2[0],1,2,z_fac);
                  break;
           case 255:lineg[i]=
                    grad(liney[255]*yinc,liney[254]*yinc,(float)0,(float)2,
                         liney1[255],liney2[255],1,2,z_fac);
                  break;
           default:lineg[i]=
                   grad(liney[distances[i].indXY+yinc],
                        liney[distances[i].indXY-yinc],(float)0,(float)2,
                          liney1[distances[i].indXY],
                          liney2[distances[i].indXY],2,2,z_fac); 
                  break;
      }
      /* bit on image line projected from X view */
      else switch(distances[i].indXY){
           case 0:lineg[i]=
                   grad((float)0,(float)2,linex[1]*xinc,linex[0]*xinc,
                        linex1[0],linex2[0],2,1,z_fac);
                  break;
           case 255:lineg[i]=
                    grad((float)0,(float)2,linex[255]*xinc,linex[254]*xinc,
                         linex1[255],linex2[255],2,1,z_fac);
                  break;
           default:lineg[i]=
                   grad((float)0,(float)2,linex[distances[i].indXY+xinc],
                        linex[distances[i].indXY-xinc],
                          linex1[distances[i].indXY],
                          linex2[distances[i].indXY],2,2,z_fac);
                  break;
      }
  }

  fwrite(lineg,1,256,fg);
  fwrite(lined,1,256,fd);
}

doviews()
{FILE *fg,*fd,*fx,*fy;
 int z,i,j,k,mid;
 mid=1;
 fd=fopen(fnd,"wb");
 fg=fopen(fng,"wb");
 fx=fopen(xfile,"rb");
 fy=fopen(yfile,"rb");

/*read first three lines */
 for(i=0;i<3;i++){
     fseek(fx,(long)FLOAT_LINE*(*ydir)(i,NLINES-1),SEEK_SET);
     fread(fxbuf[i],1,FLOAT_LINE,fx);
     fseek(fy,(long)FLOAT_LINE*(*xdir)(i,NLINES-1),SEEK_SET);
     fread(fybuf[i],1,FLOAT_LINE,fy);
 }

 /* do first line (forward differene)*/
 getdistances(fxbuf[0],fybuf[0]);
 doline(fxbuf[0],fxbuf[0],fxbuf[1],fybuf[0],fybuf[0],fybuf[1],1,fg,fd);

 /* do middle lines (central diffrence) */
 printf("Begining computation of  views\n");
 for(z=0;z<(NLINES-2);z++){      /*for each slice */
     getdistances(fxbuf[mid],fybuf[mid]);
     doline(fxbuf[mid],fxbuf[prev(mid)],fxbuf[succ(mid)],
            fybuf[mid],fybuf[prev(mid)],fybuf[succ(mid)],2,fg,fd);
     fseek(fx,(long)FLOAT_LINE*(*ydir)(i,NLINES-1),SEEK_SET);
     fseek(fy,(long)FLOAT_LINE*(*xdir)(i,NLINES-1),SEEK_SET);
     i++;
     fread(fxbuf[prev(mid)],1,FLOAT_LINE,fx);
     fread(fybuf[prev(mid)],1,FLOAT_LINE,fy);
     mid=succ(mid);
     printf(" did %d \n",z);
 }

 /* do last line (backward difference)*/
 getdistances(fxbuf[mid],fybuf[mid]);
 doline(fxbuf[mid],fxbuf[prev(mid)],fxbuf[mid],
            fybuf[mid],fybuf[prev(mid)],fybuf[mid],1,fg,fd);

 fclose(fg);
 fclose(fd);
 fclose(fx);
 fclose(fy);
}

getang(ang)
int *ang;
{ scanf("%d",ang);
  sprintf(fng,"gang%d.out",*ang);
  sprintf(fnd,"dang%d.out",*ang);
  if( ( *ang > 0) && ( *ang < 90) ){
       xdir=forward;
       ydir=forward;
       sprintf(xfile,"%c:xdis1.dat",DR);
       sprintf(yfile,"%c:ydis1.dat",DR);
       xinc=1;
       yinc=1;
   }
   else if( ( *ang > 90) && ( *ang < 180) ){
       xdir=backward;
       ydir=forward;
       sprintf(xfile,"%c:ydis1.dat",DR);
       sprintf(yfile,"%c:xdis2.dat",DR);
       xinc=-1;
       yinc=1;
       *ang-=90;
   }
   else if( ( *ang > 180) && ( *ang < 270) ){
       xdir=backward;
       ydir=backward;
       sprintf(xfile,"%c:xdis2.dat",DR);
       sprintf(yfile,"%c:ydis2.dat",DR);
       xinc=-1;
       yinc=-1;
       *ang-=180;
   }
   else if( ( *ang > 270) && ( *ang < 360) ){
       xdir=forward;
       ydir=backward;
       sprintf(xfile,"%c:ydis2.dat",DR);
       sprintf(yfile,"%c:xdis1.dat",DR);
       xinc=1;
       yinc=-1;
       *ang-=270;
   }
   else {
       printf(" Bad angle\n");
       exit(1);
  }
}
 
/**********************************************************/
/**** MAIN ***** MAIN ***** MAIN ***** MAIN ***** MAIN ****/
/**********************************************************/

main()

{ char filname[13];
  FILE *par;
  int ANG;

 /* first get some parameters */
 par=fopen("param.dat","rb");
 fscanf(par,"%c %d",&DR,&NLINES);
 fclose(par);
 printf("Enter angle: ");
 getang(&ANG);

 IXmax=(255*ANG)/90;
 THETA=(float)ANG*PI/180;
 sinTheta=sin(THETA);
 cosTheta=cos(THETA);
 tgnTheta=sinTheta/cosTheta;

 doviews();
 exit(0);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人精品一区二区三区四区| 亚洲天天做日日做天天谢日日欢| 成人久久久精品乱码一区二区三区| 日韩午夜激情av| 蜜臀va亚洲va欧美va天堂 | 成人sese在线| 国产精品乱码一区二三区小蝌蚪| 国产大陆精品国产| 国产精品久久久久久久久搜平片 | 九一九一国产精品| 久久久久久**毛片大全| 成人av免费观看| 一区二区三区不卡视频| 91精品国产综合久久精品麻豆| 蜜桃一区二区三区在线观看| 久久中文娱乐网| 一本色道久久综合亚洲aⅴ蜜桃 | 91美女在线看| 免费观看成人av| 日韩欧美久久久| 精品无人码麻豆乱码1区2区| 精品国产亚洲在线| 99久久综合99久久综合网站| 亚洲高清三级视频| 亚洲精品一线二线三线| 99久久精品国产精品久久| 亚洲国产成人av| 国产欧美视频在线观看| 欧美最新大片在线看| 久久99精品久久久久| 一区精品在线播放| 日韩午夜电影在线观看| 一本大道久久a久久精品综合| 日韩电影网1区2区| 自拍偷拍国产精品| 精品国产亚洲在线| 在线播放一区二区三区| av爱爱亚洲一区| 久久国产精品72免费观看| 亚洲视频免费在线观看| 欧美日韩亚洲综合在线 | 中文字幕一区二| 欧美日韩精品一区二区在线播放| 国产在线国偷精品产拍免费yy| 亚洲最大成人综合| 国产女人aaa级久久久级| 欧美一区二区在线看| 91啪九色porn原创视频在线观看| 久久精品国产999大香线蕉| 亚洲欧美日韩一区| 久久久精品影视| 在线91免费看| 在线欧美日韩国产| k8久久久一区二区三区| 黑人巨大精品欧美黑白配亚洲| 亚洲午夜激情网页| 中文字幕在线不卡视频| 2020国产精品| 欧美xxxxx裸体时装秀| 欧美日韩免费不卡视频一区二区三区| 丁香另类激情小说| 激情欧美一区二区三区在线观看| 午夜成人在线视频| 亚洲一本大道在线| 一区二区三区欧美日韩| 亚洲色图另类专区| 综合久久综合久久| 国产精品国产自产拍在线| 久久久www成人免费无遮挡大片| 91精品国产色综合久久不卡蜜臀| 在线免费观看不卡av| 在线中文字幕不卡| 欧美最猛黑人xxxxx猛交| 欧美在线综合视频| 在线免费视频一区二区| 欧美性做爰猛烈叫床潮| 欧美午夜宅男影院| 欧美日韩美少妇| 制服丝袜国产精品| 日韩欧美中文字幕制服| 精品日韩一区二区三区免费视频| 精品美女一区二区三区| 2欧美一区二区三区在线观看视频| 日韩欧美一级在线播放| 欧美精品一区二区三区蜜桃 | 国产精品乡下勾搭老头1| 国产米奇在线777精品观看| 国产精品中文有码| 成人久久久精品乱码一区二区三区| 成人a级免费电影| 99视频精品全部免费在线| 91亚洲国产成人精品一区二区三| 色综合天天狠狠| 欧美久久久影院| 精品国产乱码久久久久久老虎| 久久久久久久精| 日韩一区日韩二区| 亚洲成人自拍一区| 美女视频一区在线观看| 国产精品综合视频| kk眼镜猥琐国模调教系列一区二区| 一本大道综合伊人精品热热| 9191久久久久久久久久久| 久久综合中文字幕| 亚洲丝袜精品丝袜在线| 午夜影院久久久| 国产精品自拍一区| 日本丰满少妇一区二区三区| 69久久夜色精品国产69蝌蚪网| 久久婷婷国产综合国色天香| 亚洲色欲色欲www在线观看| 亚洲成人精品在线观看| 国产精品一区二区久久不卡| 色婷婷久久综合| 精品国产a毛片| 亚洲人成7777| 精品一区二区三区免费毛片爱| 波多野结衣在线一区| 制服丝袜亚洲精品中文字幕| 国产免费成人在线视频| 五月激情六月综合| av中文字幕不卡| 欧美va亚洲va香蕉在线| 亚洲精品久久久蜜桃| 精品一区二区免费看| 91社区在线播放| 日韩欧美高清dvd碟片| 亚洲女人的天堂| 国产精品中文字幕日韩精品| 精品视频1区2区| 一区精品在线播放| 国产美女在线观看一区| 欧美日韩精品免费观看视频| 国产日韩影视精品| 美女网站色91| 欧美性色欧美a在线播放| 国产欧美日韩视频在线观看| 日本va欧美va精品发布| 色8久久精品久久久久久蜜| 国产亚洲欧洲997久久综合 | 另类小说视频一区二区| 欧美在线你懂得| 亚洲视频香蕉人妖| 成人动漫视频在线| 日本一区二区三区dvd视频在线| 蜜桃视频免费观看一区| 欧美日韩精品专区| 一区二区三区日韩精品| av午夜一区麻豆| 国产精品每日更新| 国产一区二区免费在线| 欧美一级片在线看| 日本美女视频一区二区| 欧美丝袜丝交足nylons图片| 亚洲品质自拍视频| 91亚洲永久精品| 亚洲视频免费在线观看| 91一区二区三区在线观看| 亚洲欧美在线视频观看| 成人av网站免费| 国产精品久久久久久妇女6080| 国产精品中文欧美| 亚洲国产成人私人影院tom| 国产高清在线观看免费不卡| 久久久久九九视频| 国产成人免费在线观看| 国产午夜亚洲精品理论片色戒 | 亚洲r级在线视频| 欧美三级午夜理伦三级中视频| 亚洲免费av高清| 欧美性猛交xxxxxx富婆| 亚洲一区二区精品久久av| 欧美三区在线观看| 日本成人中文字幕在线视频| 日韩欧美亚洲国产精品字幕久久久| 麻豆精品精品国产自在97香蕉| 精品免费视频一区二区| 国产精品一区二区在线观看不卡 | 欧美成人精品二区三区99精品| 日本vs亚洲vs韩国一区三区二区 | 一区二区三区在线视频播放 | 91成人国产精品| 天天av天天翘天天综合网色鬼国产| 欧美日韩在线三级| 久久国产尿小便嘘嘘尿| 国产欧美精品一区aⅴ影院 | 久久久精品免费免费| 精品一区二区在线看| 中文字幕欧美日韩一区| 色94色欧美sute亚洲线路二 | 99国产精品久久久久久久久久 | 欧美日韩一区二区三区高清| 午夜视频一区在线观看| 91精品国产综合久久香蕉的特点 | 奇米影视7777精品一区二区| 欧美mv日韩mv| 波多野结衣精品在线| 五月天国产精品| 欧美激情艳妇裸体舞| 欧美伊人久久久久久午夜久久久久|