Рефераты. Передача информации из ультразвуковой медицинской диагностической установки ALOCA SSD650

#include <scale.h>

#include <groupcel.h>


#include "color.h"

#include "vectlib.h"

#include "winds.h"

#include "win2d.h"

#include "3d.h"

#include "filtr.h"

#include "config.h"

#include "ctmenu.h"

#include "setup.h"

#include "measure.h"

#include "ct.h"

#include "ct_ext.h"

#include "console.h"

#include "language.h"


#define POROG (GRAY_BASE+GRAY_LVLS*4/5)


extern int ExistWindow(WinHandle w);

extern WinHandle MainControl;

extern WinHandle H3d_view;

extern void InvRect(int x0, int y0, int x1, int y1, WinHandle w, char *s);

extern void redraw_window(WinHandle w);

extern void redraw_cw(WinHandle w);

extern void SetupLUT(DWIND *winds);

extern void Screen_Save(void);

extern Rect correct_rect(Rect r);

extern Rect Set_Rect(WinHandle w);

extern Rect Set_Sqr(WinHandle w);

extern void cell_to_pcx(char *pcx_name, GCHandle ch,

int xmax, int ymax, char *pallet);



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


void Do_AddSub_Img(WinHandle w, int fl_sub)

{ GWHandle chl;

HFILE img_fil,tmp_fil;

long *L,*L1;

int *p,*p1,*p2,*p0,*pp,k,i,j,jz,nx,ny,*pq;

char *hc,*c,name[81];

char *s;

unsigned char *uhc,*pc;

Win2d *ud = h_data(w);


if(!ud->img_name || !ud->ch) return;

if(ud->frag) return;

chl = ud->ch;


s = GetFileName(GetCfgItem("image"),H_CREATE); if (*s == 0) return;

img_fil = HOpen(s,H_READ); if (img_fil == 0) return;

HLocate(img_fil,0l,2048); p = HPosit(img_fil);

L = (long*)p; nx = L[2]; ny = L[3]; ud = h_data(w);

if(nx != ud->iw) { HClose(img_fil); return;}

if(ny != ud->ih) { HClose(img_fil); return;}

if (chl == 0) { HClose(img_fil); return;}

ud = h_data(w);

uhc = (char*)&p[256+128];

if(uhc[249] != 2-ud->ps) return;


if(ud->scale2d == 1)

{

pp = h_malloc(nx*4);

pq = h_malloc(nx*4);

for (j = 0; j < ny; j++)

{ ud = h_data(w);

if(ud->ps == 2)

{ HLocate(img_fil,(long)j*nx*2+2048L,nx*2); p = HPosit(img_fil);

}

else

{ HLocate(img_fil,(long)j*nx+2048L,nx); pc = HPosit(img_fil);

for(i = 0; i < nx; i++) pq[i] = (int)pc[i];

p = pq;

}

GetGWL(chl,(short*)pp,nx,j);

for(i = 0; i < nx; i++)

if(fl_sub) pp[i] = (pp[i]-2048 - p[i])/2 + 2048;

pp[i] = (pp[i]-2048 + p[i])/2 + 2048;

PutGWL(chl,(short*)pp,nx,j);

}

h_mfree(pp); h_mfree(pq);

}


else

{ p1 = h_malloc(nx*4); p2 = h_malloc(nx*4);

p0 = h_malloc(nx*4); pp = h_malloc(nx*4);

// Image interpolation

HLocate(img_fil,2048l,nx*2);

p = (int*)HPosit(img_fil);

for (i = 0, k = 0; i < nx-1; i++, k += 2)

{ p1[k] = p[i]; p1[k+1] = (p[i]+p[i+1])/2;

}

p1[k] = p[i];


for (j = 0, jz = 0; j < ny-1; j++, jz += 2)

{ // Write 1 line

GetGWL(chl,(short*)pp,nx*2-1,jz);

for(i = 0; i < nx*2-1; i++)

if(fl_sub) pp[i] = (pp[i]-2048 - p1[i])/2 + 2048;

pp[i] = (pp[i]-2048 + p1[i])/2 + 2048;

PutGWL(chl,(short*)pp,nx*2-1,jz);


//Read 2 line

HLocate(img_fil,(long)(j+1)*nx*2+2048l,nx*2);

p = (int*)HPosit(img_fil);

for (i = 0, k = 0; i < nx-1; i++, k += 2)

{ p2[k] = p[i]; p2[k+1] = (p[i]+p[i+1])/2;

}

p2[k] = p[i];

for (i = 0; i < nx*2-1; i++) p0[i] = (p1[i]+p2[i])/2;

// Write 2 line

GetGWL(chl,(short*)pp,nx*2-1,jz+1);

for(i = 0; i < nx*2-1; i++)

if(fl_sub) pp[i] = (pp[i]-2048 - p1[i])/2 + 2048;

pp[i] = (pp[i]-2048 + p0[i])/2 + 2048;

PutGWL(chl,(short*)pp,nx*2-1,jz+1);


// Line2 to Line1

for (i = 0; i < nx*2-1; i++) p1[i] = p2[i];

}

GetGWL(chl,(short*)pp,nx*2-1,jz);

for(i = 0; i < nx*2-1; i++)

if(fl_sub) pp[i] = (pp[i]-2048 - p1[i])/2 + 2048;

pp[i] = (pp[i]-2048 + p1[i])/2 + 2048;

PutGWL(chl,(short*)pp,nx*2-1,jz);

h_mfree(p1); h_mfree(p2); h_mfree(p0); h_mfree(pp);

}

HClose(img_fil);


ud = h_data(w);

ud->x0 = (ud->iw-ud->w)/2; // Центровка

ud->y0 = (ud->ih-ud->h)/2; // изображения

redraw_cw(w);

}


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


void Do_Inversion(WinHandle w)

{ int i,k; int imin,imax;

Win2d *ud = h_data(w);

WinCon *udc;

DWIND *p = &ud->dw[0];

if(!ud->img_name || !ud->ch) return;


if (p->on) { if(p->neg) p->neg = 0; else p->neg = 1;

if(!ExistWindow(H3d_view))

{ udc = h_data(MainControl);

udc->inv_prn = p->neg;

}

}

SetupLUT(ud->dw);

redraw_cw(w);

}


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

// Image filtration functions


static void inch(int *u,int *v)

{int temp;

temp=*u; *u=*v; *v=temp;

}


static int f9(int *mf)

{

int *max,i,j;


for(i = 0;i < 9; i++)

{max=&mf[i];

for(j = i+1;j < 9; j++) if(*max < mf[j]) max = &mf[j];

if(max != &mf[i]) inch(max,&mf[i]);

}

return(mf[4]);

}


static int f1(int *mf)

{long s;

s=(long)mf[0]+2*(long)mf[1]+(long)mf[2]+2*(long)mf[3]

+4*(long)mf[4]+2*(long)mf[5]+(long)mf[6]+2*(long)mf[7]+(long)mf[8];

return(s/16);

}


static int f2(int *mf)

{long s;

s=(long)mf[0]+(long)mf[1]+(long)mf[2]+(long)mf[3]

+(long)mf[5]+(long)mf[6]+(long)mf[7]+(long)mf[8];

return(s/8);

}


static int f3(int *mf)

{long r1,r2;

r1 = (long)mf[0]+(long)mf[1]+(long)mf[2]-(long)mf[6]-(long)mf[7]-(long)mf[8];

r1 = r1*r1;

r2 = (long)mf[0]+(long)mf[3]+(long)mf[6]-(long)mf[2]-(long)mf[5]-(long)mf[8];

r2 = r2*r2;

return((int)(2.0*sqrt((double)(r1+r2))));

}

static int f4(int *mf)

{return( mf[4]);

}


static int f5(int *mf)

{long s;

s=(-2*(long)mf[0]+(long)mf[1]-2*(long)mf[2]+(long)mf[3]

+6*(long)mf[4]+(long)mf[5]-2*(long)mf[6]+(long)mf[7]-2*(long)mf[8])/2;

return((int)s);

}


static int f6(int *mf)

{int e,s;

s = f1(mf); e = mf[4];

if((2*e - s) > 30) e = 2*e - s;

else e = s;

return(e);

}


static int f7(int *mf)

{long s;

s=-(long)mf[0]-(long)mf[1]-(long)mf[2]+(long)mf[3]

+3*(long)mf[4]-(long)mf[5]+(long)mf[6]+(long)mf[7]-(long)mf[8];

return((int)s);

}


static int f8(int *mf)

{long s;

s=((long)mf[0]+(long)mf[1]+(long)mf[2]+(long)mf[3])/4;

return((int)s);

}

static int f10(int *mf)

{return( mf[4]);

}


static void filt(int *p1,int *p2,int *p3,int *po,int str,int nfilt)

{

int mf[9],i,tr;

str=str-1; tr=str-1;

mf[0]=*(p1+str);mf[1]=*p1;mf[2]=*(p1+1);

mf[3]=*(p2+str);mf[4]=*p2;mf[5]=*(p2+1);

mf[6]=*(p3+str);mf[7]=*p3;mf[8]=*(p3+1);


switch (nfilt)

{ case 1: *po=f1(mf); break;

case 2: *po=f2(mf); break;

case 3: *po=f3(mf); break;

case 4: *po=f4(mf); break;

case 5: *po=f5(mf); break;

case 6: *po=f6(mf); break;

case 7: *po=f7(mf); break;

case 8: *po=f8(mf); break;

case 9: *po=f9(mf); break;

case 10: *po=f10(mf); break;

}


for(i = 0; i < tr; i++)

{mf[0] = *(p1+i); mf[1] = *(p1+i+1); mf[2] = *(p1+i+2);

mf[3] = *(p2+i); mf[4] = *(p2+i+1); mf[5] = *(p2+i+2);

mf[6] = *(p3+i); mf[7] = *(p3+i+1); mf[8] = *(p3+i+2);

switch (nfilt)

{ case 1: *(po+i+1) = f1(mf); break;

case 2: *(po+i+1) = f2(mf); break;

case 3: *(po+i+1) = f3(mf); break;

case 4: *(po+i+1) = f4(mf); break;

case 5: *(po+i+1) = f5(mf); break;

case 6: *(po+i+1) = f6(mf); break;

case 7: *(po+i+1) = f7(mf); break;

case 8: *(po+i+1) = f8(mf); break;

case 9: *(po+i+1) = f9(mf); break;

case 10: *(po+i+1) = f10(mf); break;

}

}

mf[0]=*(p1+tr);mf[1]=*(p1+str);mf[2]=*p1;

mf[3]=*(p2+tr);mf[4]=*(p2+str);mf[5]=*p2;

mf[6]=*(p3+tr);mf[7]=*(p3+str);mf[8]=*p3;

switch (nfilt)

{ case 1: *(po+str)=f1(mf); break;

case 2: *(po+str)=f2(mf); break;

case 3: *(po+str)=f3(mf); break;

case 4: *(po+str)=f4(mf); break;

case 5: *(po+str)=f5(mf); break;

case 6: *(po+str)=f6(mf); break;

case 7: *(po+str)=f7(mf); break;

case 8: *(po+str)=f8(mf); break;

case 9: *(po+str)=f9(mf); break;

case 10: *(po+str)=f10(mf); break;

}

}


void Do_Filters(WinHandle w, int nfilt)

{ GWHandle chl;

int i,k;

int *po,*p1,*p2,*p3,*p4,*p5,*pn,iw,ih;

double d1,d2;

Win2d *ud = h_data(w);

if ((chl = ud->ch) == 0) return;

iw=ud->iw; ih=ud->ih;


if(nfilt == 10)

{

po = (int*)h_malloc(iw*2); pn = (int*)h_malloc(iw*2);

p1 = (int*)h_malloc(iw*2); p2 = (int*)h_malloc(iw*2);

p3 = (int*)h_malloc(iw*2); p4 = (int*)h_malloc(iw*2);

p5 = (int*)h_malloc(iw*2);


i = 2;

GetGWL(chl,(short*)p1,iw,i-2);

for(k = 0; k < iw; k++) p1[k] = p1[k]-2048;

GetGWL(chl,(short*)p2,iw,i-1);

for(k = 0; k < iw; k++) p2[k] = p2[k]-2048;

GetGWL(chl,(short*)p3,iw,i);

for(k = 0; k < iw; k++) p3[k] = p3[k]-2048;

GetGWL(chl,(short*)p4,iw,i+1);

for(k = 0; k < iw; k++) p4[k] = p4[k]-2048;


for( i =2; i < ih-2; i++)

{

GetGWL(chl,(short*)p5,iw,i+2);

for(k = 0; k < iw; k++) p5[k] = p5[k]-2048;

for(k = 2; k < iw-2; k++)

{

d1 = p1[k-2] - p5[k+2]; d1 = d1*d1;

d2 = p5[k-2] - p1[k+2]; d2 = d2*d2;

po[k] = (int)sqrt(d1+d2)+2048;

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.