亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
国产女人18毛片水真多成人如厕| 精品国产一区二区在线观看| 麻豆精品视频在线观看免费| 国产精品高清亚洲| 欧美一区二区三区爱爱| 国产91高潮流白浆在线麻豆 | 一区二区国产视频| 精品第一国产综合精品aⅴ| 99re热视频精品| 国产九色sp调教91| 午夜精品久久久久久久久| 国产精品美女www爽爽爽| 欧美一级片在线观看| 精品不卡在线视频| 欧美精选一区二区| 91香蕉国产在线观看软件| 国产一区二区三区综合| 亚州成人在线电影| 亚洲美女屁股眼交| 国产精品乱码一区二三区小蝌蚪| 日韩一二三区不卡| 欧美色老头old∨ideo| 成人免费视频网站在线观看| 久久激五月天综合精品| 亚洲图片欧美色图| 亚洲精品欧美在线| 亚洲私人影院在线观看| 国产日韩v精品一区二区| 91精品国产免费| 欧美日韩亚洲综合| 在线视频一区二区三| 91在线视频在线| 成人免费av网站| 国产91对白在线观看九色| 国产一区二区美女诱惑| 久久国产三级精品| 麻豆免费看一区二区三区| 日韩精品久久理论片| 亚洲国产另类av| 午夜伦欧美伦电影理论片| 亚洲风情在线资源站| 亚洲图片欧美色图| 亚洲成a人片在线观看中文| 一区二区三区欧美久久| 亚洲激情校园春色| 亚洲一级二级三级| 午夜精品福利一区二区三区蜜桃| 一区二区在线看| 亚洲综合网站在线观看| 亚洲午夜免费福利视频| 亚洲一区二区欧美激情| 亚洲二区在线观看| 五月天一区二区三区| 日日摸夜夜添夜夜添亚洲女人| 日产国产高清一区二区三区| 日韩精品电影一区亚洲| 奇米影视一区二区三区小说| 久久精品国产第一区二区三区| 国产美女娇喘av呻吟久久| 国产精品一二三四区| 成人黄色综合网站| 欧美综合在线视频| 91精品国产麻豆| 欧美大片拔萝卜| 欧美激情一区不卡| 一区二区三区四区五区视频在线观看| 亚洲综合在线视频| 欧美午夜精品一区二区蜜桃| 欧美在线一二三| 日韩无一区二区| 亚洲国产精品成人久久综合一区| 亚洲欧洲综合另类| 天涯成人国产亚洲精品一区av| 另类综合日韩欧美亚洲| 国产91精品一区二区麻豆网站| 色妞www精品视频| 欧美一区午夜视频在线观看| 久久久久久久久蜜桃| 亚洲欧美电影一区二区| 日韩av电影一区| 懂色av一区二区夜夜嗨| 在线观看www91| 亚洲精品在线网站| 一区二区三区精品视频| 九九九精品视频| 色婷婷国产精品| 欧美成人bangbros| 亚洲乱码国产乱码精品精小说 | 亚洲综合另类小说| 精品一区二区三区不卡 | 极品瑜伽女神91| 91色在线porny| 精品国一区二区三区| 国产精品动漫网站| 蜜臀av一区二区三区| www.色综合.com| 日韩欧美国产麻豆| 亚洲伦在线观看| 黄网站免费久久| 欧美在线观看一区| 国产欧美日韩亚州综合| 视频一区二区三区中文字幕| 成人小视频在线观看| 91精品国产福利在线观看| 亚洲桃色在线一区| 538prom精品视频线放| 一区在线观看免费| 韩国三级中文字幕hd久久精品| 色国产综合视频| 亚洲国产经典视频| 久草中文综合在线| 欧美精品乱码久久久久久| 中文字幕一区二区三| 极品美女销魂一区二区三区| 欧美性大战久久| 亚洲天堂精品在线观看| 国产精品自拍av| 欧美一级片免费看| 亚洲国产毛片aaaaa无费看| av欧美精品.com| 国产日产精品1区| 久久99国产乱子伦精品免费| 欧美午夜视频网站| 亚洲精品免费播放| 99国产精品久久久久| 国产精品久久久久久一区二区三区 | 中文字幕一区二区不卡| 国产综合色精品一区二区三区| 欧美一区欧美二区| 午夜精品福利久久久| 色噜噜狠狠色综合中国| 亚洲欧美一区二区三区久本道91 | 日韩1区2区3区| 欧美精品一级二级| 亚洲1区2区3区4区| 欧美日韩色一区| 亚洲国产精品一区二区www| 日本久久精品电影| 亚洲综合图片区| 欧美日韩激情在线| 亚洲成年人网站在线观看| 欧美日韩国产综合一区二区| 亚洲午夜电影在线观看| 欧美乱妇20p| 午夜在线电影亚洲一区| 制服丝袜日韩国产| 捆绑调教美女网站视频一区| 欧美不卡一区二区三区四区| 麻豆精品一区二区三区| 精品国产91九色蝌蚪| 国产精品一区专区| 欧美韩日一区二区三区四区| 成人网页在线观看| 亚洲人吸女人奶水| 欧美中文字幕亚洲一区二区va在线| 亚洲在线中文字幕| 制服丝袜激情欧洲亚洲| 国产综合久久久久久鬼色| 国产网站一区二区三区| av网站一区二区三区| 洋洋av久久久久久久一区| 7777女厕盗摄久久久| 九色综合狠狠综合久久| 日本一区二区三区高清不卡| av不卡免费电影| 亚洲国产成人高清精品| 精品卡一卡二卡三卡四在线| 激情综合网av| 亚洲欧美在线观看| 欧美日韩亚洲综合| 国产综合色精品一区二区三区| 最新热久久免费视频| 欧美日韩免费观看一区二区三区 | 国产成人精品一区二区三区四区| 中文字幕一区免费在线观看| 欧美日韩一卡二卡三卡| 国产一区二区免费视频| 一区二区三区国产豹纹内裤在线 | 亚洲品质自拍视频| 日韩欧美亚洲国产精品字幕久久久| 国产成人免费在线视频| 夜夜精品视频一区二区| 日韩美女视频在线| 91色九色蝌蚪| 激情综合色播激情啊| 一区二区三区日韩欧美精品 | 一区二区三区色| 久久久久久9999| 在线看日韩精品电影| 韩国v欧美v亚洲v日本v| 夜夜操天天操亚洲| 国产欧美日韩久久| 欧美高清hd18日本| 99久久99久久久精品齐齐| 美女网站色91| 亚洲黄色性网站| 欧美韩日一区二区三区| 日韩午夜电影在线观看| 在线区一区二视频| 成人a区在线观看|