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)
24
sum1+=(*f)(x,y);
else
sum2+=(*f)(x,y);
y+=dy;
}
*(A+i)=(*f)(x,ymin)+2.0*sum1+4.0*sum2+(*f)(x,ymax);
x+=dx;
}
sum1=sum2=0.0;
for(i=1;i<M;i++)
{
if((i%2)==0)
sum1+=*(A+i);
else
sum2+=*(A+i);
}
I=*A+2.0*sum1+4.0*sum2+*(A+M);
return(I*dx*dy/9.0);
}
/***************************************
* Dinh nghia ham bo loc H(w1,w2). Ham *
* xac dinh boi nguoi dung *
***************************************/
float H(float w1, float w2)
{
float DO,a,R2;
DO=0.5*pi; // cut-off
R2=w1*w1+w2*w2;
a=0.414*DO*DO/(R2+0.414*DO*DO);
return(a);
}
/***************************************
Vi du ve mot so ham khac
1.Laplacian Operator.
25
a=R2;
2. Phase contrast filters
if(R2<(DO*DO))
a=1.0;
else
a=-1.0;
3. homomorphic filter
float gamah, gamal, k;
gamah=1.0;
gamal=0.5;
if (R2<(DO*DO))
{
k=(1.0)-(gamah-gamal))/(gamah-gamal);
a=(R2/(R2*DO*DO*k))+gamal;
}
else
a=gamah;
4.Low pass filter
a=0.414*DO*DO/(R2+0.414*DO*DO);
5.High pass filter
a=R2/(R2+0.414*DO*DO);
*****************************************/
Trong chương trình 2.1 đáp ứng xung được tính trên cửa sổ kích
thước 11 11 mẫu mà tâm là gốc toạ độ.
Một ảnh ba chiều của đáp ứng tần số tính từ 11 11 đáp ứng xung
được chỉ trong hình 2.13.
Bảng 2.1 Một phần tư đáp ứng xung của bộ lọc thông thấp D
0
=
0.3
0.103591 0.047501 0.017310 0.008810 0.003712
0.002135
0.047501 0.031265 0.014898 0.007494 0.003578
0.001873
0.017310 0.014898 0.009506 0.005306 0.002844
0.001496
26
0.008810 0.007494 0.005306 0.003352 0.001956
0.001102
0.003712 0.003578 0.002844 0.001956 0.001242
0.000743
0.002135 0.001873 0.001496 0.001102 0.000743
0.000473
Hình 2.13 Hình ảnh ba chiều đáp ứng biên độ của bộ lọc thông
thấp.
Ví dụ 2.6 Lặp lại bài toán trước với bộ lọc tuần hoàn đối xứng
Butterworth được cho bởi
),(
)12(
1
1
),(
21
2
0
21
D
D
H
trong đó
2
2
2
121
),(
D
Giải Thay hàm H(w1,w2) trong chương trình 2.1, như đã giải
thích trong phần cuối của chương trình, chúng ta thu được hệ số
được liệt kê trong bảng 2.2. Đáp ứng tần số được chỉ trong hình
27
2.14, và hầu như đúng với đáp ứng tần số gốc được tính từ biểu thức
của )2,1(
H .
Hình 2.14 Đáp ứng tần số được tính từ 11 11 đáp ứng xung.
Bảng 2.2 Một phần tư đáp ứng xung của bộ lọc thông cao
0.896408 -0.047501 -0.017311 -0.008811 -0.003712 -
0.002135
-0.047501 -0.031265 -0.014898 -0.007494 -0.003578 -
0.001873
-0.017311 -0.014898 -0.009506 -0.005306 -0.002844 -
0.001496
-0.008811 -0.007494 -0.005306 -0.003352 -0.001956 -
0.001102
-0.003712 -0.003578 -0.002844 -0.001956 -0.001242 -
0.000743
-0.002135 -0.001873 -0.001496 -0.001102 -0.000743 -
0.000473
28
Bài tập 2.2 Thay hàm H(w1,w2) trong chương trình 2.1 để tính
đáp ứng xung trên cửa sổ 11 11 có tâm tại điểm gốc, theo hàm
truyền đạt được cho dưới đây:
1. Lọc thông thấp:
021
/),(347.0
21
),(
DD
eH
2. Lọc thông cao:
),(/347.0
21
21
),(
DD
eH
Với giả định đường tròn 3-dB nằm tại mức 0.3.
CHƯƠNG
3
CÁC BỘ LỌC HAI CHIỀU CÓ ĐÁP ỨNG XUNG HỮU HẠN
3.1 Chỉ dẫn
Trong chương này chúng ta sẽ chuyển sang việc làm nổi ảnh thông qua các bộ
lọc 2-D. Hệ thống 2-D mà chúng ta sẽ đề cập ở đây là các bộ lọc hai chiều đáp ứng
xung có độ dài hữu hạn, mà được thiết kế với đặc tuyến phù hợp cho việc xử lý
ảnh. Chúng ta cũng sẽ đề cập đến việc thiết kế phần mềm xử lý cho các ảnh được
coi là chứa trên vùng đệm hoặc bộ nhớ ngoài như đĩa cứng. Với thiết kế này các
chương trình chỉ yêu cầu dung lượng của bộ nhớ trong rất nhỏ, làm cho bộ lọc có
khả năng lọc được các ảnh có kích thước rất lớn.
3.2 Biến đổi Z
Phép biến đổi z đóng một vai trò rất quan trọng trong việc phân tích và biểu
diễn các hệ tuyến tính bất biến (linear-shift invariant - TTBB) rời rạc theo cả thời
gian lẫn không gian. Mục đích của phần này là giới thiệu sơ lược phép biến đổi z
để hiểu rõ hơn về các bộ lọc hai chiều.
Biến đổi z của một tín hiệu được lấy mẫu đồng đều f(t), được cho bởi
0
)()(
n
n
znTfnTfZ (3.1)
Biến đổi z của một dãy f(nT) thường được ký hiệu là F(z). Vì vậy
)()( nTfZzF (3.2)
Xem xét biến đổi z của mẫu xung đơn vị kT, cụ thể
))(()( TknnTf
Dùng biểu thức (3.1) chúng ta được
k
zTknZ
)})(({
(3.3)
Bây giờ xem xét biến đổi z của một tín hiệu trễ đi k chu kỳ lấy mẫu của f(nT):
0
))(()})(({
n
n
zTknfTknfZ
Thay m = n - k trong biểu thức bên tay phải chúng ta được:
km
km
zmTfTknfZ
)(
)()})({
k
kn
m
zzmTfTknfZ
])([)})({
)
Nếu ),( Tmf = với m < 0 thì
k
zzFTknfZ
)()})({ (3.4)
Các biểu thức (3.3) và (3.4) coi rằng z
-1
biểu diễn một đơn vị trễ cho các tín
hiệu mà có giá trị 0 nếu thời gian âm hay còn gọi là tín hiệu nhân quả. Biến đổi
cho trong biểu thức (3.1) gọi là phép biến đổi z một phía. Một phép biến đổi z hai
phía được cho bởi:
n
n
znTfnTfZ )()}({
(3.5)
Phổ tần số của tín hiệu được tính từ biến đổi Fourier là
n
nTj
enTfnTf
)()( (3.6)
So sánh biểu thức (3.5) và biểu thức (3.6), chúng ta nhận thấy rằng phổ của một
ảnh có thể rút ra từ biến đổi z bằng cách thay z bằng
Tj
e
.
Ví dụ 3.1 Tìm biến đổi z và phổ tần số của dãy
u nT nT n T n T n N T( ) ( ) (( ) ) (( ) ) (( ) )
1 2
Giải Từ biểu thức (3.1) chúng ta có thể viết
N
zzzzU
0.1)(
21
hoặc
1
)1(
1
1
)(
z
z
zU
N
Phổ tần số của u(nT) sẽ là
Tj
TNj
Tj
e
e
eU
1
1
)(
)1(
Biến đổi z của một tín hiệu rời rạc đều 2-D f(x,y) được cho bởi
u
0 1 2 3 N
-
1 N
1
n
1 2
21
2122112211
),()},({
n n
nn
zzTnTnfTnTnfZ
(3.7)
thường được ký hiệu là F(z
1
, z
2
)
Có thể lập tức nhận ra rằng
21
212211
),(
kk
zzknkn
1
1
211
),(
k
znkn
(3.8)
2
2
221
),(
k
zknn
Cũng như vậy nếu f(x,y) = 0 với
(
)
(
)
x
y
0
0
thì
21
21212211
),()},({
kk
zzzzFknknfZ
(3.9)
ở đây
-1-
2
1
1
,zz biểu diễn đơn vị trễ theo hướng x và hướng y.
Biến đổi 2-D Fourier của f(n
1
T
1
,n
2
T
2
) được cho bởi
1 2
2211
)(
22112211
),()},((
n n
nnj
eTnTnfTnTnf
(3.10)
Có thể nhận thấy rằng phổ tần số của một tín hiệu 2-D được rút ra bằng cách
thay
11
1
Tjw
ez
,
22
2
Tjw
ez
trong biến đổi z của tín hiệu.
Ví dụ 3.2 Tìm biến đổi z và phổ của tín hiệu nhảy bậc đơn vị được xác định
bằng biểu thức (2.4) trong chương 2.
Giải Biến đổi z của u n n
1 1 2
( , )được cho bởi
0 0
21
211
1 2
21
),(
n n
nn
zznnuZ
1
y
x
suy ra
1
2
1
1
21
1
1
1
1
),(
zz
zzU
Phổ tần số của tín hiệu bước nhảy có thể tính từ
2211
2211
1
1
1
1
),(
TiwTiw
TiwTiw
ee
eeU
3.3 Các bộ lọc hai chiều có đáp ứng xung hữu hạn 2-D
Quan hệ giữa đầu vào và đầu ra cho bộ lọc FIR 2-D (FIR - Finite Impulse
Response) được cho bởi
1
1
2
2
22112121
1 2
),(),(),(
N
Nk
N
Nk
knknxkkhnny (3.11)
Trong biểu thức (3.11), h(n
1
,n
2
) là đáp ứng xung của bộ lọc và được định nghĩa
trên một cửa sổ có kích thước (2N1 + 1) (2N2 + 1) có gốc toạ độ ở trung tâm;
x(n
1
,n
2
) là tín hiệu vào của bộ lọc.
Nếu x(n
1
,n
2
) = 0 với ( ) ( )n n
1 2
0 0
, thì bằng cách lấy biến đổi z cả hai phía
của biểu thức (3.11) chúng ta được
21
1 2
21
1
1
2
2
212121
),(),(),(
kk
N
Nk
N
Nk
zzzzXkkhzzY
(3.12)
Hàm truyền đạt của bộ lọc 2-D FIR được cho bởi
21
1 2
21
1
1
2
2
21
21
21
21
),(
),(
),(
),(
kk
N
Nk
N
Nk
zzkkh
zzX
zzY
zzH
(3.13)
Các bộ lọc trên được định nghĩa là có kích thước (2N1 + 1) (2N2 + 1). Trong
hầu hết các ứng dụng chúng ta đặt N1 = N2 = N.
Đáp ứng tần số của bộ lọc 2-D có thể tính từ
222111
1 2
2211
1
1
2
2
21
),(),(
TkjTkj
N
Nk
N
Nk
TjTj
eekkheeH
(3.14)
Đáp ứng xung có thể tính từ đáp ứng tần số sau khi dùng biểu thức (2.17) trong
chương 2.
Các bộ lọc có đáp ứng tần với phần số thực thuần tuý được gọi là các bộ lọc
pha zero. Trong các bộ lọc này, các pha zero được dịch đi một góc , cụ thể là có
các giá trị âm trong phổ tần số. Một bộ lọc pha zero có đáp ứng xung là số thực
thoả mãn
),(),(
2
1
2
1
nnhnnh