Đáp ứng tần số được chỉ trong hình... 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ọ
Trang 1fprintf(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.");
Trang 2getch();
}
/* 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)
Trang 3sum1+=(*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
Trang 4a=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
Trang 50.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
) , (
) 1 2 ( 1
1 )
, (
2 1
2 0 2
1
D D
H
2 2 1 2
1 , ) (
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
Trang 62.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 H(1 ,2 )
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
Trang 7Bà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:
0 2
1 , / ( 347 0 2
2 Lọc thông cao:
) , ( / 347 0 2
Với giả định đường tròn 3-dB nằm tại mức 0.3
Trang 8CHƯƠ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
z nT f nT
f
Biến đổi z của một dãy f(nT) thường được ký hiệu là F(z) Vì vậy
( )
)
Xem xét biến đổi z của mẫu xung đơn vị kT, cụ thể
) ) ((
)
Dùng biểu thức (3.1) chúng ta được
k
z T k n
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
z T k n f T
k n f Z
Thay m = n - k trong biểu thức bên tay phải chúng ta được:
k m
k m
z mT f T
k n f
Trang 9k n
m
z z mT f T
k n f
Nếu f(m,T)= với m < 0 thì
z z F T k n f
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
z nT f nT
f
Phổ tần số của tín hiệu được tính từ biến đổi Fourier là
n
nT j
e nT f nT
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 j T
e
Ví dụ 3.1 Tìm biến đổi z và phổ tần số của dãy
u nT( ) (nT) ((n 1 ) )T ((n 2 ) ) T ((nN T) )
Giải Từ biểu thức (3.1) chúng ta có thể viết
z z
z z
U( ) 1 0 1 2
) 1 (
1
1 )
z
z z
U
N
Phổ tần số của u(nT) sẽ là
T j
T N j T
j
e
e e
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
Trang 10
2 1
2 1 2 2 1 1 2
2 1
( {
n n
n n
z z T n T n f T
n T n f Z
(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
2 1
2 1 2 2 1
(n k n k zk zk
1 2
1
2 2
2
Cũng như vậy nếu f(x,y) = 0 với (x 0 ) (y 0 ) thì
2 1
2 1 2 1 2
2 1
(
2 1
1 , z
Biến đổi 2-D Fourier của f(n 1 T 1 ,n 2 T 2 ) được cho bởi
2 2 1
( 2 2 1 1 2
2 1
( (
n n j
e T n T n f T
n T n
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
1
T jw
e
2
T jw
e
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 u1( ,n n1 2) được cho bởi
2 1 2
1
n n
z z n
n u
1
y
x
Trang 11suy ra
1 2
1 1 2
1
1
1 1
1 ) , (
z z
z z U
Phổ tần số của tín hiệu bước nhảy có thể tính từ
2 1
2 1
1
1 1
1 )
,
e e
e e U
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
2 2 1 1 2 1 2
1
) ,
( ) , ( )
, (
N N k
N N k
k n k n x k k h n
n
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 (n1 0 ) (n2 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
2 1
2 1 1
1 2
2
2 1 2 1 2
N
N k N
N k
z z z z X k k h z
z
(3.12) Hàm truyền đạt của bộ lọc 2-D FIR được cho bởi
2 1
2 1 1
1 2
2 2 1 2
1
2 1 2
) , (
) , ( ) ,
N
N k N
N k
z z k k h z
z X
z z Y z z
(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ừ
2 2 1 1
2 1
1
1 2
2 2
1 , ) ( )
,
N
N k N
N k
T j T j
e e k k h e
e
(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
h(n ,n ) h( n , n )