Giáo trình xử lý ảnh y tế Tập 1b P3 ppsx

8 333 1
Giáo trình xử lý ảnh y tế Tập 1b P3 ppsx

Đang tải... (xem toàn văn)

Thông tin tài liệu

16 Hình 2.11 Ví dụ 2.4. Hình 2.12 Ví dụ 2.4. Biểu thức này có thể biểu diễn thành h n R n J Rn( , ) ( ) 1 1 1 1 0 2   ở đây J 1 (x) = hàm Bessel loại 1. Vì thế : 2 2 2 1 2 2 2 11 21 2 )( ),( nn nnRRJ nnh     Không phải lúc nào cũng dễ dàng rút ra được một biểu thức phân tích đáp ứng xung như trên. Ví dụ dưới đây minh hoạ việc sử dụng phép tích phân số để thu được ),( 21 nnh . Ví dụ 2.5 Tính đáp ứng xung của bộ lọc thông thấp Butterworth đối xứng vòng tròn có đáp ứng tần số cho bởi ),( 12 1 1 ),( 21 2 2 21   R D H o    17 ở đây 2 2 2 12121 ),(,,   R và D 0 = 3-dB. (Giả thiết rằng  3.0 o D ). Dùng biểu thức trong công thức 2.17 để tính đáp ứng xung với .5, ,5,5, ,5 21  nn Giải Vì ),( 21  H là thực và đối xứng vòng tròn, công thức (2.17) có thể viết đơn giản lại là          21221121 2 21 )cos(),( 4 1 ),( ddnnHnnh đơn giản hơn nữa ta có thể viết 1 0 0 2222111 2 21 )cos(),()cos( 1 ),(     ddnHnnnh          (2.20) Lời giải của bài toán này sẽ được đưa ra thông qua một chương trình viết bằng ngôn ngữ C. Ngôn ngữ C được sử dụng rộng rãi bởi tính linh hoạt của nó. C phù hợp cho các ứng dụng khác nhau. Trước khi bạn viết chương trình, bạn cần nghiên cứu phương pháp tính tích phân kép. Sau đây ta sẽ phát triển thêm qui tắc Simpson để tính tích phân kép. Qui tắc tính tích phân của Simpson được viết như sau:   m x x dxxfI 0 )(                   2 , 4,2 1 , 3,1 0 )()(2)(4)( 3 m i mi m i i x xfxfxfxf lÎch½n ở đây ;/)( 0 mxx mx  và m là một số lẻ. Với tích phân kép dxdyyxfI nm y y x x ),( 00   Sử dụng qui tắc Simpson ta có thể viết như sau: dyyxfyxfyxfyxfI m i mi m i i y y x n                    2 , 4,2 1 , 3,1 0 ),(),(2),(4),( 3 0 ch½nlÎ 18 vậy có thể viết dy yxf yxf yxf yxf I m y y x n                     ),( ),( ),( ),( ]241 14242[ 3 2 1 0 0  Lại áp dụng qui tắc Simpson vào công thức trên ta có     ]241 14242[ 3 3 y x I                                             1 4 2 2 4 2 4 1 ),( ),(),(),( ),( ),(),(),( ),( ),(),(),( 210 1211101 0201000   nmmmm n n yxfyxfyxfyxf yxfyxfyxfyxf yxfyxfyxfyxf (2.21) ở đây mxx mx /)( 0  nyy my /)( 0  m và n là số lẻ. Nếu ),( 21  H là thực và có tính đối xứng vòng tròn, thì đáp ứng xung có thể được tính từ tích phân kép 21221121 00 2 21 )cos()cos(),( 1 ),(    ddnnHnnh   Dùng công thức trên có thể viết một chương trình C để thu được đáp ứng xung từ đáp ứng tần số. Dưới đây là chương trình được viết bằng Turbo C 2.0. Chương trình 2.1 "FILTERD.C". Tính đáp ứng xung từ đáp ứng tần số /*Program to compute the impulse from the frequency response.*/ 19 /* Chuong trinh nay dung de tinh dap ung xung cua bo loc 2-D tuan hoan doi xung. Dap ung tan so cua bo loc duoc cho boi nguoi dung trong chuong trinh con tinh ham H(float w1, float w2). */ #include <stdio.h> #include <conio.h> #include <float.h> #include <math.h> #include <alloc.h> #define pi 3.1415926 int n1,n2; float f(float,float); float H(float,float); float Simpson2(float(*)(float,float),float,float,float,float,int,int); void main(void) { float f(float,float),xmin,xmax,ymin,ymax; int M,N; int NS,xt,yt; float h[11][11],temp; char file_name[40],ch; FILE *fptr; clrscr(); xmin=ymin=0.0; xmax=ymax=pi; M=N=20; /* So cac diem chia theo phuong x va y. cac gia tri nay phai la chan.*/ gotoxy(1,2); printf (" This program calculates the impulse response from the"); printf("\n frequency response."); printf("\n The impulse response is calculated over a window"); printf("\n centered around the origin."); 20 printf ("\n Enter the number of samples in the impulse response."); printf("\n e.g. 7*7 (max. 11*11) (number have to be odd.) >"); scanf("%d*%d",&NS,&NS); NS=(NS-1)>>1; /* chieu rong va chieu dai cua mot cua so*/ xt=wherex(); yt=wherey(); gotoxy(70,25); textattr(WHITE+(GREEN<<4)+BLINK); cputs("WAIT"); for(n1=0;n1<=NS;n1++) for(n2=0;n2<=NS;n2++) { if(n2>n1) continue; h[n1][n2]=simpson2(f,xmin,xmax,ymin,ymax,M,N); h[n1][n2]/=pi*pi; } for(n1=0;n1<=NS;n1++) for(n2=0;n2<=NS;n2++) { if(n2<n1) h[n2][n1]=h[n1][n2]; } gotoxy(70,25); textattr(WHITE+(BLACK<<4)); cputs(" "); gotoxy(xt,yt); printf("\n Impulse Response one quadrant.\n\n"); for(n1=0;n1<=NS;n1++) { for(n2=0;n2<=NS;n2++) printf("%7.6f ",h[n1][n2]); printf("\n"); } /* Dinh dang dap ung xung tuan hoan. */ temp=h[NS][NS]; for(n1=NS;n1<((NS<<1)+1);n1++) 21 for(n2=NS;n2<((NS<<1)+1);n2++) h[n1][n2]=h[n1-NS][n2-NS]; h[(NS<<1)][(NS<<1)]=temp; for(n1=NS;n1<((NS<<1)+1);n1++) for(n2=0;n2<NS;n2++) h[n1][n2]=h[n1][(NS<<1)-n2]; for(n1=0;n1<NS;n1++) for(n2=0;n2<((NS<<1)+1);n2++) h[n1][n2]=h[(NS<<1)-n1][n2]; printf ("\n\nEnter Name of file for storing impulse response >"); scanf("%s",file_name); fptr=fopen(file_name,"w"); for(n1=0;n1<((NS<<1)+1);n1++) for(n2=0;n2<((NS<<1)+1);n2++) fprintf(fptr,"%f",h[n1][n2]); fclose(fptr); printf("\nCalculating and storing frequency response "); printf("\nfor 3-D plotting.\n"); printf(" "); /* Chuan bi du lieu cho 3-D Du lieu duoc dinh dang thich hop voi chuong trinh in cua GRAFTOOL mot cong cu phan mem phan tich do hoa cua 3-D vision (412 S.Pacific Coast Hwy. Suite 201, Redondo Beach,CA. 90277). */ { /* Declaring local variable*/ float w1[33],w2[33],z[33],dw,sum; int row,col; register i,j; printf("\n Enter file name for storing 3-D plotting >"); scanf("%s",file_name); fptr=fopen(file_name,"w"); row=col=34; fprintf(fptr,"%d %d\n",row,col); 22 fprintf(fptr,"%e",(float)0.0); w1[0]=w2[0]=-pi; dw=pi/16.0; for(i=1;i<33;i++) w1[i]=w2[i]=w1[i-1]+dw; for(i=0;i<33;i++) fprintf(fptr," %e",w2[i]); xt=wherex();yt=wherey(); gotoxy(70,25); textattr(RED+(LIGHTGRAY<<4)+BLINK); cputs("WAIT"); gotoxy(xt,yt); for(i=0;i<33;i++) { fprintf(fptr,"\n"); for(j=0;j<33;j++) { sum=0.0; for(n1=-NS;n1<=NS;n1++) for(n2=-NS;n2<=NS;n2++) sum+=h[n1+NS][n2+NS]*(float)cos((double)(w1[i]*(float)n1+ w2[j]*(float)n2)); z[i]=sum; } fprintf(fptr,"%e",w1[i]); for(j=0;j<33;j++) fprintf(fptr,"%e",z[j]); } fclose(fptr); } xt=wherex();yt=wherey(); gotoxy(70,25); textattr(WHITE+(BLACK<<4)); cputs(" "); gotoxy(xt,yt); printf("\n Press any key to exit."); 23 getch(); } /* Dinh nghia ham cho tich phan */ float f(float x,float y) { float H(float,float),a; a=H(x,y)*(float)cos((double)(x*n1))*cos((double)(y*n2)); return(a); } /*********************************************/ /*Chuong trinh con Simpson tinh tich phan kep*/ /*********************************************/ float simpson2( float(*f)(float,float),float xmin,float xmax, float ymin, float ymax, int M, int N) /* f la mot ham hai bien dinh nghia boi nguoi dung. xmin, xmax, va ymin, ymax la gioi han cua hai tich phan. M,N la so khoang cach tren huong x va y va chi co gia tri chan*/ { register i,j; float sum1,sum2,dx,dy,x,y,I; float *A; A=(float *) malloc(M*sizeof(float)); dx=(xmax-xmin)/(float) M; dy=(ymax-ymin)/(float) N; x=xmin; for (i=0;i<=M;i++) { sum1=sum2=0.0; y=ymin+dy; for(j=1;j<N; j++) { if((j%2)==0) . ),(),(),( ),( ),(),(),( 210 1211101 0201000   nmmmm n n yxfyxfyxfyxf yxfyxfyxfyxf yxfyxfyxfyxf (2.21) ở đ y mxx mx /)( 0  nyy my /)( 0  m và n là số lẻ. Nếu ),( 21  H là thực và. 3,1 0 )()(2)(4)( 3 m i mi m i i x xfxfxfxf lÎch½n ở đ y ;/)( 0 mxx mx  và m là một số lẻ. Với tích phân kép dxdyyxfI nm y y x x ),( 00   Sử dụng qui tắc Simpson ta có thể viết như sau: dyyxfyxfyxfyxfI m i mi m i i y y x n                    2 ,. dyyxfyxfyxfyxfI m i mi m i i y y x n                    2 , 4,2 1 , 3,1 0 ),(),(2),(4),( 3 0 ch½nlÎ 18 v y có thể viết dy yxf yxf yxf yxf I m y y x n                     ),( ),( ),( ),( ]241 14242[ 3 2 1 0 0 

Ngày đăng: 10/07/2014, 22:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan