Tải bản đầy đủ (.doc) (20 trang)

Xử lý ảnh - Chương 5

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (685.13 KB, 20 trang )

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:
23


=
+
=

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
24
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
21
212211
),()},({
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

suy ra
1
2
1
1
21
1
1
1
1
),(


+

=
zz
zzU
25
1
y
x
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ã

),(),(
2121
nnhnnh =
Có nghĩa là mỗi một mẫu đều có một giá trị bằng nó tơng ứng. Vì thế, biểu thức (3.11)
có thể viết lại thành:
),h(0,0) +
),(),()[0,( +
)],(),()[,(),(
21
211
1k
2111
2211

1
22112121
1
1 2
nx(n
nknxnknxkh
knknxknknxkkhnny
N
N
Nk
N
k
++
+++=


=
= =
(3.15)
26
Do vậy làm giảm đi số phép nhân cần thiết để thực hiện bộ lọc.
Cho bộ lọc đối xứng vòng tròn chúng ta có
),(),(),(),(
21212121
kkhkkhkkhkkh ===
Và N1 = N2 = N. Biểu thức (3.14) có thể viết lại
),00
)],(),(
),(),(
)],(

),(),(
),()[,(),(
21
2121
2121
2211
22112211
1 1
22112121
1 2
n)x(n,h(
nknxknnx
nknxknnx
knknx
knknxknknx
knknxkkhnny
N
k
N
k
+
+
k)[h(0,+
+
+
N
1=k
++
+
++

+++
=


= =
(3.16)
Các bộ lọc đối xứng vòng tròn biểu diễn tích đối xứng bát giác (xem kết quả của ví dụ
2.5 và 2.6 cho trong chơng 2). Vì vậy
h(k
1
,k
2
) = h(k
2
,k
1
)
Và ở đây biểu thức (3.16) có thể viết lại thành

= =
=
N
k
N
k
knknxkkhnny
1 1
22112121
1 2
),()[,(),(


),(),(
22111221
knknxknknx +++
)],(
),(),(
),(),(
1221
22111221
22111221
knknx
knknxknknx
knknxknknx
+
++++
++++
+
+
+
),()0,0()],(),(
),(),(
)],(),(
),(),()[,(
212121
2121
2121
1
2121
nnxhnknxknnx
nknxknnx

knknxknknx
knknxknknxkkh
N
k
++++
+
+++
+++


=
+
k)[h(0,+
+ +
N
1=k
3.4 Phần mềm thực hiện của các bộ lọc 2-D có đáp ứng xung hữu hạn
Trong phần này chúng tôi sẽ trình bày phơng pháp thực hiện bằng phần mềm bộ lọc 2-
D FIR cho xử lý ảnh số. Chúng ta sẽ coi rằng ảnh đợc lu trên bộ nhớ ngoài nh đĩa cứng hay
vùng đệmảnh. Số dòng tối thiểu cần cho việc xử lý, đợc lu trong bộ nhớ, cho phép lọc các
ảnh lớn mà không cần dự trữ một lợng lớn bộ nhớ của máy tính. Phơng pháp này đợc mô tả
bằng sơ đồ trong hình 3.1
27
Hình 3.1 Lọc 2-D.
Thuật toán gồm các bớc sau:
1. Xoá bộ đệm ảnh, w.
2. Cho n
1
= (0, 1, 2, ..., (chiều dài ảnh -1), h y làm các công việc sau:ã
a. Chuyển hàng thứ n

1
từ bộ đệm ảnh hoặc từ file ảnh lên hàng cuối cùng trong w.
(Chúng ta coi rằng ảnh đợc biểu diễn bằng 8 bit hay 256 mức xám).
b. Cho n
2
= 0, 1, 2, ..., (chiều rộng ảnh-1) làm các công việc sau:
(1) Tính z(n
2
) từ


= =
=
N
Nk
N
Nk
knkNwkkhnz
1 2
),(),()(
221212
(2) Lu z(n
2
) trong bộ đệm tại vùng n
2
.
c. Copy bộ đệm ra file trung gian trên đĩa cứng.
d. Dịch chuyển hàng của w theo hớng nh trong hình 3.1, cụ thể,
cho i = 0, 1, ..., (2N - 1) làm các công việc sau:


1+
=
ii
rowrow
3. Đọc ảnh đ lọc từ file trung gian, chia độ và dịch chuyển để các giá trị nằm trongã
khoảng từ 0 đến 255 (8 bit).
4. Lu ảnh đ đã ợc chia độ lên file hoặc bộ đệm ảnh.
5. Xoá file trung gian.
6. Hiện thị ảnh đ đã ợc lọc.
Chú ý rằng biểu thức đợc dùng trong thuật toán này,

= =
=
N
Nk
N
Nk
knkNwkkhnz
1 2
),(),()(
221212
(3.18)
28
Lưu trữ tại bộ nhớ ngoài
hay bộ đệm ảnh.
Hàng thứ n
1
dịch
n
2

Bộ đệm chuyển đổi ảnh w.
(trong bộ nhớ trong)
kích thước = (2N + 1) ì độ rộng của ảnh.
),(),(
22121
21
2
knkNwkkhz
N
Nk
N
Nk
n
=

==
Buffer.
Kích thước = 1 ì độ rộng ảnh.

(0,2N)
(0,0)
Độ rộng
của ảnh
Chiều
dài
của
ảnh
((độ_rộng_của_ảnh-1),0)
n
1

Bộ
đệm
ảnh
Để lọc ảnh có hơi khác với biểu thức truy hồi (3.11). Điểm khác thứ nhất: N là một hằng
số thay thế cho n
1
,

với n
1
là một biến trong biểu thức (3.11). Biến trong thuật toán này đợc
tính ra bằng cách dịch chuyển hàng trong w. Giải thuật trên dẫn đến cùng một kết quả với
biểu thức

= =
=
N
Nk
N
Nk
knkNnxkkhnny
1 2
),(),(),(
22112121
(3.19)
Tơng tự nh biểu thức (3.11) ngoại trừ một dịch chuyển của N hàng trên ảnh ra,

= =

=

N
Nk
N
Nk
kkN
zzzzXkkhzzY
1 2
21
21
212121
),(),(),(
hay


= =


=
N
Nk
N
Nk
kk
N
zzkkhz
zzX
zzY
1 2
21
21211

21
21
),(
),(
),(
(3.20)
Chính là biến đổi z trong biểu thức (3.11) đợc nhân với một trễ dọc
N
z

1
.
Để tính bộ lọc đối xứng vòng tròn, biểu thức (3.18) có thể viết lại dới dạng biểu thức
(3.17) bằng cách thay n
1
bằng N.

),(
)],(),(
),(),(
)],(),(
),(),(
)],(),(
),(),(
),(),(
),(),([),()(
2
22
22
22

22
122221
122221
122221
1 1
122221212
21
1 2
nNw
nkNwknNw
nkNwknNw
knkNwknkNw
knkNwknkNw
knkNwknkNw
knkNwknkNw
knkNwknkNw
knkNwknkNwkkhnz
kk
N
k
N
k
h(0,0)+
+
k)[h(0,+
+
k)[h(k,+
+
+
+

N
1=k
N
1=k
+++
+
++++
++
+++
+++++
++++
+ì=



>
= =
(3.21)
Chơng trình 3.1 FIR.C. Lọc ảnh dùng kiểu lọc FIR.
/*PROGRAM 3.1 "FIR.C". Program for filtering Images using FIR type
filters.*/

/* This program is for filtering images using the
algorithm described in sec.3.4. The filter type
is FIR. No assumptions are made regarding the filter
coefficients (e.g. circular symmetry). Thus, the
program is general enough to be used with any type
of FIR filter.
29
The FIR filter coefficients can be obtained using the

the Simpson's double integration program described in
chapter II. */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <alloc.h>
#include <conio.h>
#include <io.h>
#include <ctype.h>
#include <string.h>
void main()
{
int i,j,n1,n2,N,NT,N2,image_width, image_length,k1,k2;
int true_width,true_length,ind;
char file_name[14],ch;
unsigned char **w;
unsigned char *temp;
float **h,max,min;
float nsq, zn2, tmp;
FILE *fptr, *fptr1, *fptr_tmp;
clrscr();
printf
("Enter file name containing FIR filter coefficients ->");
scanf("%s",file_name);
if((fptr=fopen(file_name,"r"))==NULL)
{
printf("%s does not exist.",file_name);
exit(1);
}
/* calculating order of filter. */

nsq=0;
while(fscanf(fptr,"%f ", &tmp)!=EOF) nsq++;
rewind(fptr);
NT=sqrt(nsq);
printf("Order of filter %d x %d",NT,NT);
N=(NT-1)>>1;
N2=N<<1;
/* Allocating memory for filter coefficients h[i][j] */
h=(float **)malloc(NT*sizeof(float *));
for(i=0;i<NT;i++)
*(h+i)=(float *)calloc(NT,sizeof(float));
printf("\n FILTER COEFFICIENTS.\n");
for(i=0;i<NT;i++)
{
for(j=0;j<NT;j++)
{
fscanf(fptr,"%f ", &h[i][j]);
printf("%f ",*((*(h+i))+j));
}
printf("\n");
}
fclose(fptr);
30

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×