Tải bản đầy đủ (.pdf) (10 trang)

Giáo trình xử lý ảnh y tế Tập 1a P13 pptx

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 (208.13 KB, 10 trang )


106

ip=1;
kk=(N>>1 );
incr=2;
for(iter=0; iter<m_output; iter++)
{
for(j=0; j<N; j+=incr)
{
i=j+ip;
Tr=xr[i];
Ti=xi[i];
xr[i]=xr[i]-Tr;
xi[i]=xi[i]-Ti;
xr[j]=xr[j]+Tr;
xi[j]=xi[j]+Ti;
}
if(iter!=0)
{
for(k=1;k<ip; k++)
{
l=k*kk-1 ;
for(j=k; j<N; j+=incr)
{
i =j+ip;
Tr=xr[i]*wr[l]-xi[i]*wi[l];
Ti=xr[i]*wi[l]+xi[i]*wr[l];
xr[i]=xr[j]-Tr;
xi[i]=xi[j]-Ti;
xr[j]=xr[j]+Tr;


xi[j]=xi[j]+Ti;
}
}
}
kk>>=1;
ip<<=1;
incr<<=1;
}
for(iter=m_output; iter<m; iter++)
{
for(j=0; j<N; j+=incr)
{

107
i=j+ip;
xr[j]=xr[j]+xr[i];
xi[j]=xi[j]+xi[i];
}
for(k=1; k<N_output; k++)
{
l=k*kk-1 ;
for(j=k; j<N; j+=incr)
{
i=j+ip ;
Tr=xr[i]*wr[l]-xi[i]*wi[l];
Ti=xr[i]*wi[l]+xi[i]*wr[i];
xr[j]=xr[j]+Tr;
xi[j]=xi[j]+Ti;
}
}

kk>>=1;
ip<<=1;
incr<<=1;
}
}

Bài tập 6.4 Cho một bộ lọc thông cao Butterword:

2
2
0
)12(
1
1
)(





H
ở đây 
0
= 0.3, phát triển một chương trình C tính ra 1024 mẫu của đặc tuyến
tần số trên các khoảng bằng nhau của tần số  từ 0 đến . Dùng các mẫu này tính
năm mẫu đầu tiên của đáp ứng xung dùng FFT giảm lược.
6.4 2-D FFT
Một DFT hai chiều của tín hiệu lấy mẫu hai chiều h(k
1
,k

2
) cho bởi

)},({
),(),(
21
1
0
1
0
).(/2
2121
1 2
2211
kkhDFT
ekkhnnH
N
k
N
k
knknNj


 







(6.41)
ở đây n
1
= 0,1,2 , , N-1

108
n
2
= 0,1,2, , N-1
Biểu thức
)(/2
2211
knknNj
e


trong hai dấu tổng gọi là hạt nhân của phép biến đổi.
H(n
1
,n
2
), trong trường hợp tổng quát, đầy đủ có thể biểu diễn theo:

)n,(nj
2
1
2
1
21
e )n,A(n )n,H(n




Trong không gian ba chiều, A(n
1
,n
2
) và

(n
1
,n
2
) nằm tại vị trí của n
1
và n
2

gọi là phổ tần số và phổ pha của H(n
1
,n
2
).
6.4.1 Biến đổi ngược 2-D DFT
Hàm h(k
1
,k
2
) là biến đổi ngược của 2-D DFT (IFFT) của H(n
1

,n
2
) và được cho
bởi biểu thức

 






1
0
1
0
).(/2
21
2
21
1 2
2211
),(
1
),(
N
n
N
n
knknNj

ennH
N
kkh

(6.42)
6.4.2 Một số tính chất của 2-D DFT
Chuyển đổi. Từ định nghĩa của 2-D DFT và IDFT cho thấy
),(),(
21
)(
2
21
21
bnanHekkh
bkak
N
j



(6.43)

)(
2
2121
21
),(),(
bnan
N
j

ennHbkakh



(6.44)

Điều đó có nghĩa là một dịch chuyển pha tuyến tính trong một miền biểu diễn
bằng một dịch chuyển hằng số trong một miền khác. Xem xét biểu thức (6.43),
trường hợp đặc biệt khi a = b = N/2.

212121
)1)(,())(,(),(
2
1
)
2
1
)(
2
1
kkkk
j
kkj
kkhekkhekkh





Hay là

)
2
,
2
()1)(,(
2121
21
N
n
N
nHkkh
kk


(6.45)
Nói cách khác, bằng cách nhân vào mỗi điểm (-1)
21
kk 
trước khi lấy DFT, chúng
ta sẽ rút ra được một phổ tần số mà điểm tần số (0,0) của nó sẽ nằm giữa mảng 2-
D. Biểu thức này rất hữu dụng trong hiển thị phổ tần số, phổ biên độ và lọc dùng
DFT.
Từ biểu thức (6.44) chúng ta rút ra kết luận rằng dịch chuyển một hằng số
trong ảnh sẽ không tác động đến phổ biên độ.
)()(
21
).(/2
21
21
nnHennH

bnanNj



(6.46)

109
Biểu thức (6.46) cũng quan hệ đến bộ lọc 2-D. Xem xét đặc tính của bộ lọc 2-
D cho bởi

).(/2
2
1
2
1
21
),(),(
bnanNj
ennAnnH




ở đây A(n
1
,n
2
) là phổ biên độ. Nếu một ảnh với phổ tần số cho bởi I(n
1
,n

2
) được
lọc qua bộ lọc có đặc tuyến pha tuyến tính cho bởi biểu thức ở trên, kết quả sẽ là

a)-na,-(n
)],(),([),(]),([|
21
).(/2
212121
).(/2
21
2121
f
bnanNjbnanNj
i
ennAnnInnIennA





(6.47)
ở đây i
f
(n
1
-a, n
2
-b) ký hiệu cho ảnh đã được lọc. Một bộ lọc với đặc tuyến pha
tuyến tính có nghĩa là không dịch chuyển biên độ. Trong khi đó nếu bộ lọc có đặc

tuyến pha không tuyến tính thì pha của ảnh cũng bị biến dạng. Lý do của sự biến
dạng này là tất cả các điểm đều phải chịu một sự dịch chuyển vị trí khác nhau tuỳ
theo vị trí của ảnh. Tổng quát, ảnh đã được lọc có thể cho bởi
))n,n f( - n ),n,(n f - (n i
212211f

ở đây f là hàm dịch chuyển vị trí. Chú ý rằng một ảnh biến dạng pha sẽ xuất hiện
trên màn hình như một ảnh mờ .

Tính đối xứng liên hợp và tuần hoàn. Biến đổi2-D DFT và IDFT tuần hoàn
với chu kỳ N có nghĩa là :

N)nN,H(n
N)n,H(n )nN,H(n )n,(n
21
212121

H
(6.48)


N)kN,h(k
N)k,h(k )kN,h(k )k,h(k
21
212121


(6.49)
Biến đổi DFT đối xứng liên hợp khi
)n- ,(-n*H )n,H(n

2
1
2
1
 (6.50)
hoặc
)n- ,H(-n )n,H(n
2
1
2
1
 (6.51)
Quay. Nếu chúng ta đặt k
1
và k
2
dưới dạng


cos r k
2

sinr k
1



110
thì )(r,h)rcos,rsin h( )k,h(k
2

1



Và tương tự cho n
1
, n
2




sinn
cosn
1
2



hoặc )(r,H )n,H(n
2
1



từ định nghĩa của DFT chúng ta có thể có
h r H( , ) ( , )









0 0
(6.52)
Điều đó có nghĩa là nếu ảnh bị quay đi một góc

0
thì phổ của nó cũng bị quay
đi một góc như vậy.

Phân phối và chia độ. Từ biểu thức (6.1) chúng ta dễ thấy
)n,(nbH)n,(naH )k,(kh b )k,(kh a
2
1
2
2
1
1
2
1
2
2
1
1
 (6.53)
ở đây a,b là những độ chia. Cũng như vậy
),(

1
),(
21
21
b
n
a
n
H
ab
bkakh  (6.54)
6.4.3 Giá trị trung bình
Mức cường độ sáng trung bình trong một ảnh cho bởi :

h
N
h k k
k
N
k
N






1
2 1 2
0

1
0
1
11
( , )
(6.55)
hoặc từ biểu thức (6.1) ta có thể viết
h H ( , )0 0
Điều này có nghĩa là H(0,0) biểu diễn mức sáng của ảnh.
6.4.4 Tích chập và sự tương quan
Tích chập của tín hiệu 2-D h
1
(k
1
,k
2
) và h
2
(k
1
,k
2
) cho bởi

g n n h k k h n k n k
k
N
k
N
( , ) ( , ) ( , )

1 2 1 1 2 2 1 1 2 2
0
1
0
1
21
  





(6.56)
Nếu h
1
(k
1
,k
2
) được xác định trên miền














k A k B
1 1
0 1 0 1    , ,
và nếu h
2
(k
1
,k
2
) được xác định trên miền

111













k C k D
1 1

0 1 0 1    , ,
thì chúng ta có thể thấy rằng nếu hai tín hiệu có giá trị zero ngoài miền xác định
của chúng thì M = A + C - 1 và N = B + D - 1.
Tích chập của hai tín hiệu 2-D được viết trong dạng ký hiệu như sau:
)k,(kh* )k,(kh
2
1
2
2
1
1

Có thể thấy rằng
)n,(n)Hn,(nH )k,(kh* )k,(kh
2
1
2
2
1
1
2
1
2
2
1
1
 (6.57)
Điều này có nghĩa là, tích chập trong miền không gian biến thành phép nhân
bình thường trong miền tần số. Tính chất này có thể dùng cho lọc 2-D qua DFT.
Chúng ta cần nhớ lại rằng bạn đã dùng kỹ thuật lọc FIR trong các chương trước

cho chức năng này. Khi áp dụng các lọc bộ lọc FIR cho chức năng lọc bạn cần lấy
tín hiệu khoảng cách 2-D đã được biến thành tín hiệu có chu kỳ trước khi tiến
hành lấy DFT. Sự không đồng bộ của chu kỳ trong biến đổi này cũng gây ra lỗi
như trong biến đổi 1-D. Vì vậy, để tránh trường hợp này ta cần thêm các số 0 vào
cả hai các hàm không gian để cho chúng có kích thước M

N với M

A + C - 1
và N

B + D - 1.
Tương quan hoặc tương quan chéo của tín hiệu 2-D định nghĩa bởi

g n n h k k h n k n k
k
N
k
N
( , ) ( , ) ( , )
1 2 1 1 2 2 1 1 2 2
0
1
0
1
21
  







(6.58)

Biểu thức này được viết dưới dạng ký hiệu
g n n h k k h k k( , ) ( , ) ( , )
1 2 1 1 2 2 1 2

 (6.59)
Tương quan chéo thường được gọi là lọc kết hợp và dùng để phát hiện ra phần
đầu dấu hiệu các vết sắc nổi trên ảnh. Nó có thể cho thấy rằng
h k k h k k H n n H n n
1 1 2 2 1 2 1 1 2 2 1 2
( , ) ( , ) ( , ). ( , )

(6.60)
6.5 2-D FFT
Biểu thức cho 2-D DFT có thể dưới dạng

11
1 2
22
./2.
1
0
1
0
./2.
2121

]),([),(
knNj
N
k
N
k
knNj
eekkhnnH







 
 (6.61)
Đặt
2121
2
./2.
1
0
2121
),(),(
knNj
N
k
ekkhkkG






 (6.62)

112
với k
1
= 0,1,2, , N-1. Vì vậy mà biểu thức (6.61) có thể viết lại dưới dạng .


H n n G k n e
k
N
j N n k
( , ) ( , )
. / .
1 2 1 2
0
1
2
1
1 1







(6.63)
với n
1
=0,1,2, ,N-1.
Biểu thức (6.62) có thể mở rộng ra thành

22
2
./2.
1
0
22
),0(),0(
knNj
N
k
ekhnG







22
2
./2.
1
0
22

),1(),1(
knNj
N
k
ekhnG






.
.
.

v.v

Mỗi biểu thức trên biểu diễn DFT của một hàng trong ảnh.
Biểu thức (6.63) cũng có thể mở rộng ra thành:

22
1
./2.
1
0
11
)0,()0,(
knNj
N
k

ekGnH







22
1
./2.
1
0
11
)1,()1,(
knNj
N
k
ekGnH






.
.
.
v.v
Các biểu thức này dẫn ta đến giải thuật sau đây tính FFT hai chiều:


1. Tính 1-D FFT cho tất cả các hàng, và chứa kết quả vào mảng trung gian.

2. Dịch chuyển mảng trung gian.


113
3. Rút ra 1-D FFT cho tất cả các hàng của mảng dịch chuyển trung gian. Kết
quả là dịch chuyển của mảng 2-D FFT.

Chúng ta có thể viết biểu thức (6.61) có dạng

212
2 1
121
./2.
1
0
1
0
./2.
2121
]),([),(
knNj
N
k
N
k
knNj
eekkhnnH








 
 (6.64)

Nếu chúng ta đặt

11
1
./2.
1
0
2121
),(),(
knNj
N
k
ekkhknG





 (6.65)
với k

2
= 0,1,2, , (N-1) thì


1
22
1
./2.
1
0
1121
),(),(
knNj
N
k
eknGnnH





 (6.66)
với n
1
= 0,1,2, , (N-1).

Các biểu thức này dẫn chúng ta đến thuật toán tính 2-D FFT sau

1. Dịch chuyển file ảnh.


2. Tính FFT theo từng hàng một của ảnh đã được đọc.

3.Dịch chuyển kết quả trung gian.

4. Rút ra một hàng kề hàng FFT của dịch chuyển kết quả trung gian. Kết quả
ta sẽ được 2-D FFT.

Trong cả hai phương pháp dùng để rút ra 2-D FFT, kết quả trung gian đều đã
phải dịch chuyển. Phương pháp đầu tiên thường hay được sử dụng hơn vì nó chỉ
yêu cầu một phép toán dịch chuyển. Kết quả là một dịch chuyển của mảng 2-D
FFT, có thể dùng trực tiếp dưới dạng ấy mà không đòi hỏi một phép dịch chuyển
thứ hai.
Chắc bạn sẽ có một câu hỏi rằng tại sao chúng ta cần phải dịch chuyển. Lý do
của sự dịch chuyển này là hệ thống của bạn có thể không có đủ bộ nhớ kích hoạt
(RAM) để lưu trữ kết quả trung gian hoặc là FFT của ảnh. Nếu bạn có đủ bộ nhớ
RAM thì việc dịch chuyển này là không cần thiết, và bạn có thể đọc thẳng từng

114
cột từ bộ nhớ kích hoạt. Dù sao đi chăng nữa thì sự lựa chọn vẫn là đọc thẳng
từng cột và có kết quả trung gian chứa theo hàng. Nếu là như vậy, chúng ta sẽ cần
N  N dữ liệu thêm vào từ đĩa cứng, yêu cầu thời gian nhiều hơn. Nói một cách
khác, dịch chuyển file dẫn đến từng hàng một trong FFT của kết quả trung gian,
đòi hỏi nhiều hơn N lần truy nhập đĩa.
Câu hỏi bây giờ là làm thế nào chúng ta có thể dịch chuyển một file trong
trường hợp không thể chuyển tất cả dữ liệu một lần vào bộ nhớ kích hoạt. Trong
phần tiếp theo chúng ta sẽ đề cập đến phương pháp Eklundh để giải quyết vấn đề
này.
6.5.1 Ma trận dịch chuyển từ bộ nhớ ngoài
Thuật toán được giải thích rõ ràng nhất bằng một ví dụ đặc biệt. Xem xét ma
trận có kích thước 7  7 ở hình 6.10. Các bước của thuật toán thể hiện rõ ràng trên

hình 6.10. Bạn cần chú ý rằng chương trình đòi hỏi ba lần lặp lại để dịch chuyển
một ma trận có kích thước 2
3
 2
3
. Trong tất cả các lần lặp lại bạn cần phải giữ
lại trong bộ nhớ kích hoạt tại hai hàng cuối cùng, cho phép lặp, tất cả là yêu cầu
yêu cầu N lần truy nhập đĩa cho xử lý một ảnh có kích thước N

N. Nếu N = 2
r
thì r

N số lần truy nhập đĩa để dịch chuyển một ảnh, ít hơn nhiều so với N

N
lần truy nhập trong cách xử lý đọc một ảnh cơ bản từng khối một. Số lần truy
nhập đĩa có thể giảm xuống bởi đọc, ví dụ, bốn hàng hoặc tám hàng một lúc.
Thuật toán trong trường hợp tổng quát có thể coi như là sự phát triển của giải
thuật FFT. Bạn cần phát triển hai lưu đồ, một để lựa chọn hàng có thể đã được
thêm dữ liệu vào và một để phát hiện ra phần tử đã thay đổi. Những thuật toán
này coi như là một bài tập. Mã của chương trình nguồn cho tất cả các thuật toán
này cho ở chương trình 6.5.

Chương trình 6.5 “TRANSPOS.C” chương trình cho dịch chuyển một ma
trận.

/******************************
* Program developed by: *
* M.A.Sid-Ahmed. *

* ver. 1.0 1992. *
* @ 1994 *
******************************/

/*This program is for obtaining the transpose of a
large binary file
stored on secondary memory. We assume that the file
is large to the

115
point that it would not fit in active memory, and the
data type in the
file is character.*/

#include <stdio.h>
#include <alloc.h>
#include <math.h>
#include <io.h>
#include <conio.h>
#include <stdlib.h>
void transpose(FILE *, int, int);

void main()
{
int N,n;
char file_name[11];
FILE *fptr;
float nsq;

clrscr();

printf("Enter file-name to be transposed >");
scanf("%s",file_name);
fptr=fopen(file_name,"rb+");
if(fptr==NULL)
{
printf("%s does not exist. ");
exit(1);
}
nsq=filelength(fileno(fptr));
N=sqrt((double)nsq);
n=(int)(log10((double)(N))/log10((double)(2.0)));
clrscr();
transpose(fptr,N,n);
fclose(fptr);
}

void transpose(FILE *fptr, int N, int n)

/* Algorithm */
{
int N1,inc;

×