Trieu Presentation
Trieu Presentation
TÍng quan
Trong ch˜Ïng này s≥ trình bày v∑ c£i thiªn £nh trong mi∑n t¶n sË
Khái niªm v∑ chuÈi Fourier - Bi∏n Íi Fourier
Kˇ thu™t lÂc m‡n £nh (Lowpass filter)
I Ideal (l˛ t˜ng)
I Gaussian
I Butterworth
Kˇ thu™t lÂc s≠c nét £nh (Highpass filter)
I Ideal (l˛ t˜ng)
I Gaussian
I Butterworth
Ti∫u s˚ Fourier
Hình 2: ChuÈi Fourier: mÎt hàm tu¶n hoàn bßt k˝ l∞p l§i có th∫ bi∫u
diπn d˜Ói d§ng tÍng các hàm sine và cosine các t¶n sË khác nhau.
C = R + jI,
V∑ m∞t hình hÂc, sË ph˘c có th∫ ˜Òc xem nh˜ là các i∫m trên
mÎt m∞t phØng (gÂi là m∞t phØng ph˘c), trˆc hoành Î giá tr‡
th¸c (các giá tr‡ cıa R) và trˆc tung có giá tr‡ £o (các giá tr‡ cıa
I)
Euler’s formula,
Using Euler’s formula,
C = |C|ej✓
Fourier series
A function f (t) of a continuous variable, t (we interpret t as
time), that is periodic with a period, T , can be expressed as the
sum of sines and cosines multiplied by appropriate coefficients.
This sum, known as a Fourier series, has the form
1
X 2⇡n
f (t) = cn e j T
t
(1)
n= 1
where Z T /2
1 j 2⇡n t
cn = f (t)e T dt,
T T /2
Xung (Impulses)
Xung là các tín hiªu có biên Î rßt cao nh˜ng thÌi gian tÁn t§i rßt
ng≠n. Trong x˚ l˛ tín hiªu sË, ng˜Ìi ta th˜Ìng dùng hàm (t) (t là
mÎt bi∏n liên tˆc) ∫ bi∫u diπn mÎt xung l˛ t˜ng (unit impulse)
(
1, if t = 0,
(t) = (2)
0, if t 6= 0
Hàm này b¨ng 0 mÂi nÏi tr¯ t§i t = 0, tÍng diªn tích d˜Ói
˜Ìng cong cıa nó luôn b¨ng 1, bßt k∫ kho£ng tích phân nh‰ cÔ
nào Z 1
(t)dt = 1 (3)
1
(hàm delta Dirac “sàng lÂc” hàm f (t) và chø lßy ra giá tr‡ cıa nó
t§i thÌi i∫m t = t0 .)
Gi£ s˚ có mÎt tín hiªu f (t) ch˘a mÎt xung t§i t = 1 giây. Bi∏n Íi
Fourier cıa tín hiªu này cho bi∏t thành ph¶n t¶n sË cıa nó. D¸a
vào tính chßt sàng lÂc, chúng ta có th∫ bi∏t ˜Òc thành ph¶n nào
trong Bi∏n Íi Fourier t˜Ïng ˘ng vÓi xung: nó s≥ là mÎt giá tr‡ vô
cùng t§i t¶n sË f0 .
Trieu Hai Nguyen Image Processing BM. KTPM–Khoa CNTT 15 / 63
Preliminary Concepts Impulses and their Sifting properties
Fourier transform
The Fourier transform (FT) of a continuous function f (t) of a
continuous variable, t, denoted F (µ), is defined by the equation
Z 1
F (µ) = f (t)e j2⇡µt dt (5)
1
We can obtain f (t) back using the inverse Fourier transform (IFT)
Z 1
f (t) = F (µ)ej2⇡µt dt (6)
1
Fourier spectrum
In general, the Fourier transform contains complex terms, and it
is customary for display purposes to work with the
magnitude of the transform (a real quantity), which is
called the Fourier spectrum.
Ví dˆ
Hãy tính Fourier Transform cho hàm f (t) có d§ng nh˜ hình bên
d˜Ói.
Hình 3: (a) A box function, (b) its Fourier transform, and (c) its
spectrum. All functions extend to infinity in both directions. Note the
inverse relationship between the width, W , of the function and the
zeros of the transform.
Trieu Hai Nguyen Image Processing BM. KTPM–Khoa CNTT 19 / 63
Preliminary Concepts The fourier transform of functions of one continuous variable
Ví dˆ-Hint
S˚ dˆng công th˘c bi∏n Íi FT Eq.5, s˚ dˆng Áng nhßt th˘c
sin(✓) = (ej✓ e j✓ )/(2j), sinc(m) = sin(⇡m)
⇡m
where sinc(0) = 1
and sinc(m) = 0, ∫ rút gÂn.
Ví dˆ-Hint
S˚ dˆng công th˘c bi∏n Íi FT Eq.5, s˚ dˆng Áng nhßt th˘c
sin(✓) = (ej✓ e j✓ )/(2j), sinc(m) = sin(⇡m)
⇡m
where sinc(0) = 1
and sinc(m) = 0, ∫ rút gÂn.
K∏t qu£ F (µ) = AW sin(⇡µW
(⇡µW )
)
Hình 4: Ví dˆ bi∏n Íi DFT cıa £nh f (x, y), ta thu ˜Òc phÍ Fourier
trong hình bên ph£i.
⇥ ⇤1/2
Hình 5: Fourier spectrum: |F (u, v)| = R2 (u, v) + I 2 (u, v)
, where R = Real(F ); I = Imag(F )
⇥ ⇤1/2
where the magnitude |F (u, v)| = R2 (u, v) + I 2 (u, v) is called
the Fourier (or⇥frequency) spectrum, and
I(u,v) ⇤
(u, v) = arctan R(u,v) is the phase angle or phase spectrum.
L˜u ˛
R(u, v), I(u, v), F (u, v), (u, v) là các ma tr™n M ⇥ N . Trong l™p
trình, ∫ bi∫u diπn DFT trong mi∑n t¶n sË, chúng ta th˜Ìng chø
v≥ ph¶n th¸c.
Các công th˘c liên quan ∏n DFT SV có th∫ xem chi ti∏t
TABLE 4.3: Summary of DFT definitions and corresponding
expressions tài liªu [1], p.258.
Trieu Hai Nguyen Image Processing BM. KTPM–Khoa CNTT 29 / 63
LÂc £nh trong mi∑n t¶n sË
Các b˜Óc th¸c hiªn bi∏n Íi DFT và lÂc £nh trong mi∑n
t¶n sË (xem chi ti∏t ph¶n “SUMMARY OF STEPS
FOR FILTERING IN THE FREQUENCY DOMAIN”
tài liªu [1], p.266 ):
1 Chuy∫n £nh ¶u vào f (x, y) có kích th˜Óc M ⇥ N thành £nh
fp (x, y) có kích th˜Óc P ⇥ Q. VÓi P = 2M và Q = 2N (vùng
không ch˘a £nh cho m˘c xám b¨ng 0 ). B˜Óc này có ˛ nghæa
là m rÎng £nh có kích th˜Óc gßp 4 l¶n £nh ¶u vào.
2 T§o £nh mÓi Fp (x, y) có các thành ph¶n Ëi x˘ng qua tâm
t§i (P/2, Q/2) b¨ng cách nhân £nh fp (x, y) vÓi ( 1)x+y .
3 Tính DFT cıa £nh Fp (x, y) ∫ thu ˜Òc £nh F (u, v).
4 T§o bÎ lÂc H(u, v) có kích th˜Óc P ⇥ Q, các ph¶n t˚ bÎ lÂc
Ëi x˘ng vÓi i∫m trung tâm (P/2, Q/2).
Ảnh gốc M ⇥ N Bước 1: Ảnh fp (x, y), (P ⇥ Q) Bước 2: Fp (x, y) = fp (x, y)( 1)x+y
Bước 3: Phổ tần số F (u, v) Bước 4: Phổ tần số Bộ lọc H(u, v) Bước 5: Phổ tần số F (u, v) H(u, v)
Bước 6.1: IDF T (G(u, v)) Bước 6.2: gp (x, y) = Real[IDF T (G(u, v))]( 1)x+y Bước 7: g(x, y), (M ⇥ N )
T¯ công th˘c bi∏n Íi Fourier rÌi r§c (DFT) Eqs. 11 hay 12:
M
X1 N
X1
j2⇡(ux/M +vy/N )
F (u, v) = f (x, y)e
x=0 y=0
Do tính chßt sóng, mÎt hàm trong không gian 2 chi∑u có chu kì có
th∫ bi∫u diπn thành tÍng các hàm 1 chi∑u (sine/cosine). V™y nên,
Công th˘c 2-D DFT Eqs. 11 có th∫ ˜Òc tách thành các
1-D DFT nh˜ sau:
P1 NP1
M
j2⇡(ux/M +vy/N )
F (u, v) = f (x, y)e
x=0 y=0
P1
M
j2⇡ux/M
NP1
j2⇡vy/N
= e f (x, y)e
x=0 y=0
P1
M
j2⇡ux/M
= F (x, v)e (13)
x=0
where
N
X1
j2⇡vy/N
F (x, v) = f (x, y)e (14)
y=0
VÓi viªc tách thành 2 hàm rÌi r§c mÓi là F (x, v), F (u, v), Î ph˘c
t§p cıa bi∏n Íi DFT/IDFT là O(n) = n2 (yêu c¶u sinh viên
ch˘ng minh).
Trieu Hai Nguyen Image Processing BM. KTPM–Khoa CNTT 37 / 63
The Fast Fourier Transform (FFT) Separability of the 2D-DFT
Nâng cao
S˚ dˆng bi∏n Íi Fourier ∫ lÂc £nh trong mi∑n t¶n sË ˘ng dˆng
trong c£i thiªn £nh.
Lowpass filter (cho qua t¶n sË thßp): làm m‡n £nh.
Highpass filter (cho qua t¶n sË cao): làm s≠c nét £nh.
trong ó,
I D0 is a positive constant (cutoff)
I and D(u, v) is the distance between a point (u, v) in he
frequency domain and the center of the P ⇥ Q frequency
rectangle; that is,
⇥ ⇤1/2
D(u, v) = (u P/2)2 + (v Q/2)2 .
Hình 8: Bi∫u diπn Á th‡ cıa hàm chuy∫n Íi ILPF Eq.19. (a) Bi∫u
diπn 3 chi∑u; (b) Bi∫u diπn 2 chi∑u; (c) Bi∫u diπn 2 chi∑u theo D
Hình 10: Bi∫u diπn Á th‡ cıa hàm chuy∫n Íi BLPF. (a) Bi∫u diπn 3
chi∑u; (b) Bi∫u diπn 2 chi∑u; (c) Bi∫u diπn 2 chi∑u theo D
Trieu Hai Nguyen Image Processing BM. KTPM–Khoa CNTT 46 / 63
LÂc £nh trong mi∑n t¶n sË Lowpass Frequency domain Filters
Hình 11: (a) Original image. (b)–(f) Results of filtering using BLPFs
with cutoff frequencies at the radii shown in Fig.9 and n = 2.25.
Hình 12: Bi∫u diπn Á th‡ cıa hàm chuy∫n Íi GLPF. (a) Bi∫u diπn 3
chi∑u; (b) Bi∫u diπn 2 chi∑u; (c) Bi∫u diπn 2 chi∑u theo D
Trieu Hai Nguyen Image Processing BM. KTPM–Khoa CNTT 48 / 63
LÂc £nh trong mi∑n t¶n sË Lowpass Frequency domain Filters
Hình 13: (a) Sample text of low resolution (note the broken characters
in the magnified view). (b) Result of filtering with a GLPF, showing
that gaps in the broken characters were joined.
Hình 14: image, and, radial cross section of an IHPF transfer function.
Trieu Hai Nguyen Image Processing BM. KTPM–Khoa CNTT 51 / 63
LÂc £nh trong mi∑n t¶n sË Highpass Frequency domain Filters
Bước 3: Phổ tần số ảnh sau khi DFT Bước 4: Phổ tần số Bộ lọc Bước 5: Sau khi nhân DFT với ảnh sau khi lọc
Bước 6.1: Thực hiện DFT ngượcBước 6.2: Phần thực sau IDFT nhân -1 mũ (x+y) Bước 7: Ảnh cuối cùng MxN
Hình 16: image, and, radial cross section of an BHPF transfer function.
Trieu Hai Nguyen Image Processing BM. KTPM–Khoa CNTT 53 / 63
LÂc £nh trong mi∑n t¶n sË Highpass Frequency domain Filters
Hình 17: image, and, radial cross section of an BHPF transfer function.
Trieu Hai Nguyen Image Processing BM. KTPM–Khoa CNTT 54 / 63
LÂc £nh trong mi∑n t¶n sË Highpass Frequency domain Filters
Ảnh gốc M ⇥ N Bước 1: Ảnh fp (x, y), (P ⇥ Q) Bước 2: Fp (x, y) = fp (x, y)( 1)x+y
Bước 3: Phổ tần số F (u, v) Bước 4: Phổ tần số Bộ lọc H(u, v) Bước 5: Phổ tần số F (u, v) H(u, v)
Bước 6.1: IDF T (G(u, v)) Bước 6.2: gp (x, y) = Real[IDF T (G(u, v))]( 1)x+y Bước 7: g(x, y), (M ⇥ N )
23 def IDFT1D(self,img):
24 ’’’
25 Bi∏n Íi ng˜Òc IDFT Ïn gi£n hoá theo Eq.14 trong slide:
26 f(u,y)=\frac{1}{N} \sum_{v=0}^{N-1} F(u,v) e^{j2 \pi vy/N}
27 ’’’
28 U = len(img)
29 outarry = np.zeros(U,dtype=complex)
30 for n in range(U):
31 sum = 0.0
32 for v in range(U):
33 e = np.exp(1j * 2 * np.pi * v * n / U)
34 sum += img[v]*e
35 outarry[n]=sum/U
36 return outarry
37
38 def lowPass_Ideals(self,D0):
39 ’’’ ‡nh nghæa hàm lÂc Ideals’’’
40 # H is our filter
41 H = np.zeros((self.P, self.Q))
42 D = np.zeros((self.P, self.Q))
43 U0 = int(self.P / 2)
44 V0 = int(self.Q / 2)
45 # Tính kho£ng cách t¯ i∫m (u,v) ∏n tâm c
46 for u in range(self.P):
47 for v in range(self.Q):
48 duc2 = np.power(u-U0, 2)
49 dvc2 = np.power(v-V0, 2)
50 D[u, v] = np.sqrt( duc2 + dvc2)
51 # Tính bÎ lÂc
52 for u in range(self.P):
53 for v in range(self.Q):
54 if D[u,v] <= D0:
55 H[u, v] = 1
56 else:
57 H[u, v] = 0
58 return H
59
60 def step_1(self):
61 ’’’B˜Óc 1: M rÎng £nh t¯ kích th˜Óc MxN vào £nh PxQ vÓi P=2M và Q=2N’’’
62 M, N=self.img.shape
63 # Chuy∫n £nh PxQ vào m£ng fp
64 f_xy_p = np.zeros((self.P, self.Q))
65 f_xy_p[:M, :N] = self.img
66 return f_xy_p
67
68 def step_2(self,f_xy_p):
69 ’’’B˜Óc 2: T§o £nh F_xy_p: nhân £nh fp(x,y) vÓi (-1)_{x+y} ∫t§o £nh mÓi’’’
70 F_xy_p = np.zeros((self.P, self.Q))
71 for x in range(self.P):
72 for y in range(self.Q):
73 F_xy_p[x, y] = f_xy_p[x, y] * np.power(-1, x + y)
74 return F_xy_p
75
76 def step_3(self,F_xy_p):
77 ’’’B˜Óc 3: Tính DFT Ïn gi£n cho £nh F_xy_p trong mi∑n t¶n’’’
78 dft_cot = dft_hang = np.zeros((self.P, self.Q))
79 # DFT cho hàng th˘ i
80 for i in range(self.P):
81 dft_hang[i] = self.DFT1D(F_xy_p[i])
82 # DFT cho cÎt th˘ j
83 for j in range(self.Q):
84 dft_cot[:, j] = self.DFT1D(dft_hang[:, j])
85 return dft_cot
86
87 def step_67(self,G_uv):
88 ’’’Bi∏n Íi ng˜Òc IDFT vÓi £nh lÂc G(u,v)’’’
89 # B˜Óc 6.1 Th¸c hiªn bi∏n Íi ng˜Òc DFT
90 idft_cot = idft_hang = np.zeros((self.P, self.Q))
91 # IDFT cho hàng th˘ u
92 for i in range(self.P):
93 idft_hang[i] = self.IDFT1D(G_uv[i])
94 # IDFT cho cÎt th˘ v
95 for j in range(self.Q):
96 idft_cot[:, j] = self.IDFT1D(idft_hang[:, j])
97 # B˜Óc 6.2: Nhân ph¶n th¸c £nh sau khi bi∏n Íi ng˜Òc vÓi -1 mÙ (x+y)
98 g_xy_p=self.step_2(idft_cot.real)
99 # B˜Óc 7: Rút trích £nh kích th˜Óc MxN t¯ £nh PxQ
00 # Và ây £nh cuËi cùng sau khi lÂc
01 g_xy = g_xy_p[:self.img.shape[0], :self.img.shape[1]]
02 return g_xy
03
04 def ILPF(self,D0):
05 ’’’LÂc £nh trong mi∑n t¶n sË, s˚ dˆng ILPF’’’
06 # B˜Óc 4: T§o bÎ lÂc
07 H_uv=self.lowPass_Ideals(D0)
08 # Tính F(u,v) trong mi∑n t¶n sË
09 f_p=self.step_1()
10 F_p=self.step_2(f_p)
11 F_uv=self.step_3(F_p)
12 # B˜Óc 5: Nhân £nh (elementwises) sau khi DFT vÓi bÎ lÂc H ∫thu ˜Òc
G(u,v)
13 G_uv=np.multiply(F_uv,H_uv)
14 # B˜Óc 67: K∏t qu£ lÂc
15 g_p=self.step_67(G_uv)
16 return g_p
17
18
19 if __name__ == "__main__":
20 image = cv2.imread("./figures/blown_ic.tif", 0)
21 image = cv2.resize(src=image, dsize=(100, 100))
22 f_lowpass=Frequency_LowpassFilter(image)
23 ideal_img=f_lowpass.ILPF(60)
24 fig=plt.figure(figsize=(9,6))
25 ax1,ax2=fig.subplots(1,2)
26 ax1.imshow(image,cmap="gray")
27 ax2.imshow(ideal_img,cmap="gray")
28 plt.show()