intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Giáo trình xử lý ảnh y tế Tập 2 P8

Chia sẻ: Cinny Cinny | Ngày: | Loại File: PDF | Số trang:8

56
lượt xem
4
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Trong các ảnh, các vật thể đáng quan tâm thông thường được che hết bề mặt của ảnh. Vì thế, nếu các đối tượng trong nền không được cho độ phân giải dư thừa, các vật thể cận cảnh thông thường có đủ mẫu để cho phép dùng các định lý lấy mẫu.

Chủ đề:
Lưu

Nội dung Text: Giáo trình xử lý ảnh y tế Tập 2 P8

  1. void bit_reversal(unsigned int *, int , int); void WTS(float *, float *, int, int); void FFT(float *xr, float *xi, float *, float *,int,int) ; void transpose(FILE *, int, int); void FFT2D(FILE *, FILE *, float *, float *, unsigned int *, int,int,int); void main() { int N,N1,m,n2,i,j,ii,jj,N2,k,norder,j1,ind,yt; unsigned int *L; float *wr,*wi,Do,theta,nsqrt,beta,alpha,sum1,sum2,T; FILE *fptri,*fptro,*fptr; float *buffi,*buffo,R2,H,nsq,win,slope,gamal,gamah; unsigned char file_name[14], ch,ch1,file_name1[14]; clrscr() ; p rintf("Freq.- response can be calculated using standard\n"); p rintf(" functions available to you if your reply to the\n"); p rintf(" following question is negative.\n"); p rintf("Is freq. response provided in a file? (y or n)-->"); while(((ch1=getche())!='y')&&(ch1!='n')); switch(ch1) { case 'n': case 'N': printf("\nEnter # of points to be generated (e.g. 32x32)-->"); scanf("%d%c%d",&N1,&ch,&N1); break; case 'y' : case 'Y ': printf("\nEnter name of file storing magnitude response-->"); scanf("%s",file_name1); fptr=fopen(file_name1,"r"); fscanf(fptr,"%d %d ",&N1,&N1); } N=N1>>1; yt=wherey(); again : gotoxy(1,yt); printf(" "); gotoxy(1,yt); printf("Enter file name for storing impulse response -->"); scanf("%s",file_name); 169
  2. if(((stricmp("FFT.DAT",file_name))==0)|| ((stricmp("TEMP.DAT",file_name))==0)|| ((stricmp("IFFT.DAT",file_name))==0)) { p rintf("This is a reserved file name. Use some other name."); goto again; } gotoxy(1,yt); printf( " "); ind=access(file_name,0); while(!ind) { gotoxy(1,yt+1); printf ( " "); gotoxy(1,yt+1); printf("File exists. Wish to overwrite? (y or n)-->"); while(((ch=tolower(getch()))!='y')&&(ch!='n')); putch(ch); switch(ch) { case 'y' : ind=1 ; break ; case 'n' : gotoxy(1,yt+1); printf ( " "); printf ( " "); gotoxy(1,yt); gotoxy(1,yt); printf("Enter file name -->"); scanf("%s",file_name); ind=access(file_name,0); } } fptri=fopen("FFT.DAT","wb+"); fptro=fopen("IFFT.DAT","wb+"); buffi=(float *)malloc((N1
  3. scanf("%f",&Do); Do=(Do/pi)*(float)N; printf("Enter choice (1,2,3,4 or 5):\n"); printf(" 1. Low-pass with abrupt transition.\n"); printf(" 2. High-pass with abrupt transition.\n"); printf(" 3. Low-pass Butterworth.\n"); printf(" 4. High-pass Butterworth.\n"); printf(" 5. Homomorphic characteristcs--->"); while(((ch=getche())!='l')&&(ch!='2') &&(ch!=13)&&(ch!='4')&&(ch!='5')); if(ch=='5') { p rintf("\nEnter gain at không freq.-->"); scanf("%f",&gamah); p rintf("Enter gain at high frequencies.-->"); scanf("%f",&gamah); slope=(gamah -gamal)/Do; } Do*=Do; if((ch=='3')||(ch=='4')) { printf("\n Enter order of Butterworth-->"); scanf("%d",&norder); for(i=0;i
  4. case '2': /* high-pass abrupt transition*/ if(R2
  5. /* Generate Look-up table for bit reversal. */ bit_reversal(L,m,N1); /* Allocating memory for twiddle factors. */ n2=N1 -1; wr=(float *)malloc(n2*sizeof(float)); wi=(float *)malloc(n2*sizeof(float)); /* Generating twiddle factor. */ WTS(wr,wi,N1,1); clrscr() ; FFT2D(fptri,fptro,wr,wi,L,N1,m,1); remove("FFT.DAT"); clrscr() ; fptri=fopen("IFFT.DAT","rb"); fptro=fopen(file_name,"wb+"); nsq=(float)(N1*N1); buffo=(float *)malloc(N1*sizeof(float)); for(i=0;i
  6. ii=(i-N2)*(i-N2); fread(buffo,N1,sizeof(float),fptro); for(j=0;j
  7. sum2+=T*T; } win=sum2/sum1; buffo[j]*=win; break; } } fwrite(buffo,N1,sizeof(float),fptro); } } printf ("\nDo you wish to store data for 3-D plotting? (y o r n) -->"); while(((ch=getche())!='y')&&(ch!='n')); switch(ch) { case 'n': fclose(fptro); exit(1); case 'y': rewind(fptro); } printf("\nEnter file name for storing data for 3-D plotting ->"); scanf("%s",file_name); fptri=fopen(file_name,"w"); fprintf(fptri,"%d %d\n",N1,N1); fprintf(fptri,"%e",(float)0.0); for(i=0;i
  8. theo này, chúng ta sẽ nghiên cứu cách sử dụng tốt nhất đáp ứng xung trong thiết kế bộ lọc IIR dùng các phương pháp Shanks. Rõ ràng chúng ta có khả năng được chọn từ: 1 . Dùng bốn góc phần tư của đáp ứng xung với điểm (0,0) nằm ở tại trung tâm của m iền. 2 . Dịch chuyển các trục để (0,0) nằm ở góc cao bên trái. (Hình 9.3a) 3 . Tính đáp ứng xung từ góc phần tư nằm ở bên phải phía dưới. (Hình 9.3a) 4 . Dịch chuyển các trục một đoạn đủ lớn để bao khối lớn nhất của đáp ứng xung. (Hình 9.3b). Đáp ứng xung mong muốn được trích ra từ miền gạch chéo trong hình 9.3b. Lựa chọn đầu tiên yêu cầu chúng ta phải chuyển h àm truyền đạt dưới dạng : M m’ o ffset m’ (0,0) (0,0) o ffset m m M o ffset o ffset n’ n Một phần tư n’ n mặt phẳng . (a) (b) Hình 9.3 (a) Chọn một phần tư hay góc phần tư thứ tư. (b) Chọn miền lớn h ơn bao gồm những giá trị trội trong đáp ứng xung. N N  aij z1 i z2 j  i   N j  N (9.24) H ( z1 , z 2 )  N N  bij z1 i z2 j  i  N j  N Chú ý rằng nếu bạn nhân biểu thức (9.24)với z1Nz2N, chúng ta sẽ chuyển hàm truyền đạt thành một hệ thống nhân quả. Dù thế nào đi chăng nữa tính không nhân quả có nghĩa là điều kiện khởi đầu khác 0 và điều này cũng chỉ ra 176
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2