
158
h[i][j]*=win;
break;
case '3':
win=0.54+0.46*cos((double)(theta*nsqrt));
h[i][j]*=win;
break;
case '4':
win=0.42+0.5*cos((double)(theta*nsqrt))
+0.08*cos((double)(2.0*theta*nsqrt));
h[i][j]*=win;
break;
case '5':
if((i+i)==0);
{
printf("\n\nEnter a value for alpha (O to
8)-->");
scanf("%f",&alpha);
alpha/=2.0;
}
beta=nsqrt/(float)N1;
beta*=beta;
beta=alpha*sqrt(fabs((double)(1.0-beta)));
T=alpha ;
sum1=1.0+T*T;
for(k=2;k<11;k++)
{
T=(1.0/(float)k)*alpha*T;
sum2+=T*T;
}
T=beta;
sum2=1.0+T*T;
for(k=2;k<11;k++)
{
T=(1.0/(float)k)*beta*T;
sum2+=T*T;
}
win=sum2/sum1;
h[i][j]*=win;
break;
}
fprintf(fptri,"%f ",h[i][j]);

159
}
}
printf("\n\nFIR filter's coefficients. ");
for(i=0;i<N;i++)
{
printf ( "\n" ) ;
for(j=0;j<N;j++)
printf(" %f",h[i][i]);
}
fclose(fptri ) ;
fclose(fptro);
remove("FFT.DAT");
remove("IFFT.DAT");
remove("temp.dat");
printf("\nDo you wish to store magnitude spectrum
");
printf(" \n for 3-D plotting? (y or n)-->");
while(((ch=getche())!='y')&&(ch!='n'));
if(ch=='n') exit(1),
printf("\nEnter file for storing magnitude spectrum
--> ");
scanf("%s",file_name);
fptro=fopen(file_name,"w");
Nt=M1+1 ;
fprintf(fptro,"%d %d\n",Nt,Nt);
fprintf(fptro,"%e",(float)0.0),
w=(float *)malloc((M1+1)*sizeof(float));
w[0]=-pi ;
winc=2.0*pi/(float)M1;
for(i=1;i<Nt;i++)
w[i]=w[i-1]+winc;
for(i=0;i<Nt;i++)
fprintf(fptro," %e",w[i]);
gotoxy(70,25);
textattr(WHITE+(GREEN<<4)+BLINK);
cputs("WAIT");
for(m=0;m<Nt;m++)
{
fprintf(fptro,"\n%e",w[m]);
for(n=0;n<Nt;n++)
{
zrt=zit=(float)0.0;

160
for(i=-N1;i<=N1;i++)
for(j=-N1;j<=N1;j++)
{
Hình 8.2 Bộ lọc 5 5 dùng hàm cửa sổ Blackmann.
xrm=(float)cos((double)(i*w[m]));
xim=(float)sin(-(double)(i*w[m]));
xrn=(float)cos((double)(j*w[n]));
xin=(float)sin(-(double)(j*w[n]));
r1=(xrm*xrn-xim*xin);
im=(xrm*xin+xim*xrn);
zrt+=h[i+N1][j+N1]*r1;
zit+=h[i+N1][j+N1]*im;
}
mag=(float)sqrt((double)(zrt*zrt+zit*zit));
fprintf(fptro," %e",mag);
}
}
fclose(fptro);
gotoxy(70,25);
textattr(WHITE+(BLACK<<4));
cputs(" ");
}

161
Bây giờ, chúng ta hãy nghiên cứu thuận lợi thu được nhờ sử dụng cửa sổ.
Chúng ta sẽ thiết kế bộ lọc FIR 5 5 sử dụng cửa sổ Blackmann và đặc tính
tần số đẻ thiết kế bộ lọc cho hình 8.1. Kết quả đạt được ở hình 8.2. Hình 8.3 và
8.4 là kết quả của việc sử dụng hàm cửa sổ Kaiser với = 2 và = 3.
Hình 8.3 Bộ lọc 5 5 dùng hàm cửa sổ Kaiser với = 2.
8.4 Nhân đôi độ phân giải của ảnh
Ảnh cho ở hình 8.5 là kết quả nhân đôi độ phân giải ảnh "CAMEL.IMG"
qua phép nội suy ba chiều dùng bộ lọc thông cao có bậc 5 5 thiết kế theo
kiểu lọc Butterworth với c = 0.6. Hình 8.6 cho kết quả ảnh này cùng áp dụng
các bước tương tự nhưng với c = 0.8. So sánh ảnh thu được với ảnh rút ra từ
các phép xấp xỉ FFT ta nhận thấy các ảnh này sáng hơn. Nguyên nhân có thể
là do ảnh gốc "CAMEL.IMG" chỉ hơi mờ và bộ lọc thông cao giảm thiểu được
mờ. Phương pháp FFT tuân theo định lý lấy mẫu vì vậy theo lý thuyết thì kết
quả cho ra sẽ tốt hơn. Tuy nhiên, phương pháp không gian dễ thực hiện hơn
nhiều, mà lại cho ra kết quả tương tự hoặc thậm chí tốt hơn. Cần chú ý rằng
mờ trên ảnh là một hàm của toán tử nội suy và không phải là ảnh. Do vậy, một
bộ lọc thông cao đã được thiết kế cho kết quả thoả mãn với một hàm nội suy
đặc biệt, nó có thể dùng cho tất cả các ảnh.

162
Hình 8.4 Bộ lọc 5 5 với cửa sổ hàm Kaiser với = 3.
Bài tập 8.1 Phóng đại ảnh "CAMEL.IMG " dùng phép nội suy ba chiều áp
dụng bộ lọc thông cao FIR dùng hàm cửa sổ Blackman và một tần số thông
thấp chuyển tiếp dốc đứng với tần số cát c = 1,4 rad/đơn vị.
Bài tập 8.2 Cho ảnh nằm trên đĩa có tên "MAHER.IMG ". Kích thước của
ảnh là 256 256 điểm ảnh.
1. Nhân đôi ảnh dùng phép nội suy hệ toạ độ ba chiều với bộ lọc thông cao.
Lựa chọn các c khác nhau, các loại hàm cửa sổ khác nhau và so sánh kết
quả .
2. Nhân đôi ảnh dùng phép nội suy của định lý lấy mẫu trong miền tần số
.So sánh kết quả thu được với kết quả tốt nhất của phần 1 bài tập.
Chú ý: Tất cả các chương trình mà bạn sẽ cần đến cho bài tập này được
cung ở trong các chương trước.
Bởi vì phép nội suy cũng chỉ là bộ lọc thông thấp đối xứng vuông nên kết
quả có thể tốt hơn nếu ta có thể dùng bộ lọc thông thấp FIR đối xứng vòng
tròn (LPF) để thay thế. Điểm cắt tần số của bộ lọc này phải đủ cao để cho qua
toàn bộ phổ của ảnh. Phương pháp dùng bộ lọc thông thấp nhân đôi độ phân
giải ảnh tương tự như phép nội suy xấp xỉ. Ảnh này đầu tiên được căng ra
bằng cách lưu vào một mảng có kích thước 2N 2N, ở đây N là chiều rộng
hoặc chiều cao của ảnh. Tất cả các hàng hoặc cột đều chứa các giá trị zero ở
các vị trí còn trống. Sau đó ảnh này được lọc qua một bộ lọc thông thấp, rồi