Professional Documents
Culture Documents
GIO TRNH MN HC
X L NH
Ngi son : PGS. TS. NNG TON,
TS. PHM VIT BNH
LI NI U
B mn H thng thng tin, Khoa Cng ngh thng tin, H Thi Nguyn,
Khoa Cng ngh thng tin, H Cng ngh, HQG H Ni, Khoa Ton
C Tin, H Khoa hc t nhin, HQG H Ni ng vin, gp v
gip hon chnh ni dung cun sch ny. Xin cm n Lnh o Khoa
Cng ngh thng tin, H Thi Nguyn, Ban Gim c H Thi Nguyn
h tr v to iu kin cho ra i gio trnh ny.
Mc d rt c gng nhng ti liu ny chc chn khng trnh khi
nhng sai st. Chng ti xin trn trng tip thu tt c nhng kin ng
gp ca bn c cng nh cc bn ng nghip c chnh l kp thi.
Th gp xin gi v: Phm Vit Bnh,
Khoa Cng ngh thng tin H Thi nguyn.
X Quyt Thng, Tp. Thi Nguyn
in thoi: 0280.846506
Email: pvbinh@ictu.edu.vn
MC LC
LI NI U......................................................................................................................................................................2
MC LC.................................................................................................................................................................................4
Chng 1: TNG QUAN V X L NH.....................................................................................9
1.1. X L NH, CC VN C BN TRONG X L NH..................9
1.1.1. X l nh l g?...........................................................................................................................................9
1.1.2. Cc vn c bn trong x l nh....................................................................................10
1.1.2.1. Mt s khi nim c bn..................................................................................................10
1.1.2.2. Nn chnh bin dng..............................................................................................................10
1.1.2.3. Kh nhiu...........................................................................................................................................11
1.1.2.4. Chnh mc xm...........................................................................................................................11
1.1.2.5. Phn tch nh..................................................................................................................................11
1.1.2.6. Nhn dng..........................................................................................................................................12
1.1.2.7. Nn nh.................................................................................................................................................13
1.2. THU NHN V BIU DIN NH...........................................................................................14
1.2.1. Mu sc.............................................................................................................................................................14
1.2.1.1. M hnh mu RGB (Red, Green, Bule)...........................................................14
1.2.1.2. M hnh mu CMY (Cyan, Magenta, Yellow).......................................15
1.2.1.3. M hnh mu HSV (Hue, Saturation, Value)............................................16
1.2.1.4. M hnh mu HLS...................................................................................................................19
1.2.2. Thu nhn, cc thit b thu nhn nh..................................................................................22
1.2.2.1. Giai on ly mu.....................................................................................................................23
1.2.2.2. Lng t ha..................................................................................................................................24
1.2.3. Biu din nh..............................................................................................................................................24
1.2.3.1. M hnh Raster............................................................................................................................24
1.2.3.2. M hnh Vector...........................................................................................................................25
Chng 2: CC K THUT NNG CAO CHT LNG NH...................26
2.1. CC K THUT KHNG PH THUC KHNG GIAN..........................26
2.1.1. Gii thiu........................................................................................................................................................26
2.1.2. Tng gim sng...............................................................................................................................26
Chng 1:
TNG QUAN V X L NH
1.1. X L NH, CC VN C BN TRONG X L
NH
1.1.1. X l nh l g?
Con ngi thu nhn thng tin qua cc gic quan, trong th gic
ng vai tr quan trng nht. Nhng nm tr li y vi s pht trin ca
phn cng my tnh, x l nh v ho pht trin mt cch mnh m
v c nhiu ng dng trong cuc sng. X l nh v ho ng mt vai
tr quan trng trong tng tc ngi my.
Qu trnh x l nh c xem nh l qu trnh thao tc nh u vo
nhm cho ra kt qu mong mun. Kt qu u ra ca mt qu trnh x l
nh c th l mt nh tt hn hoc mt kt lun.
nh
X L NH
nh
Tt hn
Kt lun
nh c th xem l tp hp cc im nh v mi im nh c xem
nh l c trng cng sng hay mt du hiu no ti mt v tr no
ca i tng trong khng gian v n c th xem nh mt hm n bin
P(c1, c2,..., cn). Do , nh trong x l nh c th xem nh nh n chiu.
S tng qut ca mt h thng x l nh:
1.1.2. Cc vn c bn trong x l nh
1.1.2.1. Mt s khi nim c bn
* nh v im nh:
im nh c xem nh l du hiu hay cng sng ti 1 to
trong khng gian ca i tng v nh c xem nh l 1 tp hp cc
im nh.
* Mc xm, mu
L s cc gi tr c th c ca cc im nh ca nh
1.1.2.2. Nn chnh bin dng
nh thu nhn thng b bin dng do cc thit b quang hc v in
t.
Pi
Pi
f(Pi)
nh thu nhn
nh mong mun
i =1
f ( Pi ) Pi '
min
i =1
i =1
cho min
10
=0
a1
= 0
b1
=0
c1
n 2 n n n '
a1xi + b1xi yi + c1xi = xi xi
i= 1 i= 1 i= 1 i= 1
n n 2 n n '
a1xi yi + b1 yi + c1 yi = yi xi
i= 1 i= 1 i= 1 i= 1
n
n n
'
a
x
+
b
y
+
n
=
c
x
1 i 1 i 1 i
i= 1
i= 1 i= 1
14
(0,0,0)
(0,1,0)
green
(1,0,0)
Red
Hnh 1.4. M hnh mu RGB
Cyan
Yellow
Red
Black
Magent
a
Blue
16
17
Hm RGB_HSV_Conversion
H: Sc mu [0-360] vi mu ti im 0
S: bo ha [0-1]
V: Gi tr cng sng [0-1]
Max: Hm ly gi tr cc i
Min: Hm ly gi tr nh nht
{
//Xc nh gi tr cng sng
V= Max(R,G,B)
//Xc nh bo ha
Temp= Min(R,G,B)
If V=0 than
S= 0
Else
S= (V-Temp)/V
End
//Xc nh sc mu
IF s=0 THEN
H= Undefined
Else
Cr= (V-R)/(V-Temp);
Cg= (V-G)/(V-Temp);
Cb= (V-B)/(V-Temp);
// Mu nm trong khong gia vng (Yellow) v ta (Magenta)
If R=V then
H= Cb-Cg
// Mu nm trong khong gia xanh tm (cyan) v vng (yellow)
If G= V then
H= 2+Cr-Cb
// Mu nm trong khong gia ti (magenta) v xanh (cyan)
If B=V then
H= 4+ Cg Cr
18
If I=1 then
(R,G,B)=(N,V,M);
If I=2 then
(R,G,B)=(M,V,K);
If I=3 then
(R,G,B)=(M,N,V);
If I=4 then
(R,G,B)=(K,M,V);
If I=5 then
(R,G,B)=(V,M,N);
}
1.2.1.4. M hnh mu HLS
M hnh mu HLS c xc nh bi tp hp hnh chp su cnh i
ca khng gian hnh tr. Sc mu l gc quanh trc ng cu hnh chp su
cnh i vi mu ti gc 0o. Cc mu s xc nh theo th t ging nh
trong biu CIE khi ranh gii ca n b xoay ngc chiu kim ng h:
Mu , mu vng, mu lc, mu xanh tm, mu lam v thm. iu ny
cng ging nh th t sc xp trong mu hnh chp su cnh n HSV.
H= H*60
if H<0 then
H= H+360
endif
}
Chuyn i t HLS sang RGB
Hm HLS_RGB_Conversion()
H: Sc mu [0-360] vi mu ti im 0
S: bo ha [0-1]
V: Gi tr cng sng [0-1]
{
If L <= 0.5 then
M2= L*(1+S)
Else
M2= L+S-L*S
Endif
M1= 2*L-M2
//Kim tra bo ha = 0
If S=0 then
If H=Undefined
R=L
G=L
B=L
Else //Error: D liu nhp sai
Endif
Else //Xc nh gi tr ca RGB
RGB(H+120, M1,M2,Value)
R= Value
RGB(H, M1,M2,Value)
G= Value
RGB(H-120, M1,M2,Value)
B= Value
22
Endif
}
//Hm iu chnh gi tr ca H cho ph hp khong xc nh
Hm RGB(H, M1, M2, Value)
{
If H < 0 then
H= H+360
If H < 60 then
Value= M1+(M2-M1)*H/60
If H >=60 and H < 180 then
Value= M2
If H>= 180 and H < 240 then
Value = M1+(M2-M1)*(240-H)/60
If H > 240 and H <= 360 then
Value= M1
Return
}
23
Dng tn hiu nh
1
x
l tn s ly mu theo trc x.
- Gi fy = y l tn s ly mu theo trc y.
khng xy ra hin tng chng ph th tn s ly mu phi t nht
phi ln hn hoc bng 2 tn s cao nht ca tn hiu nh. Tc l:
fx >= 2fxmax
fy >= 2fymax
Trong fxmax, fymax l tn s cao nht ca tn hiu theo trc x, y.
24
1.2.2.2. Lng t ha
nh sau khi ly mu s c dng f(m,n) vi m, n l nguyn nhng gi
tr f(m, n) vn l gi tr vt l lin tc. Qu trnh bin i gi tr f(m,n)
thnh mt s nguyn thch hp lu tr gi l lng t ho. y l qu
trnh nh x mt bin lin tc u vo bin ri rc u* thuc tp hu hn [u1,
u2,..uL] xc nh trc, L l mc lng t ho c to ra.
V d:
+ To nh a cp xm th L=256, f(m,n) = g [ 0,
+ To nh 224 th L=224, f(m, n) = g [0,
255 ]
2 24 1
DIB
Ca s
Thay i
Vecter
ha
VECTOR
Raster
ha
RASTER
26
Chng 2:
I=
2
0
2
1
0
0
0
1
2
1
4
7
0
1
1
h(g)
27
2.1.4. B cm
K thut nhm gim bt s mc xm ca nh bng cch nhm li s
mc xm gn nhau thnh 1 nhm
Nu ch c 2 nhm th chnh l k thut tch ngng. Thng thng
c nhiu nhm vi kch thc khc nhau.
tng qut khi bin i ngi ta s ly cng 1 kch thc
bunch_size
h(g
)
0
I [i,j] = I [i,j]/ bunch - size * bunch_size (i,j)
V d: B cm nh sau vi bunch_size= 3
I=
1
2
7
4
2
1
2
1
4
3
6
2
6
4
9
1
7
5
1
2
28
0
0
6
3
Ikq =
0
0
0
0
3
3
6
0
6
3
9
0
6
3
0
0
Gi s, ta c nh
new_level ~ s mc xm ca nh cn bng
TB =
m n
new_ level
~ s im nh trung bnh ca mi mc xm
ca nh cn bng
t ( g ) = h(i )
i =0
~ s im nh c mc xm g
Xc nh hm f: g f(g)
t(g )
1
TB
10
11
14
15
17
19
20
0
1
1
0
2
1
2
2
3
2
29
Ikq = 3
2
1
0
2
1
3
0
0
1
Ch : nh sau khi thc hin cn bng cha chc l cn bng "l tng
"
Gi s, ta c nh
G ~ l s mc xm ca nh k c khuyt thiu
t(g) ~ s im nh c mc xm g
m( g ) =
Hm f:
1 g
i.h(i)
t ( g ) i =0
~ mmen qun tnh TB c mc xm g
f (g )
f (g) =
t(g)
[ m( g ) m(G 1)] 2
mxn t ( g )
Tm sao cho:
f ( ) = max{ f ( g )}
0 g < G 1
V d: Tm ngng t ng ca nh sau
0
1
2
3
4
5
0
0
1
2
3
4
I= 0
0
0
1
2
3
0
0
0
0
1
2
0
0
0
0
0
1
Lp bng
g
f(g)
15
15
1.35
20
0,25
1.66
24
13
0,54
1.54
27
22
0,81
1.10
29
30
1,03
0.49
i =0
30
30
35
1,16
h(g)
g + 1 nu g 2
f(g)=
nu g = 3
g 1 nu g > 3
Bc 1: V Histogram ca nh c
f(g)
31
Bc 2: V th hm f(g)
h(g
)
0
Bc 3: V Histogram ca nh mi
t q = f(g)
h(q) = card ({P| I(P) = q})
= card ({P| I(P) = f(g)})
= card ({P| g = f-1 (I(P))})
=
h(i )
if
h(g)
f(g)
(q)
I T ( x, y ) =
i =0
n 1
I ( x + i, y + j ) * T ( i , j )
j =0
(2.1)
32
Hoc
m 1
I T ( x , y ) =
i =0
n 1
I ( x i, y j ) * T ( i, j )
j =0
(2.2)
VD:
I=
1
2
4
1
7
2
1
5
2
2
T=
1
1
I T ( x , y ) =
i =0
4
1
5
1
2
5
4
8
1
1
8
2
8
4
5
7
2
2
4
2
= I ( x, y ) + I ( x +1, y +1)
2
7
IT= 6
3
*
3
6
6
4
*
8
9
6
2
*
7
12
12
6
*
10
4
12
6
*
*
*
*
*
*
*
8
9
6
2
*
7
12
12
6
*
10
4
12
6
* Nhn xt:
- Trong qu trnh thc hin php nhn chp c mt s thao tc ra
ngoi nh, nh khng c xc nh ti nhng v tr dn n nh thu
c c kch thc nh hn.
- nh thc hin theo cng thc 2.1 v 2.2 ch sai khc nhau 1 php
dch chuyn n gin ta s hiu php nhn chp l theo cng thc 2.1
1
1
1
1
1
1
1
1
1
33
2
31
5
2
2
4
1
5
1
2
5
4
8
1
1
8
2
8
4
5
7
2
2
4
2
55
52
I T1 = 29
*
*
65
58
27
*
*
45
34
35
*
*
46
35
35
*
*
*
*
*
*
*
*
*
*
*
*
I=
-1
4
-1
0
-1
0
I T2 =
*
*
*
*
*
*
*
*
*
*
2.2.3. Lc trung v
* nh ngha 2.1 (Trung v)
Cho dy x1; x2...; xn n iu tng (gim). Khi trung v ca dy k
hiu l Med({xn}), c nh ngha:
34
+ Nu n l
x + 1
2
+ Nu n chn:
n
x
2
hoc
x + 1
2
* Mnh 2.1
n
xx
i =1
min ti Med ( { xn } )
Chng minh
+ Xt trng hp n chn
t
M =
n
2
Ta c:
n
i =1
i =1
i =1
x x i = x x i + x x M +i
M
i =1
i =1
= ( x x i + x M +i x ) x M +i x i
M
= [ ( x M +1 x M ) + ( x M xi ) ]
i =1
M
i =1
i =1
= x M +i Med ( { xi } ) + xi Med ( { xi } )
n
= xi Med ( { xi } )
i =1
+ Nu n l:
B sung thm phn t Med ( { xi } ) vo dy. Theo trng hp n chn
ta c:
n
xx
i =1
x x
i =1
min ti Med({xn})
* K thut lc trung v
Gi s ta c nh I ngng ca s W(P) v im nh P
Khi k thut lc trung v ph thuc khng gian bao gm cc bc
c bn sau:
+ Bc 1: Tm trung v
{I(q)| q W(P)} Med (P)
35
+ Bc 2: Gn gi tr
I ( P)
I ( P) =
M (eP)d
I ( P ) Med ( P )
Nguoclai
V d:
I=
1
4
4
2
2
16
2
1
3
2
1
2
W(3 3); = 2
1
2
3
4
2
2
Ikq = 4
2
1
2
1
2
Gi tr 16, sau php lc
gi tr.
2
1
1
1
2
1
1
1
c gi tr 2, cc gi tr cn li khng thay i
36
* Mnh 2.2
n
( x xi )
min
i =1
ti AV ( { xn } )
Chng minh:
n
t: ( x) = ( x xi )
i =1
Ta c:
n
( x ) = 2 ( x x i )
i =1
( x) = 0
'
(x x ) = 0
i
i =1
x=
1 n
xi = AV ( { xi } )
n i =1
ti x = AV ( { xi } )
37
+ Bc 2: Gn gi tr
I ( P)
I ( P) =
A V(P)
I ( P ) AV ( P )
Nguoclai
V d:
I=
1
4
4
2
2
16
2
1
3
2
1
2
2
1
1
1
W(3 3); = 2
1
2
3
4
3
2
Ikq = 4
2
1
2
1
2
Gi tr 16 sau php lc
nguyn sau php lc.
2
1
1
1
trung bnh c gi tr 3, cc gi tr cn li gi
I ( P)
I ( P) =
A kV(P)
I ( P ) AV k ( P )
Nguoclai
V d:
I=
1
4
4
2
2
16
2
1
3
2
1
2
2
1
1
1
38
W(3 3); = 2; k = 3
39
1
4
4
2
Ikq =
2
8
2
1
3
2
1
2
2
1
1
1
* Nhn xt:
- Nu k ln hn kch thc ca s th k thut chnh l k thut lc
trung bnh
- Nu k= 1 th nh kt qu khng thay i
Cht lng ca k thut ph thuc vo s phn t la chn k.
V d: Ta c tp X nh sau:
x
X = 0
0
0
x
0
x
x
0
x
x
0
x
x
0
x
0
B
0
=
0
0
40
x
X B = 0
0
0
x
x
x
x
x
x
x
x
x
x 0 v XB =
x x
x x
x
x
0
0
0
0
0
0
0
x
x
0
x
0
0
0
0
0
0
0
0
0
OPEN(X,B) = (XB) B
= 0
0
x
0
x
x
x
0
x
x
0
0
x
0
0
CLOSE(X,B) = (X B) B =
x
x
x
x
x
x
x
x
x
x
0
x
X B X B B
X B X B B
(ii) B B'
X B X B' X
X B X B
Chng minh:
41
(i) X B =
xX
= X ' B
xX '
X B = { x / Bx X } { x / Bx X '} = X B
(ii) X B =
xX
B'
= X B'
xX
Theo nh ngha:
X B = { x / B ' x X } { x / Bx X } = X B .
*Mnh 2.4 [Tnh phn phi vi php ]:
(i) X (B B') = (X B) (X B')
(ii) X (B B') = (X B) (X B')
Chng minh:
(i) X (B B) = ( X B) (X B)
Ta c: B B B
X (B B) X B
Tng t:
X ( B B) X B
X (B B) (X B) (X B)
(2.3)
Mt khc,
y X (B B) x X sao cho y (B B)x
y Bx
y Bx
yXB
y X B
y (X B) (X B)
X (B B) (X B ) (X B)
(2.4)
T (2.3) v (2.4) ta c: X (B B) = (X B) (X B)
(ii) X (B B) = (X B) (X B)
Ta c: B B B
X (B B) X B
Tng t : X (B B) X B
X (B B) (X B) ( X B)
(2.5)
Mt khc,
x (X B) (X B)
Suy ra, x X B
Bx X
42
x X B
Bx X
( B B)x X
x X (B B)
X (B B) (X B) (X B)
(2.6)
X YX
(X Y) B X B
Tng t:
(X Y) B Y B
(X Y) B (X B) (Y B)
(2.7)
Mt khc,
x (X B) (Y B)
Suy ra x X B
xYB
Bx X Y
Bx X
Bx Y
x ( X Y) B
(X Y) B (X B) (Y B)
(2.8)
43
Chng minh:
(i) (X B) B' = X (B' B)
B x ) B'
Ta c, (X B) B' = ( x
( Bx
= x
X
B ' ) =
( B B ' ) x
xX
= X (B' B)
(i) (X B) B' = X (B B')
Trc ht ta i chng minh:
Tht vy, do
B x'
B x'
X B ( B ' B) x X
X B nn y B x' yX B
By X
By
y
B
'
x
( B ' B) x X
Mt khc, ( B ' B) x X ( B x' B) X
By
y
X
B
'
x
y B x' ta c By X
hay y B x' ta c y X B
Do ,
B x'
XB
Ta c, (X B) B' = { x / B x X } B'
X B}
= {x/
B x'
= {x/
( B ' B) x
= X (B B') .
* nh l 2.1 [X b chn bi cc cn OPEN v CLOSE]
Gi s, X l mt i tng nh, B l mu, khi , X s b chn trn
bi tp CLOSE ca X theo B v b chn di bi tp OPEN ca X theo B.
Tc l:
(X B) B X (X B) B
44
Chng minh:
Ta c: x X Bx X B
x (X B) B
Bx
(V X B = x
)
(X B) B X
(2.9)
Mt khc,
y (X B) B, suy ra:
x X B sao cho y Bx
Bx
(V (XB) B = x
)
X
B
Bx X y X
Suy ra: X (X B) B
(2.10)
T (2.9) v (2.10) Ta c: (X B) B X (X B) B .
*H qu 2.1 [Tnh bt bin] :
(i) ((X B) B) B = X B
(ii) ((X B) B) B = XB
Chng minh:
(i) Tht vy, t nh l 2.1 ta c X (X B) B
X B ((X B) B) B (do tnh cht gia tng) (2.11)
Mt khc, cng t nh l 2.1 ta c (X B) B X X
Do , thay X bi X B ta c, ((X B) B) B X B (2.12)
T (2.11) v (2.12) Ta c: ((X B) B) B = X B
(ii) Tht vy, t nh l 2.1 ta c (X B) B X
((X B) B) B XB (do tnh cht gia tng) (2.13)
Mt khc, cng t nh l 2.1 ta c X (X B) B X
Do , thay X bi X B ta c, XB ((X B) B) B(2.14)
T (2.13) v (2.14) Ta c: ((X B) B) B = XB (pcm).
45
Chng 3:
46
f ( x, y )
f ( x + dx, y ) f ( x, y )
= fx
x
dx
f ( x, y )
f ( x, y + dy ) f ( x, y )
= fy
y
dy
f
x f ( x + 1, y ) f ( x, y )
f
f ( x, y + 1) f ( x, y )
y
Do , mt n nhn chp theo hng x l A= ( 1
Chng hn:
0
0
I=
0
0
0
3
3
3
0
3
3
3
0
3
3
3
0
3
3
*
0
0
0
*
0
0
0
*
v hng y l B=
*
* ; I B=
*
*
3
0
0
*
1)
Ta c,
IA=
0
0
0
*
3
0
0
*
*
*
*
*
47
0
I A + I B= 3
0
0
0
0
*
*
3
*
0
*
0
*
*
*
I=
I Hx =
0
5
5
5
0
0
0
5
5
5
0
0
0
5
5
5
0
0
0
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
*
*
0
0
0
0
*
*
-10
-15
-10
-5
*
*
-10
-15
-10
-5
*
*
*
*
*
*
*
*
*
*
*
*
*
*
48
15 15 10 5
*
*
0
0
0
0
*
*
-15 -15 -10 -5 *
*
I Hy = -15 -15 -10 -5 *
*
*
*
*
*
*
*
*
*
*
*
*
*
15 15 0 -5
0
0 -15 -15
I Hx + I Hy = -15 -15 -20 -15
-15 -15 -15 -10
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
5
0
-3
-3
0
H2 =
H4 =
H6 =
5
-3
-3
5
0
-3
5
-3
-3
-3
-3
-3
-3
-3
-3
0
-3
-3
0
5
5
5
-3
-3
49
-3
-3
H7 = 5
5
-3
0
5
-3
-3
-3
5
5
5
-3
0
-3
-3
-3
-3
H8 =
I H
i =1
2 f =
2 f
2 f
+
x 2
y 2
2 f
f
=
( f ( x +1, y ) f ( x, y ) )
2
x
x x x
[ f ( x +1, y ) f ( x, y )] [ f ( x, y ) f ( x 1, y )]
f ( x +1, y ) 2 f ( x, y ) + f ( x 1, y )
Tng t,
2 f
f
=
( f ( x, y +1) f ( x, y ) )
2
y
y
y y
[ f ( x, y +1) f ( x, y )] [ f ( x, y ) f ( x, y 1)]
f ( x, y +1) 2 f ( x, y ) + f ( x, y 1)
50
Dn ti:
0
H = 1
0
1
4
1
1
0
H1 = 1
0
1
4
1
VD:
I=
0
1
1 H 2 = 1
1
0
1
8
1
1
1
1 H 3 = 2
1
1
2
4
2
2
1
2 4 5 4 2
4 9 1 29 4
1
H = 5 1 12 15 25
1 1 5
4 9 1 29 4
2 4 5 4 2
51
Gi G l kt qu lc nhiu: G= I H
+Bc 2: Tnh gradient ca nh bng mt n PreWitt, kt qu t vo
Gx,Gy.
Gx = G Hx, Gy = G Hy
+ Bc3: Tnh gradient hng ti mi im (i,j) ca nh. Hng ny
s c nguyn ha nm trong 8 hng [0..7], tng ng vi 8 ln
cn ca mt im nh.
+ Bc 4: Dng rng buc loi b nhng im khng phi l cc
i xa b nhng im khng l bin. Xt (i,j), l gradient hng ti
(i,j). I1, I2 l hai im ln cn ca (i,j) theo hng . Theo nh ngha im
bin cc b th (i,j) l bin nu I(i,j) cc i a phng theo hng
gradient Nu I(i,j) > I1 v I(i,j) > I2 th mi gi li I(i,j), ngc li xa
I(i,j) v im nh nn.
+ Bc 5: Phn ngng. Vi cc im c gi li, thc hin ly
ngng gradient bin ln cui xc nh cc im bin thc s.
52
P3
P2
P1
P4
P0
P5
P6
P7
*i tng nh
Hai im Ps, Pe E, E hoc c gi l 8-lin thng (hoc 4lin thng) trong E nu tn ti tp cc im c gi l ng i (io,jo)...
(in,jn) sao cho (io,jo)= Ps, (in,jn)= Pe, (ir,jr) E v (ir,jr) l 8-lng ging (hoc
4-lng ging tng ng) ca (ir-1,jr-1) vi r = 1,2,...,n
Nhn xt: Quan h k-lin thng trong E (k=4,8) l mt quan h phn x,
i xng v bc cu. Bi vy l mt quan h tng ng. Mi lp
tng ng c gi l mt thnh phn k-lin thng ca nh. V sau ta s
gi mi thnh phn k-lin thng ca nh l mt i tng nh.
Chu tuyn C
Chu tuyn C
Chu tuyn C
57
im trng trc
Trng so vi en mi
Mc xm
N=5
59
60
a) nh gc
b) nh qua lc Sobel Hx
d) nh qua lc Kirsh
c) nh qua lc Sobel Hy
e) nh qua lc Laplace
Hnh 3.5. Cc nh bin theo cc thut ton pht hin bin truyn thng
a) nh bin thu c vi 1= 25
*Nhn xt:
Chng ta c nhn xt l nh gc s dng trong chng trnh c mu
nn kh ti v c rt nhiu nhiu. Cc b lc s dng trong minh ha trn
u mc phi vn ny. Thut ton d bin s dng trong chng trnh
tuy hn ch c nhiu nhiu so vi vic s dng cc b lc v lm ni
r cc ng bin nhng vn khng loi b c hu ht cc nhiu. Khi p
dng thut ton trn chng ta vn c th lm gim bt nhiu i nhiu hn
na bng cch tng gi tr ca h s delta ln. Nhng khi cc ng
bin thu c cng b t on v m i nhiu.
Thut ton c phc tp t l vi kch thc nh v kch thc ca
s. Vi phc tp ca thut ton l O(n2) nn n thc hin vic tm bin
kh nhanh, nh bin thu c ch gm cc im nh v im bin nn d
x l, bn thn thut ton ny cng t chu nh hng ca nhiu hn l k
thut Sobel mc d n c kh nng pht hin kh tt cc vng bin nhiu.
Nhng cng ging cc phng php pht hin bin trc tip khc l n cho
kt qu ng bin c dy khng u.
61
X B = CLOSE(X,B)\ OPEN(X,B)
Xp x bin ca X theo mu B
OPEN(X,B)= ((XB)B)
Xp x di ca X (thuc X)
Hnh 3.7. Xp x trn v di theo mu B ca X
XB = XB i
i =1
3.5.1. Thut ton pht hin bin da vo php ton hnh thi
Vo
: nh X v dy mu B= {Bi, 1 i n };
Ra
Phng php:
Bc 1: Tnh X Bi i=1,n
n
( X Bi )
Bc 2: Tnh
i =1
Trong Hnh 3.8a di y l nh gc vi 256 mc xm, Hnh 3.8b l
nh bin thu c qua pht hin bin bng Sobel, Hnh 3.8c l nh bin
thu c qua pht hin bin bng Laplace. Hnh 3.8d l nh bin kt qu
thc hin bi thut ton pht hin bin bng cc php ton hnh thi vi
ngng tch = 128 v cc mu tch bin Bi l:
B1=
B2=
a) nh gc a cp xm
B3=
B4=
63
Hnh 3.8. Pht hin bin bi thut ton da vo php ton hnh thi
64
Chng 4:
a) nh gc
b) nh xng
Hnh 4.1. V d v nh v xng
Bo ton cc im ct
Bn vng i vi nhiu
c
lm mnh
66
67
(4.1)
(4.2)
(4.3)
(4.4)
68
(4.5)
(4.6)
(4.7)
a)
c)
b)
d)
69
t 7 CH(S
3
1
CH(SR
)
4
2
6
t
5
11
9
10
p8
t
p6 v
4
v3
p1
p1
v2
p7
v1
p4
v6
Cc im
thuc Si-1
Cc im
thuc Li
p9
p2
t
p5
p3
71
Begin
i:=0; Si:=rng;
While (i<imax Si straight_line) do
Begin
(*Khi to s Voronoi cho n khi n cha t nht mt nh*)
increment i;
GetScanLine Li;
Vor(Si) = VoroPreScan(Vor(Si-1, Li));
End
While (i < imax) do
Begin
Increment i;
GetScanLine Li;
Vor(Li) := cc ng trung trc sinh bi cc im sinh thuc Li
Vor(Si) := VoroLink(Vor(Si-1), Vor(Li));
End
End.
Gi s xt trn h to thc. nh vo c qut t di ln. To
y (bin i) tng ng vi tng dng qut c tng dn theo tng dng.
Trong th tc trn, hm quan trng nht l hm VoroLink, hm ny thc
hin vic trn s Voronoi ca Li-1 dng c qut trc vi s
Voronoi ca dng hin ti th i. Trong vng lp trn, hm VoroPreScan l
mt bin th ca hm VoroLink, c nhim v khi to s Voronoi v
thot khi vng lp ngay khi n thnh lp c s Voronoi cha t nht
mt nh. Hm VoroLink thc hin vic trn hai s Voronoi Vor(Si-1) v
Vor(Li) vi nhau thnh Vor(Si).
72
Chng 5:
CC K THUT HU X L
5.1. RT GN S LNG IM BIU DIN
5.1.1. Gii thiu
Rt gn s lng im biu din l k thut thuc phn hu x l. Kt
qu ca phn d bin hay trch xng thu c 1 dy cc im lin tip.
Vn t ra l hiu c th b bt cc im thu c gim thiu khng
quan lu tr v thun tin cho vic i sch hay khng.
Bi ton:
Cho ng cong gm n im trong mt phng (x1, y1), (x2, y2)
(xn,yn). Hy b bt 1 s im thuc ng cong sao cho ng cong mi
nhn c l (Xi1; Yi1), (Xi2; Yi2) (Xim; Yim) gn ging vi ng cong
ban u.
* Mt s o gn ging
+ Chiu di (chiu rng) ca hnh ch nht nh nht cha ng cong
+ Khong cch ln nht t ng cong n on thng ni 2 u mt
ca ng cong
+ T l gia chiu di v chiu rng ca hnh ch nht nh nht cha
ng con
+ S ln ng cong ct on thng ni 2 u mt
h>
73
tnh ng cao
returm h ;
}
//Hm quy nhm nh du loi b cc im trong ng cong
void DPSimple(POINT *pLINE,int dau,int cuoi,BOOL *chiso,float )
{
int
i, index = dau;
float h, hmax = 0;
for(i = dau + 1; i < cuoi; i++)
{
h= Tinhduongcao(pLINE[dau], pLINE[cuoi]; pLINE[i]);
if(h > hmax)
{
hmax = h;
index = i;
}
}
74
if(hmax )
for(i= dau + 1; i < cuoi, i++)
chiso[i] = FALSE;
else
{
DPSimple(PLINE, dau, index, chiso, );
DPSimple(PLINE, index, cuoi, chiso, ) ;
}
}
//Hm rt gn s lng im DouglasPeucker
int DouglasPeucker(POINT *pLINE, int n, float )
{
int
i, j;
75
P3
P2
di
P1
dk
P4
P5
76
i, j;
P1
P4
P5
chot = tg;
tg = tg + 1;
if(tg < n - 1)
ALSimple(pLINE, chot, tg, chiso, , n);
}
//Hm rt gn s lng im Angles
int Angles(POINT *pLINE, int n, float )
{
int i, j, chiso [MAX];
for (i = 0; i < n; i++) //Tt c cc im c gi li
chiso[i]= TRUE;
ALSiple (PLINE, 0, 1 chiso, , n) ;
for (i = j = 0; i < n; i++)
if (chiso ==TRUE)
pLINE[j++]= pLINE [i];
return j;
}
* Ch :
Vi = 0 thut ton DouglasPeucker v BandWidth s b i cc im
gia thng hng. Thut ton Angles phi c = 180o b i cc im gia
thng hng.
79
Nhn dng i
tng
Bt bin
Aphin
Ellipse
Tam gic
T gic
Bt bin
ng
dng
ng
trn
Ellipse
Hnh ch nht
Tam gic u
a gic
0d m 1
d
,
n
80
Trong
d =
n 1
min
0 2 , R 2 j =0
kRU j + a V( j +d ) mod m
, k=
, vi R
n 1
n 1
1 n 1
2
2
2
d = |V( j +d ) mod m | | V( j +d ) mod m | +k |U j | 2 k | U jV( j +d ) mod m |
n j =0
j =0
j =0
j =0
2
Trong thc hnh tnh tch phn trn ngi ta thng s dng cng
thc Green hoc c th phn tch phn bn trong a gic thnh tng i s
ca cc tam gic c hng OUiUi+1 .
U2
U
1
O(0,0)
U0
Un-
U3
Hnh 5.6. Phn tch min1 a gic thnh tng i s cc min tam gic
81
a ,b ,cR
1 n 2
( x + yi2 + axi + byi + c) 2
n i =1 i
min
a ,b ,c ,d ,eR
1 n 2
( x + ayi2 + bxi yi + cxi + dyi + e) 2
n i =1 i
2 11
20 - 02 .
S area ( Pg )
x
Hnh 5.8. Xp x a gic bng hnh ch nht
82
area ( Pg ) area
( Pg ' )
Dng chun tc
Tam gic
Tam gic u
Hnh vung
Ellipse
ng trn
+ Bc 1:
Tm dng chun tc c s Pg' tho mn iu kin:
m01 = m10 = 0
m02 = m20 = 1
m = m = 0
31
13
(**)
+ Bc 2:
Xc nh bin i aphin T chuyn a gic thnh a gic Pg dng
chun tc (tho mn tnh cht (**)).
Xp x a gic Pg vi dng chun tc c s Pg tm c bc 1 vi
o xp x E(Pg,Pg).
+ Bc 3:
Kt lun, a gic ban u xp x T-1(Pg) vi o xp x E(Pg,Pg).
i vi bc 1 trong [7] a ra hai v d sau:
V d 1:
83
3, ) ,
P3=
( 3,) ,
28 3
3
V d 2:
Tn ti hai hnh vung
3
4
84
* Phng php:
- Xy dng mng ch s [a, b] v gn gi tr 0 ban u cho tt c cc
phn t ca mng
- Vi mi (xi; yi) v a, b l ch s ca phn t mng tho mn
b = - xia + yi tng gi tr ca phn t mng tng ng ln 1
- Tm phn t mng c gi tr ln nht nu gi tr ln nht tm c so
vi s phn t ln hn hoc bng ngng cho trc th ta c th kt lun
cc im nm trn cng 1 ng thng v ng thng c phng trnh
y = ax + b trong a, b tng ng l ch s ca phn t mng c gi tr ln
nht tm c:
V d:
Cho 5 im (0, 1); (1, 3); (2, 5); (3, 5); (4, 9) v = 80%. Hy kim
tra xem 5 im cho c nm trn cng mt ng thng hay khng? Hy
cho bit phng trnh ng thng nu c?
- Lp bng ch s [a, b] v gn gi tr 0
+ (0, 1): b = 1
+ (1, 3): b = -a + 3
+ (2, 5): b = -2a + 5
+ (3, 5): b = -3a + 5
+ (4, 9): b = -4a + 9
- Tm phn t ln nht c gi tr 4
4/5 = 80%
- Kt lun: 5 im ny nm trn cng 1 ng thng
Phng trnh: y = 2x + 1
85
x.cos +y.sin=r
H
x
Hnh 5.9. ng thng Hough trong to cc
OH.HA=0
86
Chng 6:
NG DNG X L NH
6.1. PHT HIN GC NGHING VN BN DA VO
CHU TUYN
Gc nghing vn bn l mt bi ton kinh in trong x l nh vn
bn. Mt h thng x l nh vn bn thng phi gii quyt bi ton pht
hin gc nghing nh mt bc u tin v tt yu. Chnh v vy, cng vi
s pht trin ca x l nh ni chung v x l nh vn bn ni ring, bi
ton gc nghing vn bn cng c quan tm ngy cng nhiu v di
nhiu gc khc nhau. C rt nhiu hng tip cn cho bi ton gc
nghing vn bn t trc ti nay. Cc thut ton pht hin gc nghing
thng c xy dng cho cc h thng phn tch nh vn bn khc nhau
nn ch gii quyt cho nhng loi nh vn bn c th. C th chia ra mt s
hng tip cn c bn cho bi ton gc nghing vn bn nh sau:
Cc thut ton da vo phn tch hnh chiu (Projection Profile)
Cc thut ton da vo bin i Hough (Hough Transform)
Cc thut ton phn tch lng ging (Nearest Neighbour Clustering)
Phng php dng cc php ton hnh thi
Da vo tnh cht mi i tng nh c duy nht mt chu tuyn ngoi
v quan nim con ngi nhn ra nghing ca vn bn da vo c ch
chim ch o trong vn bn. Mc ny cp n vic tnh ton kch thc
ch o ca cc i tng nh trong vn bn thng qua k thut tnh biu
tn xut kch thc hnh ch nht nh nht bao quanh i tng nh.
Vic xc nh gc nghing vn bn s c xc nh nh php bin i
Hough cho nhng im gia y ca hnh ch nht nh nht bao quanh i
tng nh cho cc i tng nh c kch thc ch o.
87
x.cos+y.sin
= r2
Hough[][r1]
=4
89
90
92
93
6.2.1. Quan h Q
nh ngha 5.1: [Lin kt Q ]
Cho trc ngng , hai i tng nh U, V hoc c gi l
lin kt theo v k hiu Q(U,V) nu tn ti dy cc i tng nh X1,
X2,... Xn sao cho:
(i) U X1
(ii) V Xn
(iii) h(Xi, Xi+1) < i, 1 i n-1
Mnh 6.1: Quan h lin kt Q l mt quan h tng ng
Chng minh:
(i) Phn x: U hoc ta c h(U,U)= 0 <
(ii) i xng: Gi s c Q(U,V) cn phi chng minh Q(V,U)
Tht vy, theo gi thit tn ti dy i tng nh X1, X2,..., Xn sao
cho:
95
97
98
nv
Grid
c k C M Grid
v ca vn bn so vi li c xc nh l tng lch ca vn
bn so vi tng can li
l:
n
M Grid
= NM
i =1 j=1
Grid
(i, j)
99
S=
nv
N
i =1 j=1
'
MG Grid
(i, j) NMG
Grid
(i, j)
n c + n 'c
Trong :
MG - l li kt hp t hai li c xy dng t cc hnh ch nht
vng ca vn bn v mu
Grid
n c , n ,c - l s vng ca vn bn v s vng ca mu
'
MG Grid
Grid
- l lnh ca vn bn v mu so vi li (i,j)
*V d minh ho nh gi lch vn bn so vi mu
Cu trc vn bn, cu trc mu v li ta hnh ch nht xy dng
tng ng
100
M Grid
(i, j)
l:
1/8
1/8
1/4
1/4
1/8
1/8
1/4
1/4
1/8
1/8
1/4
1/4
1/8
1/8
1/4
1/4
1/8
1/8
1/8
1/8
1/8
1/8
1/2
1/8
1/8
1/2
1/2
1/2
1/3
1/3
1/3
1/2
1/2
4* 1/ 4 + 1/ 2 + 1/ 6 + 2 / 3 5
=
= 0,3125
4+ 4
16
6.3.1. t vn
Mt trong nhng im mu cht ca vn nhn dng ch in ni
chung v ch Vit in ni ring l phi c lp c chng. Vic c lp cc
ch c tin hnh sau khi tin hnh phn tch trang tch cc khi, t
cc khi tch ra cc dng, t cc dng tch ra cc t v cc t tch ra cc
k t.
Phng php chiu ngang VPP (Vertical Project Profile) hay biu
tn sut ngang VH (Vertical Histogram) l phng php kh ph bin c
p dng trong cc h OCR (Optical Character Recognition). Nhng phng
php ny thng b hn ch khi cc k t b dnh (touch) hay b chn
(overlap) [35,36,54], c bit i vi ch Vit vi cc tng m v du iu
ny thng hay xy ra.
103
* Phn mm ot gii nht Sng to khoa hc k thut Vit Nam (gii VIFOTECH trc y) nm
1999.
104
En
d
St
art
105
Tp
ng ct
M=0
a)
M=5
ng
ct
c)
b)
Hnh 5.13. V d v ng ct v mt ct
Na chu tuyn di
Ch trc khi d
Ch sau khi d bin
Qu trnh tm cp im tht
bin
Chu tuyn trong
im ang xt
Chu tuyn ngoi
im phn na trn v na di
chu tuyn ngoi
Hnh 6.14. Qu trnh tm chu tuyn v cp im xt duyt
106
Tng s P 1
Li
Li
a) Cm ch dnh
b) Cc cp im tht
tm c
c) Cc cp im ct sau khi
tnh ti v tr tng h ca
chu tuyn trong
Hnh 6.16. Thc hin VerifyCutPoint c tnh n v tr tng h ca
chu tuyn trong
i =1
109
110
PHIU IU TRA X HI
Hnh 6.17. Hnh nh mt phiu iu tra
(x11 ,y11 )
Vng
(Histogram).
Phng php ny i hi cc i tng
dng
v cc
(xtrn
,y12mt
i
tng
cha
12
dng
iuhcny to
vncha
bn cc hnh phi tch ri nhau mt khong) ln. hnh
nhdu
iu(cc
kin
k cho vic tm ra dng phn cch gia cc dng hnh v gia cc
(x21 ,y21 )
t)
hnh trn cng mt dng. Song trn thc
t vic tm ng phn cch gia
chng theo ngha thng thng l rt kh do hnh nho hai hnh c th dnh
li vi nhau bi nhiu. Hn na, chnh mt s dng mu du iu tra li
(x22(Hnh
,y22 ) 6.17). Mc ny
c thit k dnh lin nhau ging nh biu bng
trnh by phng php tch cc i tng hnh hc mm do hn bng vic
pht hin cc i tng hnh hc mt cch t ng nh s dng chu tuyn
trong v mt s kiu xp x a gic bi cc hnh c s.
111
Bt bin
Aphin
Ellipse
Tam gic
T gic
a gic
112
a)
b)
c)
d)
e)
f)
113
Trong,
ngoi
im
Ri nhau,
Ph nhau,
K
Hnh
ch
nht
Li
Ph
L
Hiu
chnh
Bng
Hnh 6.21. Quan h gia im, hnh ch nht, li, bng
114
115
116
c) nh en trng Iwb
c) nh en trng Iwb
117
c) nh xp chng
Qua Hnh 6.23, Hnh 6.24 v Hnh 6.25, chng ta nhn thy: vi
nhng khung hnh sai khc nhau t s lm cho nh Iwb c mu en (Ic, Ip
c ging nhau ln), cn vi nhng khung hnh c khc nhau ng k,
th ngoi nhng i tng chuyn ng, cn c nhiu (do s tng phn,
thi tit...). V vy, vi k thut tr khung hnh lin k c th lm cho qu
trnh bm i tng chuyn ng b mt i (v c th c 2 khung hnh c
khc nhau khng ng k). Thc nghim cho thy: Nu chng ta gim gi
tr ngng th s tng c phn bit gia cc khung hnh gn ging
nhau, nhng cng s lm tng vng khc nhau i vi khung hnh c
khc nhau nhiu, do s lm cho qu trnh x l phc tp hn. Nh vy,
vi k thut tr khung hnh lin k chng ta c c nhn xt sau:
Cha ti u c qu trnh x l, v phi x l tt c khung hnh
c trong on video mc d chng khng c s thay i (cc i
tng khng chuyn ng).
Thu c nhng thay i nh i vi nhng i tng c chuyn
ng chm v c th l khng phn bit c v thay i t, v vy
m kh c th ly c ton b i tng chuyn ng.
Cha nhiu nhiu, do thi tit, tng phn, bng lm thay
i gi tr mu nhng vng khng chuyn ng.
V vy, chng ta s khng thc hin tr khung hnh lin k pht
hin i tng. Di y chng ta s xem xt mt hng tip cn kt hp:
k thut tr khung hnh, o thay i, xt v tr, v k thut d bin nh
a cp xm nng cao hiu qu pht hin i tng chuyn ng.
118
c) nh
Iwb
nhiu hnh c sai khcd)
nhmn
Iwbngng,
lc nhiu
Hnh
6.26.
a),cha
b) llc
2 khung
tha
c) nh Iwb cha lc nhiu, d) l nh Iwb sau khi lc nhiu
120
121
122
Ph lc 1:
MT S NH DNG TRONG X L NH
Hin nay trn th gii c trn 50 khun dng nh thng dng. Sau y
l mt s nh dng nh hay dng trong qu trnh x l nh hin nay.
1. nh dng nh IMG
nh IMG l nh en trng, phn u ca nh IMG c 16 byte cha
cc thng tin:
6 byte u: dng nh du nh dng nh. Gi tr ca 6 byte ny
vit di dng Hexa: 0x0001 0x0008 0x0001
2 byte tip theo: cha di mu tin. l di ca dy cc byte
k lin nhau m dy ny s c lp li mt s ln no . S ln
lp ny s c lu trong byte m. Nhiu dy ging nhau c
lu trong mt byte.
4 byte tip: m t kch c pixel.
2 byte tip: s pixel trn mt dng nh.
2 byte cui: s dng nh trong nh.
nh IMG c nn theo tng dng, mi dng bao gm cc gi (pack).
Cc dng ging nhau cng c nn thnh mt gi. C 4 loi gi sau:
2. nh dng nh PCX
nh dng nh PCX l mt trong nhng nh dng nh c in. N s
dng phng php m ho lot di RLE (Run Length Encoded) nn
d liu nh. Qu trnh nn v gii nn c thc hin trn tng dng nh.
Thc t, phng php gii nn PCX km hiu qu hn so vi kiu IMG.
Tp PCX gm 3 phn: u tp (header), d liu nh (Image data) v bng
mu m rng.
Header ca tp PCX c kch thc c nh gm 128 byte v c
phn b nh sau:
1 byte: ch ra kiu nh dng.Nu l PCX/PCC th n lun c gi
tr l 0Ah.
1 byte: ch ra version s dng nn nh, c th c cc gi tr sau:
+
0: version 2.5.
124
3. nh dng nh TIFF
Kiu nh dng TIFF c thit k lm nh bt cc vn lin
quan n vic m rng tp nh c nh. V cu trc, n cng gm 3 phn
chnh:
Phn Header(IFH): c trong tt c cc tp TIFF v gm
8 byte:
+
125
bfType;
bfSize;
bfReserved1;
bfReserved2;
bfOffBits;
126
} BITMAPFILEHEADER;
typedef struct tagBITMAPINFOHEADER { /* bmih */
DWORD
LONG
LONG
WORD
WORD
DWORD
DWORD
LONG
LONG
DWORD
DWORD
biSize;
biWidth;
biHeight;
biPlanes;
biBitCount;
biCompression;
biSizeImage;
biXPelsPerMeter;
biYPelsPerMeter;
biClrUsed;
biClrImportant;
} BITMAPINFOHEADER, *LPBITMAPINFOHEADER;
vi
biSize
biWidth
biHeight
biPlanes
biBitCount
S bit cho mt im nh
biCompression
Kiu nn
biSizeImage
biXPelsPerMeter
biYPelsPerMeter
biClrUsed
biClrImportant
rgbBlue;
BYTE
rgbGreen;
/* rgbq */
127
BYTE
rgbRed;
BYTE
rgbReserved;
} RGBQUAD;
Ta cng c:
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER
bmiHeader;
RGBQUAD
bmiColors[1];
} BITMAPINFO, *PBITMAPINFO;
128
Ph lc 2:
1. Bc 1: M v ng th vin
Trc mi thao tc vi file AVI, chng ta phi m th vin:
AVIFileInit( )
Hm ny khng cn tham s, c nhim v khi ng th vin cung
cp cc hm thao tc vi file AVI. ( l th vin vfw32.lib, c khai bo
trong file vfw.h).
Sau tt c cc thao tc bn phi nh ng th vin m lc u, ch
bng lnh:
AVIFileExit( )
Nu thiu bt c hm no, d l m hay ng th vin th trnh bin
dch u s thng bo li.
129
3. Bc 3:
M dng d liu hnh nh hay m thanh trong file AVI m ra
thao tc:
AVIFileGetStream(PAVIFILE pfile, PAVISTREAM * ppavi,
DWORD fccType, LONG lParam)
Trong , pfile l con tr n file m; ppavi tr n dng d liu
kt qu; fccType l loi dng d liu chn m, l streamtypeAUDIO
nu l ting v streamtypeVIDEO nu l hnh, lParam m s loi dng
c m, l 0 nu ch thao tc vi mt loi dng d liu.
Sau cc thao tc vi dng d liu ny, bn nh phi ng n li:
AVIStreamRelease(PAVITREAM pavi).
5. Bc 5: Thao tc vi frame
Dng hm
AVIStreamGetFrame(PGETFRAME pget, LONG lpos)
Hm ny tr v con tr tr n d liu ca frame th lpos. D liu
c kiu l DIB nh khi.
Thc hin cc thao tc mong mun.
130
Ph lc 3:
131
/*--------------------------------------------------*/
HBYTE pLine = ((HBYTE)::FindDIBBits((LPSTR)pDIB)) +
wBytes*(pDIBbiHeight-1);
WORD sizeBuff = 10240,
// 10 KB
lpRGB[0].rgbReserved = lpRGB[1].rgbReserved = 0;
} else // 8 bit image, read LUT from file
{
#ifdef _WIN32
_llseek(hf, -768, FILE_END);
_lread(hf, (LPVOID)pBuffers, 768); // Read
#else
#endif// _WIN32
CString s;
for (i = 0; i < 256; i++) // Convert to RGBQUAD
{
RGBRoad[i].rgbRed = lpRGB[i].rgbRed = pBuffers[i*3];
RGBRoad[i].rgbGreen = lpRGB[i].rgbGreen = pBuffers[i*3+1];
RGBRoad[i].rgbBlue = lpRGB[i].rgbBlue = pBuffers[i*3+2];
RGBRoad[i].rgbReserved = lpRGB[i].rgbReserved = 0;
}
}
double TotalPixel = 1.0*nH*nW;
double Color_i;
int Count=0;
CString s;
for(i=1;i<255;++i)
{
if(HistogramC[i])
++Count;
Color_i = 1.0*HistogramC[i]/TotalPixel;
if(Color_i > NGUONG_NEN)
MauNen[i] = 1;
}
if(Count>=1)
{
int LENGHT = 150;
134
DWORD j=LENGHT;
DWORD i;
while(j<=nH)
{
for(i=1;i<=nW;++i)
if(i%LENGHT == 0)
PhatHienNen(i-LENGHT,j-LENGHT,i,j);
j += LENGHT;
}
}
MauNen[255]=1; // COI MAU TRANG LA 1 MAU NEN.
MauNen[0] = 0; // COI MAU DEN NHU LA 1 MAU CUA DUONG.
::GlobalUnlock(hDIB);
::GlobalUnlock(hBuffers);
::GlobalFree(hBuffers);
sNgaba = 0;
for(i=0;i<S;++i)
for(int j=0;j<S;++j)
dd[i][j] = 0;
return hDIB;
}
double m_TotalPoints;
VOID WINAPI PhatHienNen(int x1,int y1,int x2,int y2)
{
ZeroMemory(HistogramC,256*4);
int i,j;
BYTE c;
for( j=y1;j<=y2;++j)
for( i=x1;i<=x2;++i)
{
135
c = getPoint(i,j);
++HistogramC[c];
}
m_TotalPoints = (x2-x1)*(y2-y1);
for(i=1;i<256;++i)
if(!MauNen[i] && 1.0*HistogramC[i]/m_TotalPoints >
NGUONG_NEN)
MauNen[i] = TRUE;
PhatHienNen(x1,y1,(x1+x2)/2,(y1+y2)/2);
PhatHienNen((x1+x2)/2,y1,x2,(y1+y2)/2);
PhatHienNen(x1,(y1+y2)/2,(x1+x2)/2,y2);
PhatHienNen((x1+x2)/2,(y1+y2)/2,x2,y2);
}
/*---------------------------------------------------------------------*/
HDIB WINAPI ReadPCXFile(LPCSTR fName)
{
#ifdef _WIN32
HFILE hf = _lopen(fName, OF_READ);
#else
#endif// _WIN32
if (!hf) return NULL;
::SetCursor(::LoadCursor(NULL, IDC_WAIT));
HDIB hDIB = ::ReadPCXFile(hf);
_lclose(hf);
::SetCursor(::LoadCursor(NULL, IDC_ARROW));
return hDIB;
}
/*---------------------------------------------------------------------*/
BOOL WINAPI ReadPCXHeader(HFILE hf, LPPCXHEADER pcxh)
{
136
pcxhpalette_info= 1;
for (int i = 0; i < 58; i++) pcxhfiller[i] = 0;
if (lpDIBbiBitCount == 1)
{// create LUT
pcxhcolormap[0] = pcxhcolormap[1] = pcxhcolormap[2] = 0;
pcxhcolormap[3] = pcxhcolormap[4] = pcxhcolormap[5] = 0;
}
}
/*---------------------------------------------------------------------*/
DWORD WINAPI CompressLine(HBYTE pDes, HBYTE pSource,
DWORD Bytes)
{
DWORD j = 0, iw = 0;
while ( j < Bytes )
{
BYTE Count = 1;
BYTE item = pSource[j];
while ((j < Bytes-1) && (item == pSource[j+1]) && (Count < 0xFF0xC0-1))
{
j++;
Count++;
}
if ((Count > 1)||(item >= 0xC0))
{
pDes[iw++] = Count + 0xC0;
pDes[iw++] = item;
}
else pDes[iw++] = item;
j++;
}
return iw;
}
138
{
LPRGBQUAD lpRGB = (LPRGBQUAD)(lpDIB + 1);
for (i = 0; i < 256; i++) // Convert to RGBQUAD
{
pBuffers[i*3] = lpRGB[i].rgbRed;
pBuffers[i*3+1]= lpRGB[i].rgbGreen;
pBuffers[i*3+2]= lpRGB[i].rgbBlue;
}
#ifdef _WIN32
BYTE b = 0x0C;
_lwrite(hf, (LPCSTR)&b, 1); // Write signature of palette
_lwrite(hf, (LPCSTR)pBuffers, 768); // Write palette
#else
#endif// _WIN32
}
::GlobalUnlock(hDIB);
::GlobalUnlock(hBuffers);
::GlobalFree(hBuffers);
return TRUE;
}
/*---------------------------------------------------------------------*/
BOOL WINAPI SavePCX(HDIB hDIB, LPCSTR fName)
{
HFILE hf = _lcreat(fName, 0); // Check the file could be created
if (!hf) return FALSE;
::SetCursor(::LoadCursor(NULL, IDC_WAIT));
#ifdef _WIN32
hf = _lopen(fName, OF_READWRITE);
#else
#endif// _WIN32
BOOL rs = ::SavePCX(hDIB, hf);
_lclose(hf);
140
::SetCursor(::LoadCursor(NULL, IDC_ARROW));
return rs;
}
// DestX
lpDCRecttop,
// DestY
RECTWIDTH(lpDCRect),
// nDestWidth
RECTHEIGHT(lpDCRect),
// nDestHeight
lpDIBRectleft,
// SrcX
141
// SrcY
0,
// nStartScan
(WORD)DIBHeight(lpDIBHdr),
// nNumScans
lpDIBBits,
// lpBits
(LPBITMAPINFO)lpDIBHdr,
// lpBitsInfo
DIB_RGB_COLORS);
// wUsage
else
bSuccess = ::StretchDIBits(hDC,
// hDC
lpDCRectleft,
// DestX
lpDCRecttop,
// DestY
RECTWIDTH(lpDCRect),
// nDestWidth
RECTHEIGHT(lpDCRect),
// nDestHeight
lpDIBRectleft,
// SrcX
lpDIBRecttop,
// SrcY
RECTWIDTH(lpDIBRect),
// wSrcWidth
RECTHEIGHT(lpDIBRect),
// wSrcHeight
lpDIBBits,
// lpBits
(LPBITMAPINFO)lpDIBHdr,
// lpBitsInfo
DIB_RGB_COLORS,
// wUsage
SRCCOPY);
// dwROP
///
::GlobalUnlock((HGLOBAL) hDIB);
/* Reselect old palette */
if (hOldPal) ::SelectPalette(hDC, hOldPal, TRUE);
return bSuccess;
}
/*---------------------------------------------------------------------*/
BOOL WINAPI CreateDIBPalette(HDIB hDIB, CPalette* pPal)
{
/* if handle to DIB is invalid, return FALSE */
if (!hDIB) return FALSE;
142
::GlobalUnlock((HGLOBAL) hLogPal);
::GlobalFree((HGLOBAL) hLogPal);
::GlobalUnlock((HGLOBAL) hDIB);
return bResult;
}
/*---------------------------------------------------------------------*/
LPSTR WINAPI FindDIBBits(LPSTR lpbi)
{
return (lpbi + *(LPDWORD)lpbi + ::PaletteSize(lpbi));
}
144
/*---------------------------------------------------------------------*/
DWORD WINAPI DIBWidth(LPSTR lpDIB)
{
return ((LPBITMAPINFOHEADER)lpDIB) biWidth;
}
/*---------------------------------------------------------------------*/
DWORD WINAPI DIBHeight(LPSTR lpDIB)
{
return ((LPBITMAPINFOHEADER)lpDIB) biHeight;
}
/*---------------------------------------------------------------------*/
WORD WINAPI PaletteSize(LPSTR lpbi)
{
return (WORD)(::DIBNumColors(lpbi) * sizeof(RGBQUAD));
}
/*---------------------------------------------------------------------*/
WORD WINAPI DIBNumColors(LPSTR lpbi)
{
if (((LPBITMAPINFOHEADER)lpbi) biClrUsed)
return (WORD)((LPBITMAPINFOHEADER)lpbi) biClrUsed;
/* Calculate the number of colors in the color table based on the number
of bits per pixel for the DIB.
*/
WORD wBitCount = ((LPBITMAPINFOHEADER)lpbi) biBitCount;
if (wBitCount <= 8) return (2 << wBitCount);
return 0;
}
/*-----------------------------------------------------------------*/
void WINAPI InitBitmapInfoHeader(LPBITMAPINFOHEADER lpbi,
DWORD dwWidth, DWORD dwHeight, int nBPP)
{
#ifdef _WIN32
145
= sizeof (BITMAPINFOHEADER);
lpbibiWidth
= dwWidth;
lpbibiHeight
= dwHeight;
lpbibiPlanes
= 1;
146
147
LPBITMAPINFOHEADER lpDIB
=(LPBITMAPINFOHEADER)::GlobalLock(hDIB);
HBYTE Image=((HBYTE)::FindDIBBits((LPSTR)lpDIB));
if(lpDIBbiBitCount<8)
{
AfxMessageBox("Khong xu ly anh den trang ");
return;
}
int c,id=0,Id[256];
WORD clr,min;
DWORD i,j,temp,maxhis=0,His[256];
biHeight=lpDIBbiHeight; biWidth =lpDIBbiWidth;
for(i=-1;++i<256;){ His[i]=0;Id[i]=i;}
for(i=-1;++i<360;)for(j=-1;++j<4500;)Hough[i][j]=0;
for(i=-1;++i<biHeight;) for(j=-1;++j<biWidth;)
{
Mark[i][j]=0;
c=GetPoint(Image,i,j);
if(His[c]==0)++id;
++His[c];
}
if(id>numclr)
{
for(i=-1;++i<255;) for(j=i;++j<256;)
if(His[i]<His[j])
{
id=Id[i];Id[i]=Id[j];Id[j]=id;
temp=His[i];His[i]=His[j];His[j]=temp;
}
for(i=-1;++i<256;)His[i]=0;
for(i=-1;++i<biHeight;) for(j=-1;++j<biWidth;)
{
148
min=256; c=GetPoint(Image,i,j);
for(int l=numclr;--l>=0;)
if(min>abs(Id[l]-c))
{
min=abs(Id[l]-c);clr=Id[l];
}
SetPoint(Image,i,j,clr);++His[clr];
}
}
for(i=-1;++i<256;)
if(His[i]>maxhis)
{
maxhis=His[i];Maunen=int(i);
}
if(dilation==1)
Dilation(hDIB);
::GlobalUnlock(hDIB);
}
/*===============================================
* Hm: Dilation(HDIB hDIB)
* Mc ch: Gin n phc v cho vic x l
*/
void WINAPI Dilation(HDIB hDIB)
{
int i,j;
BYTE c0,c1,c2,c3,c4;
LPBITMAPINFOHEADER
lpDIB=(LPBITMAPINFOHEADER)::GlobalLock(hDIB);
HBYTE Image= ((HBYTE)::FindDIBBits((LPSTR)lpDIB));
HBYTE Image1=((HBYTE)::FindDIBBits((LPSTR)lpDIB));
for(i=0;++i<lpDIBbiHeight;)
149
for(j=0;++j<lpDIBbiWidth;)
{
c0=GetPoint(Image,i,j);
c1=GetPoint(Image,i,j+1);
c2=GetPoint(Image,i,j-1);
c3=GetPoint(Image,i-1,j);
c4=GetPoint(Image,i+1,j);
if(c0!=c1&&c1!=Maunen&&c1==c2)
{
SetPoint(Image,i,j,c1);j++;
}
else if(c0!=c3&&c3!=Maunen&&c4==c3){ SetPoint(Image,i,j,c3);j+
+;}
}
::GlobalUnlock(hDIB);
}
/*===============================================
* Hm: HoughTransform(RectAngle Rec)
* Mc ch: Bin i Hough
*/
void WINAPI HoughTransform(RectAngle Rec)
{
double phi,x,y;
long i,j;
x=double(Rec.bot);
y=double(Rec.rig+Rec.lef)/2;
for(i=-1;++i<=360;)
{
phi=double(i)/2-90;
phi=double(phi*pi)/180;
j=int(x*cos(phi)+y*sin(phi)+0.5);
150
if(j>0)
++Hough[i][j];
}
}
/*===============================================
* Hm: DetectAnOject(HBYTE Image,DWORD x,DWORD y,BYTE
clr,DWORD lab,RectAngle &rec,DWORD &ny)
* Mc ch: Pht hin cc i tng phc v cho bins i Hough
*/
int DetectAnOject(HBYTE Image,DWORD x,DWORD y,BYTE
clr,DWORD lab,RectAngle &rec,DWORD &ny)
{
DWORD y0=y;ny=y;
int i,dir,newdir,savedir,prm=0,ch=0;
tagPoint moi,P[20001];
while(GetPoint(Image,x,y-1)==clr)
y=y-1;
if(Mark[x][y]>0)
{
Mark[x][y0]=Mark[x][y]; return(-1);
}
Mark[x][y]=lab;
moi.x=x;moi.y=y;
rec.top=x;rec.bot=x; rec.lef=y;rec.rig=y;
savedir=dir=Inverse(Image,x,y,4,clr);
if(dir==8) return(-1);
do
{
newdir=Next(Image,moi.x,moi.y,dir,clr);
moi.x=moi.x+ROW[newdir]; moi.y=moi.y+COL[newdir];
if(moi.x<rec.top) rec.top=moi.x;
if(moi.x>rec.bot) rec.bot=moi.x;
151
if(moi.y<rec.lef) rec.lef=moi.y;
if(moi.y>rec.rig) rec.rig=moi.y;
if(Mark[moi.x][moi.y]==0)
{
P[++prm]=moi; Mark[moi.x][moi.y]=lab;
if(moi.x==x&&moi.y>ny) ny=moi.y;
}
dir = ((((newdir+1)/2)*2)%8+2)%8;
} while(moi.x!=x||moi.y!=y||Inverse(Image,moi.x,moi.y,dir,clr)!
=savedir);
rec.prm=prm;
if(prm>=12&&rec.bot-rec.top<=50&&rec.rig-rec.lef<=50)
{
if(prm<80&&rec.rig-rec.lef<40&&rec.bot-rec.top<40)
for( i=0;++i<=prm;)
SetPoint(TempImage,P[i].x,P[i].y,10);
return(1);
}
if(prm>=600&&(rec.bot-rec.top)>=150&&(rec.rig-rec.lef)>=150)
{
for(DWORD j=y-1;++j<biWidth;)
if(GetPoint(Image,x,j)!=clr)
{
ny=j-1;break;
}
for(i=0;++i<=prm;)
{
SetPoint(Image,P[i].x,P[i].y,Maunen);
Mark[P[i].x][P[i].y]=0;
}
}
return(0);
152
}
/*===============================================
* Hm: DetectAndCorrect(HDIB hDIB,int numclr,int dilation)
* Mc ch: Pht hin v hiu chnh gc nghing
*/
HDIB WINAPI DetectAndCorrect(HDIB hDIB,int numclr,int dilation)
{
HBYTE Image;
DWORD val,i,j,l,prm,wid,hei,nexty,id=0,label=0;
double goc; tagPoint al; RectAngle rec;
HDIB hDIB1=CopyImage(hDIB);
PreProcessing(hDIB,numclr,dilation);TempDIB=::Taoanh(hDIB);
LPBITMAPINFOHEADER lpDIB
=(LPBITMAPINFOHEADER)::GlobalLock(hDIB);
LPBITMAPINFOHEADER lpDIB1
=(LPBITMAPINFOHEADER)::GlobalLock(TempDIB);
Image =((HBYTE)::FindDIBBits((LPSTR)lpDIB));
TempImage =Image;
for(i=-1;++i<biHeight;) for(j=-1;++j<biWidth;)
if(Inverse(Image,i,j,4,GetPoint(Image,i,j))==8)
SetPoint(Image,i,j,Maunen);
153
for(i=-1;++i<biHeight;) for(j=-1;++j<biWidth;)
{
if(Mark[i][j]==0&&(c=GetPoint(Image,i,j))!=Maunen)
{
val=DetectAnArea(Image,i,j,c,++label,rec,nexty);
if(val>=0) j=nexty;
if(val==1) Rec[++id]=rec;
}
else if(Mark[i][j]>0)
{
for(l=biWidth;--l>=j;)
if(Mark[i][l]==Mark[i][j])
{
j=l;break;
}
}
}
AverageComponents(Rec,id);al.x=biHeight;al.y=biWidth;
for(i=0;++i<=id;)
{
prm=Rec[i].prm;wid=Rec[i].rig-Rec[i].lef; hei=Rec[i].bot-Rec[i].top;
if(prm<10*Cvavr&&wid<5*Widthavr&&hei<5*Heightavr)
HoughTransform(Rec[i]);
}
SkewEstimation(goc);
if(goc!=0)
{
if(goc>0&&goc<180)TempDIB=Rote(hDIB1,goc);
else if(goc<180) TempDIB=NegativeRote(hDIB1,goc);
biHeight=lpDIB1biHeight;biWidth =lpDIB1biWidth;
for(i=-1;++i<biHeight;) for(j=-1;++j<biWidth;)
154
if(GetPoint(TempImage,i,j)!=Maunen)
{
al.x=i;i=biHeight;break;
}
for(j=-1;++j<biWidth;) for(i=-1;++i<biHeight;)
if(GetPoint(TempImage,i,j)!=Maunen)
{
al.y=j;j=biWidth;break;
}
if(goc!=0)
TempDIB=CorrectAlignment(TempDIB,al);
::GlobalUnlock(hDIB);::GlobalUnlock(TempDIB);
return(TempDIB);
}
::GlobalUnlock(hDIB);
::GlobalUnlock(TempDIB);
return(hDIB);
}
/*===============================================
* Hm: SkewEstimation(double &goc)
* Mc ch: c lng gc nghing
*/
void WINAPI SkewEstimation(double &goc)
{
double angle;
DWORD max=0,max1=0,total=0,i,j;
DWORD Dis=long(sqrt(biWidth*biWidth+biHeight*biHeight));
if(Dis>=65535)
Msg(" Vuot qua chi so mang Hough");
for(i=-1;++i<360;)
155
for(j=-1;++j<=Dis;)
if(Hough[i][j]>max)
max=Hough[i][j];
for(i=-1;++i<360;)
{
total=0;
for(j=-1;++j<=Dis;)
if(Hough[i][j]>max/2)
total+=Hough[i][j];
if(total>max1)
{
max1=total;angle=double(i)/2-90;
}
}
goc=double(angle*pi/180);
}
/*===============================================
* Hm: AverageComponents(RectAngle Rec[15000],int id)
* Mc ch: Tnh ton cc i tng c kch thc trung bnh
*/
void WINAPI AverageComponents(RectAngle Rec[15000],int id)
{
DWORD i,label=0, Prm[3401],Hei[3401],Wid[3401];
for(i=-1;++i<=3000;)
{
Prm[i]=0;Hei[i]=0;Wid[i]=0;
}
for(i=-1;++i<=id;)
{
if(Rec[i].prm<=400)
++Prm[Rec[i].prm];
156
if(Rec[i].rig-Rec[i].lef<=400)
++Wid[Rec[i].rig-Rec[i].lef];
if(Rec[i].bot-Rec[i].top<=400)
++Hei[Rec[i].bot-Rec[i].top];
}
Cvavr=Averaging(Prm,16,400);
Widthavr=Averaging(Wid,8,100);
Heightavr=Averaging(Hei,8,100);
}
/*===============================================
* Hm: Averaging(DWORD Av[400],WORD bn,WORD id)
* Mc ch: Phc v cho vic tnh ton cc i tng c kch thc trung
bnh
*/
WORD WINAPI Averaging(DWORD Av[400],WORD bn,WORD id)
{
if(bn%2!=0)
{
Msg("ib%2!=0");
return(0);
}
WORD i=0,j=0,a,b,dx;
DWORD max=0,max1=0,max2=0,His[201];
for(i=-1;++i<=200;)
His[i]=0;
for(i=-1;++i<=id;)
His[i/bn]+=Av[i];
for(i=-1;++i<=id/bn;)
if(His[i]>max){ max=His[i];dx=i; }
a=dx*bn;b=a+bn;
while(1)
157
{
max1=0;max2=0;
for(i=a;i<a+bn/2;++i)
max1+=Av[i];
for(i=a+bn/2;i<b;++i)
max2+=Av[i];
if(max1>max2)
b=a+bn/2;
else
a=a+bn/2;
bn=bn/2;
if(bn==2)
return(int(b));
}
}
158
[1]. Phm Vit Bnh (2007), Pht trin k thut d bin, pht hin bin v
ng dng, Lun n Tin s.
[2]. Phm Vit Bnh (2006), Mt s tnh cht ca php ton hnh thi v
ng dng trong pht hin bin, Tp ch Tin hc v iu khin hc,
Tp 22, s 2, 2006, 155-163.
[3]. Phm Vit Bnh, Cao L Mnh H, Nng Ton (2005), Mt cch
tip cn mi trong pht hin bin ca nh a cp xm, K yu Hi
tho Quc gia ln th 8 - Mt s vn chn lc ca Cng ngh
Thng tin v Truyn thng, Hi Phng 25-27/08 /2005, Nxb KH&KT,
H Ni 2006, 92-102.
[4]. Phm Vit Bnh, Ng Mnh Hng, Nng Ton (2005), Mt ci
tin thut ton d bin v ng dng trong lm mnh i tng, K
yu Hi tho Khoa hc Quc gia ln th 2 - nghin cu c bn v
ng dng Cng ngh Thng tin-FAIR05, TP H Ch Minh 2324/09/2005, Nxb KH&KT, H Ni 2006, 477-485.
[5]. Nng Ton, Phm Vn Dng, Phm Vit Bnh (2005), ng dng
chu tuyn trong pht hin gc nghing vn bn, K yu Hi tho
Quc gia ln th 7 - Mt s vn chn lc ca Cng ngh Thng tin
v Truyn thng, Nng 18-20/08 /2004, Nxb KH&KT, H Ni
2005, 432-441.
[6]. Nng Ton, Phm Vit Bnh (2004), Mt thut ton ct ch in
dnh mc t da vo chu tuyn, chuyn san Cc cng trnh nghin
cu v trin khai Cng ngh Thng tin v Vin thng, Tp ch Bu
chnh Vin thng & Cng ngh Thng tin, s 12 thng 8/2004, 50-56.
[7]. Lng Mnh B, Nguyn Thanh Thy (2002), Nhp Mn X l nh
s, Nxb Khoa hc v K thut, 2002.
[8]. Ng Quc To, Nng Ton (2001), Tch bng da trn tp cc
hnh ch nht ri rc, chuyn san Cc cng trnh nghin cu v trin
khai Cng ngh thng tin v vin thng, Tp ch Bu chnh Vin
thng, s 5 nm 2001, 73-79.
[9]. Nng Ton (2001), Nghin cu mt s phng php biu din
hnh dng v ng dng trong nhn dng nh, Lun n Tin s.
[10]. J.R.Paker (1997), Algorithms for Image processing and Computer
Vision. John Wiley & Sons, Inc.
159
160