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

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

?? angpp.c

?? 3DMEDLIB - 三維醫學圖像開發源程序庫及范例
?? C
字號:
/********************  angpp.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一区二区三区免费野_久草精品视频
日韩电影网1区2区| 欧美日韩精品一区二区在线播放| 日韩一区二区三区观看| 韩国视频一区二区| 一区二区中文字幕在线| 91.成人天堂一区| 国产成人av网站| 亚洲丰满少妇videoshd| www.日韩精品| 亚洲精品老司机| 精品国产一二三| 欧美亚洲一区二区在线观看| 狠狠色狠狠色合久久伊人| 一区二区激情小说| 亚洲国产成人私人影院tom| 欧美福利电影网| 欧美性videosxxxxx| av电影在线观看一区| 国产麻豆精品95视频| 三级欧美在线一区| 国产精品对白交换视频| 国产性色一区二区| 久久综合狠狠综合久久激情 | 久久久久久久久蜜桃| 在线观看av不卡| 色偷偷成人一区二区三区91| 国产成人免费视频精品含羞草妖精| 日本vs亚洲vs韩国一区三区二区| 亚洲综合一区在线| 亚洲免费电影在线| 亚洲国产一二三| 婷婷开心激情综合| 婷婷六月综合亚洲| 国产成人免费xxxxxxxx| 久久国产精品无码网站| 国产一区高清在线| 成人黄色小视频| 在线欧美一区二区| 日韩精品中文字幕一区| 久久久久国色av免费看影院| 国产午夜精品一区二区三区视频 | 另类小说视频一区二区| 国产真实乱子伦精品视频| 成人污污视频在线观看| 欧美揉bbbbb揉bbbbb| 欧美va在线播放| 国产精品高潮久久久久无| 日韩影院免费视频| 国产精品亚洲视频| 88在线观看91蜜桃国自产| 欧美在线免费播放| 91精品久久久久久久99蜜桃| 中文字幕一区二区日韩精品绯色| 亚洲福利一二三区| www.一区二区| 精品国产制服丝袜高跟| 亚洲一二三四在线观看| 北条麻妃国产九九精品视频| 欧美变态凌虐bdsm| 天堂久久一区二区三区| 欧美午夜理伦三级在线观看| 国产片一区二区| 国模一区二区三区白浆| 欧美一区二区高清| 免费看黄色91| 精品国产第一区二区三区观看体验| 亚洲一区视频在线| 午夜不卡av免费| 成人国产精品免费观看动漫| 久久老女人爱爱| 国产精品亚洲专一区二区三区| 欧美一级二级三级蜜桃| 乱中年女人伦av一区二区| 日韩一区二区视频| 国模冰冰炮一区二区| 国产亚洲欧美日韩在线一区| 粉嫩一区二区三区性色av| 国产精品美女久久久久aⅴ国产馆| 国产在线麻豆精品观看| 中文字幕乱码日本亚洲一区二区| 国产精品主播直播| 亚洲视频一区二区在线| 欧美日韩一区二区三区在线看| 日韩在线观看一区二区| 久久久精品tv| 欧美久久一区二区| 狠狠色丁香九九婷婷综合五月| 日韩欧美在线一区二区三区| 成人av网址在线观看| 午夜久久久久久久久| 久久久综合视频| 88在线观看91蜜桃国自产| 成人精品在线视频观看| 久久国产日韩欧美精品| 亚洲欧美日韩久久精品| 久久久亚洲高清| 欧美精品一二三| 欧美性色黄大片| 97久久精品人人澡人人爽| 麻豆国产欧美一区二区三区| 亚洲综合男人的天堂| 国产欧美一区二区精品性色| 欧美群妇大交群中文字幕| 成人激情电影免费在线观看| 国内精品写真在线观看| 日韩黄色免费网站| 午夜精品国产更新| 一区二区在线观看免费视频播放| 国产精品色在线观看| 国产精品入口麻豆原神| 久久久久久久av麻豆果冻| 久久综合色天天久久综合图片| 欧美美女一区二区| 欧美一区二区三区思思人| 91官网在线观看| 欧美乱妇一区二区三区不卡视频 | 成人精品国产福利| jizz一区二区| 91福利国产成人精品照片| 91美女精品福利| 欧美日韩久久久| 久久综合丝袜日本网| 欧美高清在线视频| 中文字幕一区二区三区在线播放| ㊣最新国产の精品bt伙计久久| 日韩毛片精品高清免费| 一区二区三区国产精华| 丝袜美腿亚洲一区| 懂色一区二区三区免费观看 | 欧美主播一区二区三区| 欧美视频日韩视频在线观看| 精品国产一区二区三区四区四| 欧美国产精品v| 蜜臀av亚洲一区中文字幕| 色狠狠一区二区三区香蕉| 91精品国产欧美一区二区18| 国产精品入口麻豆九色| 免费观看91视频大全| 国产美女在线精品| 亚洲裸体在线观看| 看国产成人h片视频| 成人中文字幕在线| 欧美精品1区2区3区| 国产精品久久久久久久久久免费看| 亚洲激情成人在线| 国产成人亚洲综合a∨婷婷| 欧美三级午夜理伦三级中视频| 偷拍日韩校园综合在线| 99re热这里只有精品免费视频| 欧美zozo另类异族| 日韩专区欧美专区| 色哟哟欧美精品| 中文字幕一区二区三区在线播放 | 午夜精品久久久久久久蜜桃app| 国产91精品一区二区| 欧美大片免费久久精品三p| 毛片基地黄久久久久久天堂| 欧美电影影音先锋| 亚洲乱码国产乱码精品精的特点| 蜜桃视频一区二区三区| 日韩美女主播在线视频一区二区三区| 亚洲主播在线观看| 色偷偷久久人人79超碰人人澡| 国产精品午夜在线观看| 99精品视频一区| 久久se精品一区二区| 久久九九久久九九| 欧美中文字幕亚洲一区二区va在线| 一区二区三区日韩欧美精品| 欧美在线不卡一区| 亚洲成人动漫在线免费观看| 在线中文字幕一区| 日韩精品乱码免费| 日韩毛片视频在线看| 制服丝袜成人动漫| 99久久99久久综合| 视频精品一区二区| 久久蜜桃av一区二区天堂| 在线一区二区观看| 久久av资源网| 亚洲精选视频免费看| 日韩精品在线一区| 91麻豆精品国产91久久久久 | 国产精品亚洲成人| 最近日韩中文字幕| 久久蜜桃av一区精品变态类天堂| 欧美影院一区二区| 在线观看视频一区二区| 久久9热精品视频| 麻豆国产91在线播放| 日韩国产欧美在线视频| 一区二区成人在线观看| 一区二区三区四区在线播放| 2022国产精品视频| 欧美大尺度电影在线| 欧美日韩国产欧美日美国产精品| 99这里只有精品| 97久久人人超碰| av在线不卡网| 成人精品鲁一区一区二区|