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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? gradpp.c

?? 3DMEDLIB - 三維醫(yī)學(xué)圖像開發(fā)源程序庫(kù)及范例
?? C
字號(hào):
/*********************** gradpp.c ******************************


   This program processess a set of CT scans for one
   patient. It outputs two sets of files containing predefined 
   views of the bone surface. One set contains distance (e.g., depth
   coded surface) values and the other gradient shaded values.


    *********************************************************/

/*************************************************************

	  3-D Reconstruction of Medical Images

	Three Dimensional Reconstruction Of Medical
	Images from Serial Slices - CT, MRI, Ultrasound


   These programs process a set of slices images (scans) for one
   patient. It outputs two sets of files containing nine predefined
   views of bony surfaces. One set contains distance values and
   the other gradient values.

   The distance values are used as 3-D spatial topographic surface
   coordinate maps for geometrical analysis of the scanned object.

   The gradient values are used for rendering the surface maps on
   CRT displays for subjective viewing where perception of small
   surface details is important.

	Daniel Geist, B.S.
	Michael W. Vannier, M.D.

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

	These programs may be copied and used freely for non-commercial
	purposes by developers with inclusion of this notice.


********************************************************************/

#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="ctbild.000";        /* input file name  */

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;
{
    fnamein[7]=filenum/100+'0';
    fnamein[8]=(filenum%100)/10+'0';
    fnamein[9]='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 floting point distance values  */
getdistances(xstart,xstop,xdir,ystart,ystop,ydir,start_slice,zdir,pass)
int xstart,xstop,xdir,ystart,ystop,ydir,start_slice,zdir,pass;
{
    int z,x,y,i,j,start,stop,inc,line,rzoom,inter;
    float remain;
    FILE *fxfloat,*fyfloat,*fzfloat,*fn[2];
    char filename[13];

    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 */

    sprintf(filename,"%c:xdis%d.dat",DR,pass);
    fxfloat=fopen(filename,"wb");    /* X view floating output file */
    sprintf(filename,"%c:ydis%d.dat",DR,pass);
    fyfloat=fopen(filename,"wb");    /* Y view floating output file */

    for(i=0;i<256;i++)
        for(j=0;j<256;j++)fzbuf[i][j]=256; /* clear Z view buffer */

    for(z=0;z<(LASTSLICE-FIRSTSLICE);z++){  /* For each Slice */
        for(i=0;i<2;i++){               /* open next two slice files */
            setfilename(start_slice+(z+i)*zdir);
            fn[i]=fopen(fnamein,"rb");
        } 

	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;

	for(y=ystart;y!=ystop;y+=ydir){              /* For each line */

	    for(i=0;i<2;i++)fseek(fn[i],(long)512*(y+1),SEEK_SET); /* skip to line*/

	    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 interplation line */
                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][y]==256.0) fxbuf[i][y]=(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][x]==256.0) fybuf[i][x]=(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[y][x]==256.0) fzbuf[y][x]=
                            (z==0) && (buffer[line][0][x]>=THRESHOLD)?0:NLINES+i+
                            midpoint((float)buffer[line][i+1][x],
                        (float)buffer[line][i][x]);
                    }
            }
            line=1-line;  /* change current input buffer line */
        }
        NLINES+=inter;           /* increment number of output lines */

        fclose(fn[0]);           /* close slice files */
        fclose(fn[1]);
        fwrite(fxbuf,1,inter*1024,fxfloat); /* write output lines to files */
        fwrite(fybuf,1,inter*1024,fyfloat);
        printf("did %d \n",z);
    }

    fclose(fxfloat); /* close X,Y floating files */
    fclose(fyfloat);

    /* write Z floating files */
    sprintf(filename,"%c:zdis%d.dat",DR,pass);
    fzfloat=fopen(filename,"wb");

    for(i=0;i<256;i++)fwrite(fzbuf[i],1,1024,fzfloat);
    fclose(fzfloat);
}

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)/y_factor;
    gy=(y1-y2)/z_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;

    /* do first pixel in line */
    if(fxbuf[line][0]==256)lineg[0]=lined[0]=0;
    else{
        lined[0]=255-fxbuf[line][0]; /*distance shade */
        lineg[0]=grad(fxbuf[line][0],fxbuf[line][1],fxbuf[prevline][0],
        fxbuf[succline][0],1,z_factor);
    }

    /* do rest of pixels inside line */
    for(i=1;i<255;i++) if(fxbuf[line][i]==256)lineg[i]=lined[i]=0;
    else{
        lined[i]=255-fxbuf[line][i]; /*distance shade */
        lineg[i]=grad(fxbuf[line][i-1],fxbuf[line][i+1],fxbuf[prevline][i],
        fxbuf[succline][i],2,z_factor);
    }

    /* do last pixel in line */
    if(fxbuf[line][255]==256)lineg[255]=lined[255]=0;
    else{
        lined[255]=255-fxbuf[line][255]; /*distance shade */
        lineg[255]=grad(fxbuf[line][255],fxbuf[line][254],fxbuf[prevline][255],
        fxbuf[succline][255],1,z_factor);
    }

    fwrite(lineg,1,256,fg); /* write to output files */
    fwrite(lined,1,256,fd);
}

/* create an gradient and distance shaded view */
doviews(namedis,nameg,named,nlines)

char *namedis,*nameg,*named; /* floating file , gradiet and distance files*/
int nlines;                  /* number of lines in image */

{
    FILE *fg,*fd,*ffloat;
    int z,i,j,k,midline;
    char lined[256],lineg[256]; /* gradient and distance value buffers */

    midline=1;                  /* middle line in input buffer */
    fd=fopen(named,"wb");       /* open output and input files */
    fg=fopen(nameg,"wb");
    ffloat=fopen(namedis,"rb");
    fread(fxbuf,1,3072,ffloat); /* read first three floating lines */

    /* do first line */
    doline(lineg,lined,0,0,1,1,fg,fd);

    /* do rest of lines */
    for(z=0;z<(nlines-2);z++){      /*for each inside line */
        doline(lineg,lined,midline,prev(midline),succ(midline),2,fg,fd);
        fread(fxbuf[prev(midline)],1,1024,ffloat); /*read next floating line */
        midline=succ(midline);
    }

    /* do last line */
    doline(lineg,lined,midline,prev(midline),midline,1,fg,fd);

    fclose(fg);  /* close all files */
    fclose(fd);
    fclose(ffloat);
}

/**********************************************************/
/**** MAIN ***** MAIN ***** MAIN ***** MAIN ***** MAIN ****/
/**********************************************************/
main()

{
    char filename[13];
    FILE *par;

    /* first get some parameters from user */
    printf("Enter Zoom factor: ");
    scanf("%f",&ZOOM);
    printf("Enter starting scan number: ");
    scanf("%d",&FIRSTSLICE);
    printf("Enter ending scan number: ");
    scanf("%d",&LASTSLICE);
    printf("Enter Threshold value: ");
    scanf("%d",&THRESHOLD);
    THRESHOLD+=1024;

    DR=0;
    while(!DR){
        printf("Enter temporary drive: ");
        DR=getchar();
        if(!isalpha(DR)) DR=0;
    } 

    /* get floating distance values (first pass over data)*/
    printf("starting forward pass on data\n");
    getdistances(0,256,1,0,256,1,FIRSTSLICE,1,1);

    /* create images */
    printf("doing bottom (Z) views\n");
    sprintf(filename,"%c:zdis%d.dat",DR,1);
    doviews(filename,"gbo.out","dbo.out",256);
    printf("doing right lateral (X) views\n");
    sprintf(filename,"%c:xdis%d.dat",DR,1);
    doviews(filename,"grl.out","drl.out",NLINES);
    printf("doing rear (Y) views\n");
    sprintf(filename,"%c:ydis%d.dat",DR,1);
    doviews(filename,"gre.out","dre.out",NLINES);

    /* get floating distance values (second pass over data)*/
    printf("starting backward pass on dat\n");
    getdistances(255,-1,-1,255,-1,-1,LASTSLICE,-1,2);

    /* create images */
    printf("doing top (Z) views\n");
    sprintf(filename,"%c:zdis%d.dat",DR,2);
    doviews(filename,"gto.out","dto.out",256);
    printf("doing left lateral (X) views\n");
    sprintf(filename,"%c:xdis%d.dat",DR,2);
    doviews(filename,"gll.out","dll.out",NLINES);
    printf("doing front (Y) views\n");
    sprintf(filename,"%c:ydis%d.dat",DR,2);
    doviews(filename,"gfr.out","dfr.out",NLINES);
    printf("number of lines = %d\n",NLINES);

    /* write temporary drive and number of lines */ 
    par=fopen("param.dat","wb");
    fprintf(par,"%c %d",DR,NLINES);
    fclose(par);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
狠狠狠色丁香婷婷综合久久五月| 99热在这里有精品免费| 成人污污视频在线观看| 久久先锋影音av鲁色资源| 一二三四社区欧美黄| 国产成人自拍网| 日韩午夜中文字幕| 亚洲资源中文字幕| 99久久婷婷国产精品综合| 精品久久一区二区| 日韩av在线发布| 欧美三级午夜理伦三级中视频| 国产精品视频在线看| 久草在线在线精品观看| 欧美日韩免费电影| 亚洲欧美日韩国产成人精品影院 | 一区二区三区在线视频免费观看| 黄色成人免费在线| 67194成人在线观看| 一个色妞综合视频在线观看| av不卡在线播放| 国产精品美女久久久久久久| 久草热8精品视频在线观看| 欧美日韩色一区| 亚洲国产成人高清精品| 欧美在线你懂的| 亚洲免费在线视频| 99视频国产精品| 国产精品免费丝袜| 成人免费毛片app| 亚洲国产精品国自产拍av| 欧美性猛片aaaaaaa做受| 亚洲激情图片qvod| 欧美性一二三区| 一区二区三区.www| 欧美三级电影网| 天天爽夜夜爽夜夜爽精品视频| 欧美视频精品在线观看| 日韩在线卡一卡二| 欧美精品一区二区久久久| 国产在线精品一区二区夜色| 久久久久久99精品| 国产白丝精品91爽爽久久| 国产精品国产自产拍高清av| 99这里只有久久精品视频| 一区二区三区电影在线播| 欧美久久免费观看| 另类中文字幕网| 久久精品夜色噜噜亚洲aⅴ| 国产成人在线视频播放| 亚洲欧美福利一区二区| 色噜噜狠狠色综合欧洲selulu| 一区二区三区欧美日| 欧美一级二级三级蜜桃| 国产三级精品在线| 久久99国产乱子伦精品免费| 欧美videos中文字幕| 国产精品一二一区| 国产精品美女久久久久高潮| 99在线精品一区二区三区| 亚洲欧美另类在线| 91麻豆精品国产自产在线观看一区 | 91色在线porny| 亚洲成人激情社区| 久久久国产综合精品女国产盗摄| gogo大胆日本视频一区| 成人午夜看片网址| 亚洲成人1区2区| 久久影院视频免费| 欧美体内she精高潮| 国产一区在线看| 一区二区三区在线高清| 精品国产一区a| 欧美性色黄大片手机版| 国产美女视频一区| 亚洲国产综合色| 国产亚洲一区字幕| 欧美一级片免费看| 972aa.com艺术欧美| 久久99精品久久久| 亚洲已满18点击进入久久| www欧美成人18+| 欧美精品在线一区二区| 成人avav影音| 国产精品一线二线三线精华| 亚洲aaa精品| 亚洲老司机在线| 国产女主播一区| 日韩免费一区二区三区在线播放| 色哟哟在线观看一区二区三区| 黄色日韩网站视频| 国产精品欧美久久久久无广告 | 亚洲视频狠狠干| 日韩免费电影一区| 欧洲一区在线观看| 成人的网站免费观看| 国产原创一区二区| 蜜桃视频在线观看一区| 午夜电影一区二区三区| 一区二区三区波多野结衣在线观看 | 一区二区三区四区av| 国产精品久久久久久亚洲毛片| xnxx国产精品| 精品免费日韩av| 精品国产免费人成在线观看| 538在线一区二区精品国产| 麻豆专区一区二区三区四区五区| 五月天亚洲精品| 一级日本不卡的影视| 亚洲精品国产无天堂网2021 | 美女视频第一区二区三区免费观看网站| 欧美刺激午夜性久久久久久久| 欧美一区二区在线免费播放| zzijzzij亚洲日本少妇熟睡| 亚洲第四色夜色| 中文字幕一区二区三区视频| 日韩欧美激情四射| 91论坛在线播放| 免费成人你懂的| 婷婷成人激情在线网| 欧美午夜影院一区| 欧美色精品天天在线观看视频| 91亚洲国产成人精品一区二区三| 另类小说图片综合网| 日韩电影一区二区三区| 首页亚洲欧美制服丝腿| 天堂成人国产精品一区| 婷婷六月综合网| 日韩电影在线观看网站| 久久99久久99小草精品免视看| 久久狠狠亚洲综合| 国产一区视频导航| 99久久99久久精品免费看蜜桃| 一本久道久久综合中文字幕| 欧美精品久久久久久久多人混战 | 久久久www成人免费毛片麻豆 | 精品国产不卡一区二区三区| 欧美精品一区二| 国产精品丝袜久久久久久app| 亚洲欧洲国产日韩| 国产精品国产三级国产有无不卡 | 天堂va蜜桃一区二区三区| 婷婷开心激情综合| 国模一区二区三区白浆| 粉嫩在线一区二区三区视频| 欧洲精品视频在线观看| 日韩欧美国产综合| 自拍偷拍欧美激情| 日韩精品久久久久久| 国产在线不卡一区| 在线观看精品一区| 久久综合中文字幕| 亚洲一区二区三区不卡国产欧美 | 国产亚洲一区二区在线观看| 国产精品福利一区| 免费观看久久久4p| 99视频一区二区| 精品国产乱码久久久久久免费| 中文字幕精品在线不卡| 伊人性伊人情综合网| 国产毛片精品视频| 欧美日韩成人综合| 国产精品网站在线| 免费视频最近日韩| 一本一道久久a久久精品 | 成人高清免费在线播放| 欧美一区二区三区播放老司机| 亚洲欧洲av色图| 韩国精品一区二区| 337p亚洲精品色噜噜狠狠| 最新欧美精品一区二区三区| 久久99国产精品成人| 欧美日韩日日夜夜| 亚洲欧美日韩小说| 成人app在线观看| 欧美变态tickling挠脚心| 亚洲综合小说图片| 成人精品视频网站| 久久婷婷色综合| 久久精品国产久精国产| 欧美精品在线一区二区三区| 一区二区三区国产精华| 成人激情av网| 国产欧美一区二区三区在线老狼| 麻豆国产欧美日韩综合精品二区| 欧美精品v日韩精品v韩国精品v| 亚洲欧美国产毛片在线| 91亚洲午夜精品久久久久久| 国产农村妇女毛片精品久久麻豆| 久久99精品久久久久久久久久久久| 欧美精品在线观看播放| 亚洲图片欧美色图| 色婷婷av一区二区三区软件| 亚洲欧美国产毛片在线| 91免费观看在线| 亚洲人成影院在线观看| 91性感美女视频| 亚洲香肠在线观看| 欧美日韩国产综合一区二区 | www.av亚洲|