1. Trang chủ
  2. » Công Nghệ Thông Tin

Biến đổi fourier rời rạc sử dụng trong Xử lý ảnh số

51 3,7K 55

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 51
Dung lượng 1,39 MB

Nội dung

Biến đổi fourier rời rạc sử dụng trong Xử lý ảnh số

Trang 1

6 Biến đổi Fourier rời rạc

( 2 1 2

(

k k j

e k k h

2 1 2

1

1 2

2 2 1 1

),()

,

k

N k

k k j

e k k h

0

2 1 2

1

1

2 2 1

2

),()

,

k

k n k N j N

k

e k k h n

n

Biểu thức (6.4) đợc gọi là biến đổi Fourier rời rạc 2-D hay còn gọi là DFT Công thứcnày đợc áp dụng vào nhiều ứng dụng nh lọc, nén ảnh, phóng đại ảnh Trong chơng nàychúng ta sẽ nghiên cứu 2-D DFT và các kỹ thuật tính toán Đầu tiên, chúng ta sẽ xem xét1-D DFT, sau đó mở rộng ra cho 2-D

6.2 Biến đổi Fourier 1-D

k

nk N j

e kT f n

n

nk N

W k f n

Trang 2

n

nk N

j

e n F N k f

1 0

) (

1 0

1 0

1 0

)(1

)(

1)

(1

N m

N n

m k n N

kn N N

n

N m

nm N N

n

nk N

W m f N

W W m f N

W n F N

N n

m k n N

W S

)) ( 2 (

m) - (k N

m) - N(k N

11

W-1

W-1

m k N j

m k j

e e S

Vì vậy, biểu thức (6 9) có thể rút gọn thành

f(k).N

1)

(

0F n W N N

N n

nk

=∑−

=Kết quả này giống nh biểu thức (6.8)

Khi f(k) có thể rút ra từ F(n) và ngợc lại, chúng gọi là cặp biến đổi Cặp biến đổi này

có dạng

Trang 3

Chó ý tõ biÓu thøc (6.8) ta cã thÓ dÔ dµng chøng minh:

)(

)(1

)(1

1 0

2

1 0

) ( 2

k f

e n F N

e n F N

N n

nk N j

N n

N k n N j

6.2.2 Mét vµi tÝnh chÊt cña DFT

TuyÕn tÝnh NÕu ta cã hai d·y tuÇn hoµn cïng f 1 (n) vµ f 2 (n), vµ c¶ hai d·y nµy tuÇn

k

nk N j N

k

N N j

N k

n N k N

e e k f

e e k f

W k f n

N F

2 1

0

2 1

0

2

1 0

) (

)(

)(

)()

n F e

k f n

N

k

nk N

j π

(6.13)

DÊu * cã nghÜa lµ liªn hîp phøc

TÝch chËp tuÇn hoµn Coi f 1 (k) vµ f 2 (k) lµ hai d·y tuÇn hoµn cã chu kú N, víi biÕn

)

Trang 4

khi ( ) 1 ( )

0 1 1 1

1

1

1 1

W k f n

)

()

0 2 2 2

2

2

2 2

W k f n

3( ) 1 ( ) ( )vì vậy

1

0 2 2 1

0 1 1

2 1 2

1

1 2

2 1

1)()

(

)()(1

N n

k k k n N N

k

N k

nk N N

n

N k

N k

k k n N 3

W N k f k f

W W

k f k f N

(k) f

N n

k k k n

W N

)(

)()

Đó là lý do ta phải làm cho cả hai dãy có chu kỳ bằng nhau Để sửa lỗi này, một số số 0cần phải thêm vào cả hai dãy để chiều dài hai dãy bằng nhau Ví dụ, nếu một dãy có

cho k = k 1 + k 2 + lN

các trờng hợp còn lại.

W

1

1

1 0

2 2 1 1 1 0

1 0 1 2 1

0 1 1 1

1 1 1

)()(

)()

()

()

(

k N

k

k N N

n

N k

k n N N

k

k N

W k f k f

W k f W

k f n

F n F

Trang 5

1)(

2 k f

1 Tính bằng tay tích chập của hai dãy trên Vẽ một lu đồ biểu diễn thuật toán

2 Làm lại phần 1, nhng lần này sử dụng tích chập tuần hoàn

lại phần 3 và so sánh kết quả

6.3 Thuật toán biến đổi nhanh Fourier

phép cộng

Hoàn thiện có nghĩa là phải giảm số phép tính trong biến đổi Fourier xuống Dới đâychúng ta sẽ giới thiệu hai thuật toán hay dùng là thuật toán phân chia thời gian và thuậttoán phân chia tần số DFT dùng các thuật toán trên gọi là Fast Fourier transform (FFT)

6.3.1 Thuật toán phân chia thời gian

của thuật toán phân chia thời gian thì rõ ràng Tuy nhiên, việc thiết kế phần mềm cũng

đòi hỏi một số phân tích chi tiết Để làm rõ các bớc của thuật toán này chúng ta sẽ bắt

Cơ sở của thuật toán phân chia thời gian dựa trên cơ sở chiến lợc chia và chiếm Các

(

k

nk

W k f n

0

16 ( ))

()

(

k

nk k

W k f n

F

k chẵn k lẻ

Chúng có thể viết thành

0 ≤k 1 ≤ 4 các trờng hợp còn lại.

0 ≤k 1 ≤ 5 các trờng hợp còn lại.

Trang 6

) 2 (

16 (2 1))

2()

(

k

k n k

k

W k f n

n j k

n

W

e e

2 )

2 ( 16

2 )

2 ( 16

π π

7

0

8 (2 1))

2()

(

k

nk n

k

W k f n

7

0

8

10( ) ( ))

(

k

nk n

k

W k f n

10( ) ( )

k

nk

W k f n

11( ) ( )

k

nk

W k f n

thức này biểu diễn bớc cuối cùng trong lu đồ tính toán của hình 6.2

Bây giờ xem xét biểu thức

10( ) ( )

k

nk

W k f n

F

Xử lý nh trên chúng ta có

Trang 7

8 3

0

4 10

10( ) (2 ) (2 1)

k

nk n

k

W k f n

(2k) f (k) f

10 21

10 20

Trang 8

Hình 6.2 Bớc cuối cùng của thuật toán biến đổi FFT phân chia miền thời gian.

X(k) ký hiệu vector chứa giá trị đợc tính qua phép biến đổi FFT

0

2 16 4

20

k

nk k

n

W k f n

F

(n) F W (n) F (n)

(n) F W - (n) F 4) (n

20( ) ( )

k

nk

W k f n

21( ) ( )

k

nk

W k f n

Tơng tự

(n) F W - (n) F 4)

(n

F

16 22

22( ) ( )

k

nk

W k f n

Trang 9

23( ) ( )

k

nk

W k f n

(n) F W - (n) F 2) (n

16 32

(n) F W - (n) F 2) (n

(n) F W (n) F (n)

(n) F W - (n) F 2) (n

16 36

(n) F W - (n) F 2) (n

Các biểu thức từ (6.29) đến (6.36) cho kết quả trong bớc thứ ba của thuật toán và biểu

tử nữa và bớc này tạo thành sơ đồ cuối cùng (bớc đầu tiên) trong lu đồ

Trang 10

H×nh 6.3 Bíc thø hai sau bíc cuèi cïng trong thuËt to¸n FFT.

Trang 11

Hình 6.4 Bớc đầu tiên của lu đồ FFT.

Cho N = 24 = 16 chúng ta phải có bốn bớc trong lu đồ Trong mỗi bớc cần phải có támbớm Trong mỗi bớm chỉ có một phép nhân phức, hai phép cộng hoặc trừ phức Tổng số

log2 N và số phép cộng là Nlog 2 N Chú ý, thực tế số phép nhân sẽ giảm xuống một ít, vì

với hệ số xoay = 1

pháp tiết kiệm thực sự cho tính toán

Bây giờ, chúng ta sẽ vạch ra thuật toán FFT Đó không đơn thuần chỉ là sự phát triểnmột chơng trình từ lu đồ Tuy nhiên, chúng ta có thể nghiên cứu lu đồ và vạch ra các bớc

có thể dùng để phát triển một chơng trình Từ lu đồ của hình 6.5 chúng ta có thể viết:

Bớc thứ nhất Trong bớc này ta có tám bớm với trọng lợng (hệ số xoay) W0 = 1.Chúng ta có thể viết (xem hình 6.6)

0

01010101 0101010101

Trang 13

Hình 6.5 Lu đồ thuật toán thuật toán phân chia miền thời gian.

0 2 4 6

0 2 4 6

0 4

0 4

0 4

0 4

0 4 8 12 2 6 12 14 1 5 9 13 3 7 11 15

0 2 4 6 8 10 12 14 1 3 5 7 9 11 13 15

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

Trang 14

10 k f

)(

11 k f

(b)

Trang 15

T = X(7)W(6)

X(7+8)= X(7)-T

X(7) = X(7) +T

Các bớc dẫn chúng ta đến thuật toán với N = 16

Thuật toán

ip=1

kk=8

incr=2

cho iter=0 đến 3 trong các bớc của 1

{

cho j=0 đến 15 trong các bớc của incr

{

i = j + ip T = X(j) X(i) = X(j) - T X(j) = X(j) +T nếu (iter không bằng 0) thì {

cho k=1 đến ip-1 trong các bớc của 1 {

r = k*kk - 1 cho j=k đến 15 trong các bớc của 15 {

i=j+ip T=X(i)*W(r) X(i)=X(j)-1 X(j)=X(j)+T

}

}

}

kk=kk/2 ip= ip*2 inc=inc*2 }

Thuật toán trên có thể dễ dàng mở rộng cho tất cả các trờng hợp của N Chỉ có một lĩnh vực còn lại cần phải giải thích là sự sắp xếp lại các dãy dữ liệu đầu vào Điều này có thể tạo ra dễ dàng nếu chúng ta tạo ra một bảng (LUT) L(i), L(i) là các giá trị đảo ngợc bit của i Nếu dữ liệu đợc đọc từ một file thì tất cả các việc mà chúng ta phải làm là chuyển địa chỉ vùng của chúng trong file qua bảng LUT và lu các dữ liệu này trong địa chỉ chứa kết quả trong dãy đầu vào, X Bớc này có thể chuyển sang ngôn ngữ C nh sau: for (i=0; i<N; i++) fscanf (fptr, “ %f ”, &X[L[i]]);

Kết quả của LUT đợc chuyển thẳng và đợc cung cấp với chơng trình của thuật toán tính FFT trong Listing 6.1 dới dạng modun con dới tên “ bit_reversal( )”

Chơng trình 6.1 “FFTDT.C“ FFT 1-D Thập phân trong miền thời gian. /*********************************** * Program developed by: *

* M.A.Sid-Ahmed *

* ver 1.0 1992 *

Trang 16

* @ 1994 *

*********************************/

/* FFT - Decimation-in-time routine with examplemain

programing proper usage */

void bit_reversal(unsigned int *, int , int);

void WTS(float *, float *, int, int);

void FFT(float *xr, float *xi, float *, float *,

/* Allocating memory for bit reversal LUT */

L=(unsigned int *)malloc(N*sizeof(unsigned int));

/* Generate Look-up table for bit reversal */

Trang 17

void bit_reversal(unsigned int *L, int m, int N)

/* Routine for generating LUT for bit reversal

Note: N=(2 to the power of m)

LUT will reside in LI]*/

void WTS(float *wr, float *wi, int N, int sign)

/* Generating LUT for twiddle factors

Note:

sign=-1 for FFT, and

sign=1 for IFFT */

{

int n2,i ;

float theta;

Trang 18

You will need to use routine "bitreversal" for that purpose.

need to use routine LUT for calculating and storing twiddle factors.*/

Trang 19

Chú ý rằng trong chơng trình 6.1 chúng ta giả thiết là dữ liệu đợc lu nh dãy của các ký

tự không dấu Nếu bạn muốn xử lý trên một số dấu phẩy động bạn cần thay đổi các câulệnh mở và đọc dữ liệu trong file dữ liệu Chơng trình này cũng cho phép lựa chọn FFThoặc IFFT Cho FFT, chơng trình con "WTS( ) " tính toán và lu các hệ số dịch xoaytrong một LUT đợc gọi lên vói tham số "sign" đợc gán giá trị -1, ví dụ, WTS(wr,wi,N,-1)

và cho IFFT, WTS(wr,wi,N,1) Với IFFT, bạn cần chia dãy ra cho N trong chơng trình gọihoặc là chơng trình chính

Bài tập 6.2 Kiểm tra chơng trình FFT bằng cách làm lại chơng trình 6.1 Chú ý rằng

và tất nhiên là lớn hơn chiều dài dãy nhỏ nhất đòi hỏi là (6 + 5 - 1) Mối tơng quan củahai dãy cho kết quả trong một tín hiệu tuần hoàn có chu kỳ bằng 16

6.3.2 Thuật toán phân chia tần số.

Thay vì chia dãy vào thành các vị trí chẵn và lẻ, chúng ta sẽ đa ra một chơng trìnhgiống nh chơng trình trên nhng lần này ta bắt đầu từ dãy ra Chơng trình này bao gồmcác bớc sau:

kn N N

k

nN

N N k

kn N N

k

kn N

W

N k f W k f

W k f W

k f n

2 /

1 2 /

1 2 / 0

)2()

(

)()

()

([)

2

0

kn N N

n N

k

W

N k f W

k f n

=

++

Trang 20

)]

2()

([)

12

0

+

− +

=

++

=

N N

n N

k

W

N k f W

k f n

) 1 2 ( 2 / ).

1 2 ( + = − + =−

2

0

kn N N

k

W

N k f k f n

=

++

])

2()([)

12

0

kn N

k N N

k

W W

N k f k f n

2

0

10 N kn N

k

W k f n

12

0

11 N kn N

k

W k f n

chú ý đến bậc của dữ liệu đầu ra là bit đợc đảo Phần mềm thực hiện thuật toán trên thìrất giống phần mềm thực hiện FFT phân chia miền thời gian, và một chơng trình C đợccung cấp ở Chơng trình 6.2

Trang 21

Có lẽ bạn sẽ tự hỏi: nếu phân chia miền thời gian đã thực hiện đợc công việc thì tạisao lại phải xem xét thêm FFT phân chia tần số Để trả lời câu hỏi này, chúng ta sẽ cầnxem xét phần kế tiếp, FFT giảm lợc.

void bit_reversal (unsigned int *, int, int);

void WTS(float *, float *, int, int) ;

void FFT(float *xr, float *xi , float, float, int, int);

order You will need to use routine "bit-reversal" to place them in normal ascending order

need to use routine LUT for calculating and storing twiddle factors */

int ip,k,kk,l,incr,iter,j,i;

float Tr,Ti,diffr,diffi;

Trang 22

0 2 4 6

0 2 4 6

0 4

0 4

0 4

0 4

0 0 0 0 0 0 0

0 0 8 4 12 2 10 6 14 1 9 5 13 3 11 7 15

0 8 4 12 2 10 6 14 1 9 5 13 3 11 7 15

0 4 8 12 2 6 12 14 1 5 9 13 3 7 11 15

0 2 4 6 8 10 12 14 1 3 5 7 9 11 13 15

Trang 23

giảm lợc (xem hình 6.8) Một giải thuật dựa trên tính toán các phần tử của bớm khi việc

ra FFT

Thuật toán giảm lợc đầu vào FFT Trờng hợp này sẽ làm hoàn thiện hơn thuật toán

b-ớm Sơ đồ này giúp chúng ta thay đổi chơng trình 6.2 thành chơng trình 6.3

Chơng trình 6.3 "FFTIP.C" Giảm lợc đầu vào FFT

/* FFT - input pruning routine */

void bit_reversal(unsigned int *, int , int);

void WTS(float *, float *, int, int);

void FFTP(float *xr, float *xi, float *, float *, int,int,int, int);

void FFTP(float *xr, float *xi, float *wr, float *wi,

int m_output, int N_output,

int m_input, int N_input )

{

/* FFT pruning algorithm

Deimation-in-frequency algorithm

Trang 24

N_output=Number of samples in the output sequence

M_input=Number of samples in the input sequence This should also be a multiple of2

You will need to use routine "bit-reversal" to place them in normal ascending order

need to use routine LUT for calculating and storing twiddle factors */

int ip,k,kk,l,inc r,iter,j,i;

04812 26101415 91337111 5

08412210 61419513

311715

08412 21061419 51331171 5

Trang 25

Hình 6.8 Lu đồ thuật toán giảm lợc đầu vào, N=4

Trang 26

2 Thêm các giá trị 0 vào dãy để làm cho chiều dài dãy thành 1024 Bây giờ tính FFTscủa dãy dùng chơng trình FFT phân chia tần số không giảm lợc So sánh thời gian xử

lý của phần 1 và 2

Thuật toán FFT giảm lợc đầu ra Giải thuật phân chia miền thời gian thì thích hợp

cho thuật toán giảm lợc đầu ra hơn là giải thuật phân chia miền tần số Lý do là đầu ratrong giải thuật phân chia miền thời gian không phải sắp xếp lại Hình 6.9 giới thiệu tr-

Trang 27

Hình 6.9 Lu đồ cho giảm lợc đầu ra FFT, N = 4.

Chơng trình 6.4 “FFTOP.C“ Giảm lợc đầu ra FFT.

void bit_reversal(unsigned int *, int , int);

void WTS(float *, float *, int, int);

void FFTP(float *xr, float *xi, float *, float *,int, int, int, int);

void FFTP(float *xr, float *xi, float *wr, float *wi,

int m, int N, int m_output, int N_output){

/* FFT output pruning algorithm using

0481 2261014 1591337 1115

0841 2210614 1951331 1715

Trang 28

2 The input arrays are assumed to be rearranged in bit-reverse order.

You will need to use routine "bit-reversal" for that purpose

need to use routine LUT for calculating and storing twiddle factors.*/

Trang 29

1)

(

ωω

ω

−+

=

H

của đáp ứng xung dùng FFT giảm lợc

6.4 2-D FFT

)}

,({

),()

,(

2 1

/ 2 2 1 2

1

1 2

2 2 1 1

k k h DFT

e k k h n

n

k

N k

k n k n N j

trong trờng hợp tổng quát, đầy đủ có thể biểu diễn theo:

2 1 2

/ 2 2 1 2

2 1

1 2

2 2 1 1

),(

1),

n

N n

k n k n N j

e n n H N

k k

Trang 30

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

),

()

,

b n a n H e

k k

) ( 2 2 1 2

1

2 1)

,(),

1 2

1 ( , )( ) ( , )( 1))

,2()

1)(

,

n

N n H k

k

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àyrấ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 độ

)(

/ 2 2 1 2

1, ) ( , ) 1 2

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

)]

,(),([),(])

,

(

[|

2 1

) (

/ 2 2 1 2 1 2

1 ) (

/ 2 2

f

b n a n N j b

n a n N j

i

e n n A n n I n n I e

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ôngtuyế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ổngquát, ảnh đã đợc lọc có thể cho bởi

Trang 31

N) n N, H(n

N) n , H(n ) n N, H(n ) n , (n

2 1

2 1 2

1 2

1

++

=

+

=+

=H

N) k , h(k ) k N, h(k ) k , h(k

2 1

2 1 2

1 2

1

++

=

+

=+

=

(6.49)

Biến đổi DFT đối xứng liên hợp khi

) n

- , (-n

* H ) n ,

hoặc

) n

- , H(-n

k 2 =

sin r

φω

sin n

cos n

n H ab bk

Trang 32

hoặc từ biểu thức (6.1) ta có thể viết

N

0

1 0 1

2 1

* ) k , (k

Đ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 ờ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 ápdụ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 đã đợcbiế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

N

0

1 0 1

2 1

Trang 33

6.5 2-D FFT

Biểu thức cho 2-D DFT có thể dới dạng

1 1

1 2

2

2 2 / 1

0

1

0

/ 2 2 1 2

1, ) [ ( , ) ]

k

N k

k n N

e k k h n

0

2 1 2

1, ) ( , )

k

e k k h k

0 2

2) (0, ),

0

k

e k h n

/ 2 1

0 2

2) (1, ),

1

k

e k h n

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:

1

/ 2 1

0 1

1,0) ( ,0)

N k

e k G n

/ 2 1

0 1

1,1) ( ,1)

N k

e k G n

=

=

.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

Ngày đăng: 02/04/2014, 00:15

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w