134 deekTx T tx tj T T k Tkj aa )( 2 )( Thay đổi thứ tự tính tổng và tích phân, k T T kTtj aa de T kTxtx / / )( 2 )()( Tính giá trị của tích phân chúng ta được k aa kTt T kTt T kTxtx )( )(sin )()( (7.12) Biểu thức (7.12) là phép nội suy cho phép khôi phục các tín hiệu liên tục theo thời gian x a (t) từ các mẫu của nó. Trường hợp 2-D: Các định lý lấy mẫu 2-D giả thiết rằng hàm giới hạn băng f a (x,y) có thể khôi phục một cách hoàn toàn từ các mẫu mà thoả mãn T W H H 1 2 T W V V 1 2 (7.13) ở đây W H và W V biểu diễn giải thông theo hezt của tín hiệu 2-D theo chiều dọc và theo chiều ngang. Nếu biểu thức (7.13) được thoả mãn, và f a (k 1 T V ,k 2 T H ) biểu diễn tín hiệu lấy mẫu 2-D, thì f a (x,y) có thể khôi phục từ f a (k 1 T V ,k 2 T H ) dùng biểu thức nội suy: )( )( (7.14) Chứng minh của các biểu thức (7.13) và (7.14) tương tự như trường hợp 1- D và được để lại như một bài tập. Một chú ý là phổ tần số của một tín hiệu lấy mẫu 2-D tuần hoàn trong miền tần số, như trong hình 7.4. Tín hiệu tương tự có thể được khôi phục bằng cách tách ra một chu kỳ từ phổ tín hiệu mẫu. )( )(sin 2 2 H H H H Tky T Tky T 135 7.4 Định lý lấy mẫu áp dụng lên các ảnh Một ảnh được tạo nên bằng cách chiếu một cảnh 3-D lên mặt phẳng 2-D. Phép chiếu này biểu diễn một phép biến đổi từ nhiều vào một. Có nghĩa là một điểm ảnh không tương ứng duy nhất với một điểm trong cảnh 3-D. Điều này được minh hoạ qua hình 7.5. Giả sử rằng ảnh này chứa N điểm ảnh theo hướng x. Sau đó cho các vật thể S 1 và S 2 trong hình 7.5 chúng ta có x N 1 10 mét (7.15) và N x 3 2 mét (7.16) Định lý lấy mẫu đòi hỏi: 1 1 2 1 W x (7.17) Hình 7.4 Phổ tần số của một tín hiệu lấy mẫu 2-D. 1 2 H T H T V T V T H W V W 136 và 2 2 2 1 W x (7.18) ở đây, W 1 là tần số cao nhất theo hướng x cho ảnh được tạo bởi một mình vật thể S 1 , và W 2 là tần số cao nhất theo hướng x cho ảnh được tạo bởi một mình vật thể S 2 . Bởi vì chúng ta chỉ có một ảnh bao gồm S 1 và S 2 nên W 1 = W 2 và N được xác định theo x N W 2 2 3 1 2 (7.19) Vì thế N = 6W 2 (7.20) Hình 7.5 Ánh xạ một cảnh 3-D lên mặt phẳng ảnh 2-D. Thay N trong biểu thức (7.15) chúng ta được 112 1 2 1 6 10 6 10 WWW x Vì thế, giả thiết lấy mẫu không thoả mãn cho vật thể S 1 , và ở đây các thông tin của miền này trên ảnh không thể khôi phục qua phép nội suy. Nói một cách khác, các vật thể gần camera có khả năng tốt hơn khi lấy mẫu, trong khi các vật thể xa camera thì dễ dàng khi khôi phục mẫu. 137 7.5 Nhân đôi độ phân giải trên ảnh Kết quả của định lý lấy mẫu có thể dùng để tăng độ phân giải trên ảnh. Dù sao chăng nữa, dựa vào kết quả đã đạt được chúng ta có thể kết luận rằng nói chung thì không thể tăng độ phân giải của ảnh lên được. 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. 7.5.1 Nhân đôi độ phân giải dùng sự thể hiện tần số của lý thuyết lấy mẫu Chúng ta đã chú ý ở trong chương 6 rằng phổ tần số của một ảnh giảm nhanh cùng với sự tăng của tần số. Chúng ta có thể dùng nhận xét này và định lý lấy mẫu Whittaker-Shannon để tăng độ phân giải. Giải thuật này theo các bước sau: 1. Rút ra FFT của ảnh có kích thước N N, cụ thể I k k FFT i n n n n ( , ) { ( , )( ) } 1 2 1 2 1 1 2 phổ tần số sẽ phải có gốc toạ độ ở trung tâm của mảng FFT. 2. Thêm các điểm 0 vào FFT như giới thiệu trong hình 7.6 để tăng kích thước của nó lên 2N 2N. 3. Rút ra biến đổi ngược FFT của biến đổi tần số mở rộng. Kết quả thu được là ảnh gốc với độ phân giải tăng gấp đôi. Cần chú ý là các vật thể không lấy đủ mẫu trong ảnh gốc thì không cung cấp một sự phát triển trong độ phân giải. Để thực hiện các phương pháp trên chúng ta sẽ bắt đầu với ảnh kích thước 128 128 điểm và 256 mức xám trong hình 7.7a. ảnh đã có sẵn trên đĩa với file có tên là CAMEL.IMG. Thực hiện thuật toán trên được cho trong Chương trình 7.2. Kết quả áp dụng trên ảnh được cho trong hình 7.7b. Rõ ràng là rất khó khăn để nhận ra người cưỡi trên lạc đà, nếu ảnh gốc mặt người đó chưa được lấy đủ mẫu. Chương trình 7.2 ENLQFFT.C nhân đôi độ phân giải của một ảnh qua FFT. /*This program utilizes 2-D FFT to double the size of an image.*/ #define pi 3.141592654 #include <stdio.h> #include <math.h> #include <alloc.h> 138 #include <stdlib.h> #include <io.h> #include <string.h> #include <ctype.h> #include <conio.h> 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,m,i,j,N2,N4,m2,n2,ind; unsigned int *L; float *wr,*wi; FILE *fptri,*fptro,*fptrt; double nsq; float *buffo,*buffi; unsigned char file_name[14],ch,*buffr; float max,min,scale; clrscr(); printf("Enter file name for image to be enlarged -> "); scanf("%s", file_name); fptri=fopen(file_name,"rb"); if(fptri==NULL) { printf("\n File does not exist."); exit(1); } nsq=filelength(fileno(fptri)); N=(int)sqrt(nsq); m=(int)(log10((double)N)/log10((double)2)); fptro=fopen("FFT1.img","wb+"); /* file for storing FFT of image.*/ again : gotoxy(1,2); 139 printf ( " "); gotoxy(1,2); printf("Enter file-name for enlarged image -> "); scanf("%s",file_name); if(((stricmp("FFT1.img",file_name))==0)|| ((stricmp("temp.img",file_name))==0)|| ((stricmp("IFFT2.img",file_name))==0)) { printf("This is a reserved file name. Use some other name."); Hình 7.6 Thêm các số 0 vào FFT thu được ảnh có tần số mở rộng. goto again; } gotoxy(1,2); printf ( " "); ind=access(file_name,0); while(!ind) { gotoxy(1,3); FFT của ảnh N N 2 1 2 2 T T T 0’s 0’s 0’s 0’s 2 N 2 N 140 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,3); printf(" "); gotoxy(1,2); printf (" "); gotoxy(1,2); printf("Enter file name >"); scanf("%s",file_name); ind=access(file_name,0); } } 141 Hình 7.7 "CAMEL.IMG" và ảnh đã được phóng to. N2=N<<1; /* Allocating memory for bit reversal LUT.*/ L=(unsigned int *)malloc(N2*sizeof(unsigned int)); /* Generate Look-up table for bit reversal.*/ bit_reversal(L,m,N); /* Allocating memory for twiddle factors. n2=N- 1 */ wr=(float *)malloc(n2*sizeof(float)); wi=(float *)malloc(n2*sizeof(float)); /*Generating LUT for twiddle factors.*/ WTS(wr,wi,N,-1); 142 /* Taking 2-D FFT. */ FFT2D(fptri,fptro,wr,wi,L,N,m,-1); clrscr() ; printf(" Adding zeros to FFT of image. \n"); /* Adding zeros to double the size of the FFT.*/ N4=N2<<1 ; buffi=(float *)malloc(N2*sizeof(float)); buffo=(float *)malloc(N4*sizeof(float)); fptri=fopen("FFT1.img","rb"); fptrt=fopen("temp.img","wb+"); fptro=fopen("TFFT2.jmg","wb+"); for(i=0; i<N4; i++) buffo[i]=(float)0.0; /* store O's in the first N/2 lines.*/ for(i=0; i<(N>>1); i++) fwrite(buffo,N4,sizeof(float),fptrt); /* Store O's in the first and last N/2 rows.*/ for(i=0; i<N; i++) fread(buffi,N2,sizeof(float),fptri); for(j=0;j<N;j++) buffo[j]=(float)0.0; for(j=0;j<N2;j++) buffo[j+N]=buffi[j]; for(j=(N2+N);j<N4;j++) buffo[j]=(float)0.0; fwrite(buffo,N4,sizeof(float),fptrt); for(i=0; i<N4; i++) buffo[i]=(float)0.0; for(i=0;i<(N>>1);i++) fwrite(buffo,N4,sizeof(float),fptrt); fclose(fptri); rewind(fptrt); /* Taking the inverse FFT.*/ printf("Taking the inverse FFT.\n"); m2=m+1 ; /* Generating bit reversal I(JT.*/ bit_reversal(L,m2,N2); WTS(wr,wi,N2,1); FFT2D(fptrt,fptro,wr,wi,L,N2,m2,1); clrscr() ; 143 printf("Last stage in forming enlarged image."); fptri=fopen("IFFT2.img","rb"); fptro=fopen(file_name,"wb"); buffr=(unsigned char *)malloc(N2*sizeof(char)); max=0; min=1.0e7; for(i=0;i<N2;i++) { fread(buffo,N4,sizeof(float),fptri); for(j=0;j<N2;j++) { scale=buffo[j<<1]; if(scale>max) max=scale; if(scale<min) min=scale; } } scale=(float)255.0/(max-min); rewind(fptri); for(i=0;i<N2;i++) { fread(buffo,N4,sizeof(float),fptri); for(j=0;j<N2;j++) buffr[j]=(unsigned char)((buffo[j<<1]- min)*scale); fwrite(buffr,N2,sizeof(char),fptro); } fcloseall(); remove("FFT1.img"); remove("temp.img"); remove("IFFT2.img"); printf("\nDone."); } 7.5.2 Nhân đôi độ phân giải trên ảnh dùng phép nội suy không gian Trong phương pháp này ảnh đầu tiên được chứa lên một mảng có kích thước 2N 2N với tất cả các hàng và các cột được xoá về không. ảnh được chiếu lần lượt với các phép nội suy. Hình 7.8 liệt kê các phần của các phép nội suy phổ biến nhất. Giải thuật nội suy vuông là thao tác sao chép trong đó những điểm ảnh về cơ bản được sao chép vào những vị trí rỗng. Có thể thu được toán tử nội suy tam giác nhờ sự kết hợp hai toán tử nội suy vuông, vì vậy . )( )(sin 2 2 H H H H Tky T Tky T 135 7.4 Định lý l y mẫu áp dụng lên các ảnh Một ảnh được tạo nên bằng cách chiếu một cảnh 3-D lên mặt phẳng 2-D. Phép chiếu n y biểu diễn một phép. vào một. Có nghĩa là một điểm ảnh không tương ứng duy nhất với một điểm trong cảnh 3-D. Điều n y được minh hoạ qua hình 7.5. Giả sử rằng ảnh n y chứa N điểm ảnh theo hướng x. Sau đó cho các. cho phép dùng các định lý l y mẫu. 7.5.1 Nhân đôi độ phân giải dùng sự thể hiện tần số của lý thuyết l y mẫu Chúng ta đã chú ý ở trong chương 6 rằng phổ tần số của một ảnh giảm nhanh cùng với