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

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

?? grad1.c

?? 3DMEDLIB - 三維醫學圖像開發源程序庫及范例
?? C
?? 第 1 頁 / 共 3 頁
字號:
/******************** GRAD ******************************
  grad.c
  Daniel Geist - Mallinckrodt Institue of Radiology 1987.
   This program reads a set of ct scans for one
   patient. It outputs two sets of files containing predefined 
   views of bone surfaces. One set contains distance values and
   the other gradient values.

   Danny Geist & Mike Vannier

   Contact for further information:
	Michael W. Vannier
	Mallinckrodt Institute of Radiology
	Washington University School of Medicine
	510 South Kingshighway Blvd.
	St. Louis, Mo. 63110 USA

   Ake Wallin has made the following changes - 1988

   -Command line input
   -Threshold of gradient for differencing
   -Views to choose: BO (bottom), TO (top), RL (right lateral),
    LL (left lateral), RE (rear), FR (front), NO (none, just leave distance)
   -Clipping planes: RL (right lateral), LL (lateral left), RE (rear),
    FR (front)
   -Scan of data in "correct" order, assuming:
    object:
    low z - feet, high z - head
    low x - right, high x - left
    low y - back, high y - front
    image:
    low x - left, high x - right
    low y - down, high y - up
		    front
    view BO : right      left
		    back
		    front
    view TO : left       right
		    back
		    head
    view RL : back      front
		    feet
		    head
    view LL : front     back
		    feet
		    head
    view RE : left      right
		    feet
		    head
    view FR : right     left
		    feet
*********************************************************/
#include <stdio.h>
#include <math.h>
#include <ctype.h>

/* some global variables*/
int FIRSTSLICE,LASTSLICE,THRESHOLD,NLINES;
float ZOOM;
char DR;
int  buffer[2][6][256];          /* input buffer */
float fxbuf[5][256],fybuf[5][256]; /* X,Y Views floating buffers */

float huge fzbuf[256][256];        /* Z view floating buffer */
char fnamein[50]="ctbild.000";        /* input file name  */
float GRAD_THRESHOLD = 10.0;
unsigned int   views = 0xFFFF;
int   clipx[2], clipy[2];      /* clipping planes */
int   dispmode;                /* distance and/or gradient */
int   image_or[2];            /* image oriention in x and y */
int   object_or[3];           /* image oriention in x, y and z */
int   header_blocks;          /* number of header blocks in CT's */
char *usestr1 = "Usage: grad [file] [-z] [-f] [-l] [-t] [-d] [-n(g|d)] [-g]";
char *usestr2 = "            [-h] [-v(bo|to|rl|ll|re|fr|no)] [-c(rl|ll|re|fr)]";
char *usestr3 = "            [-i(x(r|l)|y(u|d))] [-o(x(r|l)|y(f|b)|z(h|f))]";

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

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

/* Set input file - add slice number to extension */
setfilename(filenum)
int filenum;
{
    int i;

    for (i = strlen(fnamein)-1; i > 0; i--)
      if (fnamein[i] == '.') break;
    if (i == 0) {
      printf("CT file names inconsistend!\n");
      exit(1);
    }
    fnamein[++i]=filenum/100+'0';
    fnamein[++i]=(filenum%100)/10+'0';
    fnamein[++i]='0'+filenum%10;
}

/* interpolate from bottom line to top line n-1 lines  */
interpolate(line,bot,top,n)
int line,bot,top,n;
{
    int next,i,j,x,inc;
    inc=top>bot?1:(-1);    /* interpolate backward or forwards ? */
    next=bot+inc;
    for(i=1,j=n-1;i<n;i++,j--){   /* do for each next line of interpolation */
        for(x=0;x<256;x++) buffer[line][next][x]=
            (buffer[line][bot][x]*j+buffer[line][top][x]*i)/n;
        next+=inc;
    }
}

/* midpoint - fraction part of threshold transition distance */ 
float midpoint(b,a)
float b,a;
{
    return( (THRESHOLD-a) / (b-a) );
}

/* get floating point distance values  */
getdistances(xstart,xstop,xdir,
             ystart,ystop,ydir,
             start_slice,end_slice,zdir,
             xbufxstart, xbufxdir, xbufystart, xbufydir,
             ybufxstart, ybufxdir, ybufystart, ybufydir,
             zbufxstart, zbufxdir, zbufystart, zbufydir,
             pass)
int xstart,xstop,xdir,ystart,ystop,ydir,start_slice,end_slice,zdir,pass;
int  xbufxstart, xbufxdir, xbufystart, xbufydir;
int  ybufxstart, ybufxdir, ybufystart, ybufydir;
int  zbufxstart, zbufxdir, zbufystart, zbufydir;
/* also used are global variables: fxbuf, fybuf, fzbuf, buffer,
   ZOOM, DR, image_or, object_or. */
{
    int z,x,y,i,j,start,stop,inc,line,rzoom,inter;
    float remain;
    FILE *fxfloat,*fyfloat,*fzfloat,*fn[2];
    char filename[13];
    int  filegap;
    int  xbfx, ybfx, zbfx, zbfy;

    NLINES=0;         /* number of output lines in X,Y view directions */
    remain=0;         /* remainder of interpolation after roundoff */
    rzoom=ZOOM+0.5;   /* rounded zoom factor */
    /* X view floating output file */
    sprintf(filename,"%c:xdis%d.dat",DR,pass);
    if ((fxfloat=fopen(filename,"wb")) == NULL) {
      printf("Error creating %s!\n", filename);
      exit(1);
    }
    /* Y view floating output file */
    sprintf(filename,"%c:ydis%d.dat",DR,pass);
    if ((fyfloat=fopen(filename,"wb")) == NULL) {
      printf("Error creating %s!\n", filename);
      exit(1);
    }
    for(i=0;i<256;i++)
        for(j=0;j<256;j++)fzbuf[i][j]=256; /* clear Z view buffer */
    
    for(z=start_slice; z!=end_slice; z += zdir){  /* For each Slice */
      /* open next two slice files */
	  setfilename(z);
      if ((fn[0]=fopen(fnamein,"rb")) == NULL) continue;
	for (filegap = zdir; filegap + z != end_slice+zdir; filegap+=zdir) {
          setfilename(z+filegap);
          if ((fn[1]=fopen(fnamein,"rb")) != NULL) break;
	  }
      if (fn[1] == NULL) continue;

      inter=rzoom; /* interpolation factor assumed rounded zoom */
      /* correct interpolation factor according to floating remainder */
      remain+=rzoom-ZOOM;
      if(remain>=1){
        inter-=1;
        remain-=1;
      }
      else if(remain<=(-1)){
        inter+=1;
        remain+=1;
      }

      line=0;               /* current input buffer line */
      for(j=0;j<inter;j++)  /* clear X,Y floating buffers */
	    for(i=0;i<256;i++) fxbuf[j][i]=fybuf[j][i]=256;
      /* set index for zbuf */
      zbfy = zbufystart;
      /* set index for xbuf */
      xbfx = xbufxstart;
      for(y=ystart; y!=ystop; y+=ydir){              /* For each line */
	/* skip to line*/
	for(i=0;i<2;i++)fseek(fn[i],(long)512*(y+header_blocks),SEEK_SET);
        fread(buffer[line][0],1,512,fn[0]);   
        fread(buffer[line][inter],1,512,fn[1]);
        interpolate(line,0,inter,inter); /* interpolate in_between */
	for(i=0;i<inter;i++){   /* For each interpolation line */
          /* set index for zbuf */
	  zbfx = zbufxstart;
          /* set index for ybuf */
          ybfx = ybufxstart;
	  for(x=xstart; x!=xstop; x+=xdir) { /* For each Voxel value */
            /* find threshold transition*/
	    if (buffer[line][i+1][x] >= THRESHOLD) {
              /* if first transition in X direction get floating
	             distance */
              if(fxbuf[i][xbfx]==256.0) fxbuf[i][xbfx]=(x==xstart)?0:
                                    (x-xstart)*xdir-1+
                     midpoint((float)buffer[line][i+1][x],
                            (float)buffer[line][i+1][x-xdir]);

		      /* if first transition in Y direction get floating
                   distance */
              if(fybuf[i][ybfx]==256.0) fybuf[i][ybfx]=(y==ystart)?0:
                    (y-ystart)*ydir-1+
                     midpoint((float)buffer[line][i+1][x],
                              (float)buffer[1-line][i+1][x]);
 
	          /* if first transition in Z direction get floating
                   distance */
              if(fzbuf[zbfy][zbfx]==256.0) fzbuf[zbfy][zbfx]=
                   (i==0) && (buffer[line][i][x]>=THRESHOLD) ?
                    NLINES : NLINES+i+
                    midpoint((float)buffer[line][i+1][x],
                             (float)buffer[line][i][x]);
            }
            /* change index of ybuf and zbuf */
            ybfx += ybufxdir;
	    zbfx += zbufxdir;
	    if ((ybfx < 0 || ybfx > 255) && x+xdir != xstop) {
              printf("Error in index YBFX!\n");
              exit(1);
            }
	    if ((zbfx < 0 || zbfx > 255) && x+xdir != xstop) {
              printf("Error in index ZBFX!\n");
              exit(1);
            }
          }
        }
        line=1-line;  /* change current input buffer line */
        /* update index of xbuf and zbuf */
        xbfx += xbufxdir;
        zbfy += zbufydir;
	if ((zbfy < 0 || zbfy > 255) && y+ydir != ystop) {
          printf("Error in index ZBFY!\n");
          exit(1);
        }
	if ((xbfx < 0 || xbfx > 255) && y+ydir != ystop) {
          printf("Error in index XBFX!\n");
          exit(1);
        }
      }
      NLINES+=inter;           /* increment number of output lines */

      fclose(fn[0]);           /* close slice files */
      fclose(fn[1]);
      /* write output lines to files */
      if (fwrite(fxbuf,1,sizeof(float)*inter*256,fxfloat) <
		inter*256*sizeof(float))
	printf("Error writing to FXBUF!\n");
      if (fwrite(fybuf,1,sizeof(float)*inter*256,fyfloat) <
		inter*256*sizeof(float))
	printf("Error writing to FYBUF!\n");
      printf(" line %d\r", z);
    }
    printf("\n");
    fclose(fxfloat); /* close X,Y floating files */
    fclose(fyfloat);
    /* write Z floating file */
    sprintf(filename,"%c:zdis%d.dat",DR,pass);
    fzfloat=fopen(filename,"wb");
    for(i=0;i<256;i++)fwrite(fzbuf[i],sizeof(float),256,fzfloat);
    fclose(fzfloat);

    /* should we reverse the order of the lines? */
    if (xbufydir < 0) {
      sprintf(filename,"%c:xdis%d.dat",DR,pass);
      fxfloat=fopen(filename,"rb");
      for (line = 0; line < NLINES; line++)
        fread(fzbuf[line], 1, sizeof(float)*256, fxfloat);
      fclose (fxfloat);
      fxfloat=fopen(filename,"wb");
      for (line = 1; line <= NLINES; line++)
        fwrite(fzbuf[NLINES-line], sizeof(float), 256, fxfloat);
      fclose (fxfloat);
    }
    if (ybufydir < 0) {
      sprintf(filename,"%c:ydis%d.dat",DR,pass);
      fyfloat=fopen(filename,"rb");
      for (line = 0; line < NLINES; line++)
        fread(fzbuf[line], 1, sizeof(float)*256, fyfloat);
      fclose (fyfloat);
      fyfloat=fopen(filename,"wb");
      for (line = 1; line <= NLINES; line++)
        fwrite(fzbuf[NLINES-line], sizeof(float), 256, fyfloat);
      fclose (fyfloat);
    }

}

unsigned char grad(y1,y2,z1,z2,y_factor,z_factor)
float y1,y2,z1,z2;
int y_factor,z_factor;
{
    float gx,gy,gz;
    unsigned char gxint;
    /* get z and y components of gradient */
    gz=(z1-z2)/(float) z_factor;
    gy=(y1-y2)/(float) y_factor;
    /*compute gx - normalized x component of gradient */
    gx=1/sqrt(1+gz*gz+gy*gy);
    gxint=255*gx+0.5;      /*scale gx by 256 and round */
    return(gxint);
}

/* get gradient and depth shades for one image line */
doline(lineg,lined,line,prevline,succline,z_factor,fg,fd)
unsigned char lineg[],lined[];  /*output buffers */
int line,prevline,succline;  /* input buffer configuration */
int z_factor; /* for choosing forward, backward or central differences */
FILE *fg,*fd;  /* output files */
{
    int i;
    float y1, y2, z1, z2;
    int factor;
    /* do first pixel in line */
    i = 0;
    if(fxbuf[line][0]==256)lineg[0]=lined[0]=0;
    else{
        if (dispmode & 1)
          lined[0]=255-fxbuf[line][0]; /*distance shade */
        if (dispmode & 2)
          lineg[0]=grad(fxbuf[line][0],fxbuf[line][1],fxbuf[prevline][0],

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久五月婷婷| 日本道免费精品一区二区三区| 欧美日韩国产精选| 亚洲mv在线观看| 欧美一区二区三区公司| 久久精品国产网站| 中文字幕不卡一区| 91啪亚洲精品| 免费视频最近日韩| 国产色综合一区| 日本精品视频一区二区| 五月天激情小说综合| 久久综合狠狠综合久久综合88| 国产精品18久久久久| 国产精品国产馆在线真实露脸| 色综合久久精品| 日韩激情av在线| 久久久五月婷婷| 日本丶国产丶欧美色综合| 日韩成人免费在线| 国产精品免费看片| 欧美日韩精品一区视频| 久久91精品国产91久久小草| 国产精品久久影院| 欧美一区二区三区思思人| 国产精品123| 亚洲一区av在线| 欧美精品一区二区久久婷婷| 99久久免费视频.com| 五月激情综合婷婷| 国产精品久久久久久久久图文区 | 日韩黄色一级片| 国产三级久久久| 欧美欧美欧美欧美| 国产精品亚洲成人| 午夜一区二区三区视频| 2020国产精品| 欧美日韩国产一级二级| 国产99久久久国产精品免费看| 亚洲黄色小视频| 26uuu精品一区二区在线观看| 色8久久精品久久久久久蜜| 国产一区不卡在线| 亚欧色一区w666天堂| 国产丝袜在线精品| 日韩精品在线看片z| 在线视频亚洲一区| 欧美电视剧在线观看完整版| 成人免费毛片高清视频| 日产国产高清一区二区三区| 亚洲天堂精品在线观看| 久久日一线二线三线suv| 欧美精选一区二区| 一本大道久久a久久综合婷婷| 狠狠色丁香婷婷综合久久片| 首页国产欧美久久| 一区二区三区日韩精品视频| 中文无字幕一区二区三区 | 久久精品国产99国产精品| 一区二区三区四区在线| 国产精品天天摸av网| 久久免费精品国产久精品久久久久| 欧美三级日韩三级国产三级| 91亚洲精品一区二区乱码| 国产成人精品免费一区二区| 韩国毛片一区二区三区| 免费亚洲电影在线| 日本成人在线一区| 午夜精品免费在线观看| 亚洲一区二区三区四区的| 中文字幕一区三区| 国产精品护士白丝一区av| 国产精品视频免费看| 中日韩av电影| 国产精品久久看| 欧美激情一区二区三区| 国产欧美一区在线| 国产精品免费丝袜| 亚洲免费观看高清完整版在线观看 | 五月婷婷久久丁香| 日韩av一二三| 蜜桃久久精品一区二区| 蜜臀av性久久久久av蜜臀妖精| 午夜精品免费在线观看| 亚洲成人www| 日韩av一级片| 欧美日本韩国一区二区三区视频| 欧美日韩美女一区二区| 9191久久久久久久久久久| 欧美一级久久久| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 成人午夜看片网址| hitomi一区二区三区精品| 99精品视频在线播放观看| 一本到一区二区三区| 欧美日韩在线不卡| 日韩一区和二区| 国产亚洲精品中文字幕| 亚洲欧美色综合| 日韩精品久久理论片| 国内成人免费视频| 成人激情图片网| 欧洲生活片亚洲生活在线观看| 欧美年轻男男videosbes| 精品国产精品一区二区夜夜嗨| 国产亚洲女人久久久久毛片| 亚洲人午夜精品天堂一二香蕉| 亚洲高清免费视频| 韩国一区二区在线观看| 91在线观看视频| 91精品国产综合久久久久久| 久久久久国色av免费看影院| 国产麻豆91精品| 在线免费不卡电影| 日韩免费观看高清完整版| **欧美大码日韩| 日本成人在线视频网站| av激情成人网| 欧美一卡2卡3卡4卡| 国产日产欧美一区二区视频| 亚洲欧美经典视频| 老司机免费视频一区二区三区| 色综合色综合色综合色综合色综合 | 成人亚洲一区二区一| 日本福利一区二区| 久久嫩草精品久久久精品| 一区二区免费在线| 国产精品一区二区免费不卡| 日本大香伊一区二区三区| 久久久久久久综合色一本| 亚洲第一精品在线| 成人免费毛片aaaaa**| 91精品麻豆日日躁夜夜躁| 国产精品美女久久久久久久久 | 菠萝蜜视频在线观看一区| 欧美一区二区在线免费观看| 亚洲视频电影在线| 国模一区二区三区白浆| 欧美日韩中文另类| 自拍偷拍亚洲欧美日韩| 久久精品国产亚洲高清剧情介绍 | 91片黄在线观看| 久久久国产午夜精品 | 捆绑调教美女网站视频一区| 日本精品一级二级| 中文字幕亚洲一区二区va在线| 激情综合色综合久久| 欧美日韩成人高清| 亚洲乱码中文字幕| 91免费在线看| 国产精品夫妻自拍| 成人av资源下载| 欧美激情艳妇裸体舞| 国产精品亚洲成人| 精品成人免费观看| 精品中文字幕一区二区小辣椒| 欧美另类videos死尸| 一卡二卡三卡日韩欧美| 91丨porny丨首页| 中文字幕在线一区免费| 成人激情综合网站| 国产精品剧情在线亚洲| 成人动漫一区二区三区| 国产精品三级电影| 成人性视频免费网站| 久久久久9999亚洲精品| 高清成人免费视频| 国产欧美一区二区精品性| 国产一区二区91| 亚洲国产精华液网站w| 国产无一区二区| 国产激情偷乱视频一区二区三区 | 国产精品久久久久影视| 国产夫妻精品视频| 国产日韩精品久久久| 成人丝袜视频网| 国产精品狼人久久影院观看方式| 国产成都精品91一区二区三| 久久久久久久免费视频了| 国产精品一区二区黑丝| 国产欧美va欧美不卡在线| 岛国av在线一区| 国产精品传媒在线| 色天使久久综合网天天| 天天操天天综合网| 精品国产乱码久久久久久夜甘婷婷 | 欧美日韩三级一区二区| 日韩一区精品视频| 欧美电影精品一区二区| 丁香婷婷综合色啪| 亚洲最大的成人av| 日韩视频国产视频| 成人一区二区三区视频在线观看| 亚洲欧美另类久久久精品| 欧美精品tushy高清| 久久er99热精品一区二区| 国产亚洲精久久久久久| 日本韩国一区二区三区| 久久精品99久久久| 自拍偷拍亚洲欧美日韩|