Professional Documents
Culture Documents
GIO TRNH MN HC
X L NH
Ngi son : PGS. TS. NNG TON,
TS. PHM VIT BNH
LI NI U
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
4
Chng 1:
TNG QUAN V X L NH
nh
X L NH
Kt lun
Hnh 1.1. Qu trnh x l nh
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:
H quyt nh
Thu nhn nh
(Scanner,
Camera,Sensor)
Tin x l
Trch chn
c im
i snh rt
ra kt lun
Hu
x l
Lu tr
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
f(Pi)
Pi
nh thu nhn
nh mong mun
f ( Pi ) Pi '
i =1
min
i =1
i =1
10
cho min
=0
a
1
=0
b
1
=0
c
1
n
n
n
n
2
'
+
+
=
a
x
b
x
y
c
x
1 i 1 i i 1 i x i x i
i =1
i =1
i =1
i =1
n
n
n
n
2
'
a
x
y
+
b
y
+
c
y
=
1 i i 1 i 1 i y i x i
i =1
i =1
i =1
i =1
n
n
n
'
a1 x i + b1 y i + nc1 = x i
i =1
i =1
i =1
11
12
(0,0,0)
(1,0,0)
Red
(0,1,0) green
14
Cyan
Yellow
Red
Black
Blue
Magenta
C 1 R
M = 1 G
Y 1 B
Hnh 1.6. S bin i t RGB thnh CMY
15
17
K= V*(1-S*(1-F))
//(R,G,B)=(V,K,M) R= V; C= K; B= M
If I=0 then
(R,G,B)=(V,K,M);
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.
19
Cb= (M1-B)/(M1-M2)
if R=M1 then
H= Cb-Cg
If G=M1 then
H= 2+Cr-Cb
If B=M1 then
H= 4+Cg-Cr
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
21
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
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
}
22
Dng tn hiu nh
1
l tn s ly mu theo trc x.
x
- Gi fy =
1
l tn s ly mu theo trc y.
y
23
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, 255]
+ To nh 224 th L=224, f(m, n) = g [0, 2 24 1]
phn gii.
Vic la chn phn gii thch hp tu thuc vo nhu cu s dng
v c trng ca mi nh c th, trn c s cc nh thng c biu
din theo 2 m hnh c bn
1.2.3.1. M hnh Raster
y l cch biu din nh thng dng nht hin nay, nh c biu
din di dng ma trn cc im (im nh). Thng thu nhn qua cc
thit b nh camera, scanner. Tu theo yu cu thc th m mi im nh
c biu din qua 1 hay nhiu bt
M hnh Raster thun li cho hin th v in n. Ngy nay cng ngh
phn cng cung cp nhng thit b thu nhn nh Raster ph hp vi tc
nhanh v cht lng cao cho c u vo v u ra. Mt thun li cho vic
hin th trong mi trng Windows l Microsoft a ra khun dng nh
DIB (Device Independent Bitmap) lm trung gian. Hnh 1.4 th hnh quy
trnh chung hin th nh Raster thng qua DIB.
24
BMP
PCC
..
.
DIB
Ca s
Thay i
Vecter
ha
VECTOR
Raster
ha
RASTER
25
Chng 2:
I=
2
0
2
1
0
0
0
1
2
1
4
7
0
1
1
h(g)
26
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
27
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 =
mn
~ s im nh trung bnh ca mi mc xm
new _ level
ca nh cn bng
g
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
28
0
1
Ikq = 3
2
1
0
1
0
2
1
2
1
2
2
3
0
3
2
0
1
Ch : nh sau khi thc hin cn bng cha chc l cn bng "l tng
"
I ~ kch thc m n
G ~ l s mc xm ca nh k c khuyt thiu
t(g) ~ s im nh c mc xm g
1 g
m( g ) =
i.h(i)
t ( g ) i =0
~ mmen qun tnh TB c mc xm g
Hm f: 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
ih(i)
m(g)
f(g)
i =0
15
15
1.35
20
0,25
1.66
29
24
13
0,54
1.54
27
22
0,81
1.10
29
30
1,03
0.49
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)
30
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)
i f 1 ( q )
h(g) f(g)
0
Histogram ca nh mi thua c bng cch chng hnh v tnh gi
tr theo cc q (= f(g)) theo cng thc tnh trn. Kt qu cui thu c sau
php quay gc 90 thun chiu kim ng h.
31
m 1
I T ( x, y ) =
i =0
m 1
Hoc
I T ( x, y ) =
i =0
n 1
I (x + i, y + j ) * T (i, j )
(2.1)
j =0
n 1
I (x i, y j )* T (i, j )
(2.2)
j =0
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
3
6
8
9
7
12
10
4
*
*
IT= 6
3
*
6
4
*
6
2
*
12
6
*
12
6
*
*
*
*
*
7
*
10
IT= *
*
*
12
12
6
4
12
6
7
6
3
6
6
4
9
6
2
* 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
- Mu:
T1 =
1
1
1
1
1
1
1
1
1
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
65
58
45
34
46
35
*
*
*
*
I T1 = 29
*
*
27
*
*
35
*
*
35
*
*
*
*
*
*
*
*
I=
-1
4
-1
0
-1
0
*
*
*
*
*
*
*
*
*
*
*
*
33
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:
n
+ Nu n l x + 1
2
n
x
x
+ Nu n chn: hoc + 1
2
2
* Mnh 2.1
n
xx
i =1
Chng minh
+ Xt trng hp n chn
t M =
n
2
Ta c:
n
i =1
i =1
i =1
x xi = x x i + x x M + i
= ( x xi + x M +i x ) x M + i xi
M
i =1
i =1
= [( x M +1 x M ) + ( x M xi )]
i =1
i =1
i =1
= 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
34
xx
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)
+ Bc 2: Gn gi tr
I ( P)
I ( P) =
Med ( P )
I ( P) Med ( 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
2
4
2
2
1
2
1
1
Ikq = 4
2
1
2
1
Gi tr 16, sau php lc c gi tr 2, cc gi tr cn li khng thay i
gi tr.
35
* Mnh 2.2
2
(x x )
i
i =1
min ti AV ({xn })
Chng minh:
t: ( x ) =
(x x )
i =1
Ta c:
n
( x ) = 2 ( x x i )
i =1
' ( x) = 0
n
(x xi ) = 0
i =1
1 n
x = xi = AV ({xi })
n i =1
''
Mt khc, ( x) = 2n > 0
min ti x = AV ({xi })
K thut lc trung bnh
Gi s ta c nh I, im nh P, ca s W(P) v ngng . Khi k
thut lc trung bnh ph thuc khng gian bao gm cc bc c bn sau:
+ Bc 1: Tm trung bnh
{I(q)| q W(P)} AV(P)
36
+ Bc 2: Gn gi tr
I ( P) AV ( P)
I ( P)
I ( P) =
AV ( P)
Nguoclai
V d:
1
4
4
2
I=
2
16
2
1
3
2
1
2
W(3 3); = 2
1
2
3
4
3
2
2
1
Ikq = 4
2
1
2
Gi tr 16 sau php lc
nguyn sau php lc.
2
1
1
1
2
1
1
1
trung bnh c gi tr 3, cc gi tr cn li gi
I ( P)
I ( P) =
AVk ( 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; k = 3
37
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
0
x
x
x
x
0
x
x
0
x
x
x
0
0 B =
0
0
38
x
0
XB=
0
0
x
x
x
x
x
x
x
x
x
x
x
x
x
0
v XB =
x
x
0
0
0
0
0
x
x
0
0
0
0
x
0
x
0
0
0
0
0
0
OPEN(X,B) = (XB) B = 0
0
x
x
x
x
0
CLOSE(X,B) = (X B) B = 0
x
x
x
x
x
0
X B X B B
X B X B
(ii) B B'
X B X B' X
X B X B
X
39
Chng minh:
(i) X B =
xX
= X ' B
xX '
X B = {x / Bx X } {x / Bx X '} = X B
(ii) X B =
xX
B' x = 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)
40
Mt khc,
x (X B) (X B)
Suy ra, x X B
Bx X
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
Bx Y
Bx X Y
x ( X Y) B
(X Y) B (X B) (Y B)
(2.8)
41
Chng minh:
(i) (X B) B' = X (B' B)
Ta c, (X B) B' = ( B x ) B'
xX
(B
B' ) =
xX
(B B )
'
xX
= X (B' B)
(i) (X B) B' = X (B B')
Trc ht ta i chng minh: B x' X B ( B ' B) x X
Tht vy, do B x' X B nn y B x' yX B
By X
yBx'
( B ' B) x X
Mt khc, ( B ' B ) x X ( B x' B) X
yBx'
y B x' ta c By X
hay y B x' ta c y X B
Do , B x' X B
Ta c, (X B) B' = {x / B x X } B'
= {x/ B x' X B}
= {x/ ( B ' B) x X} (do chng minh trn)
= X (B B') .
42
Chng minh:
Ta c: x X Bx X B
(V X B =
xX
x (X B) B
(X B) B X
(2.9)
Mt khc,
y (X B) B, suy ra:
x X B sao cho y Bx
(V (X
B) B =
xXB
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).
43
Chng 3:
44
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 f ( x, y + 1) f ( x, y )
y
v hng y l B=
1
Chng hn:
0
0
I=
0
0
0
3
3
3
0
3
3
3
0
3
3
3
3
3
*
0
0
*
0
0
*
* ; I B= 0
*
0
*
*
0
0
*
0
0
*
*
*
*
Ta c,
IA=
45
I A + I B= 3
3
*
0
*
0
*
*
*
I=
I Hx =
0
5
5
5
0
0
0
5
5
5
0
0
0
0
0
0
0
0
*
*
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
-10 -10
-15 -15
*
*
*
*
-10 -10
-5 -5
*
*
*
*
*
*
*
*
*
*
*
*
46
15 15 10 5
0
0
0
0
-15 -15 -10 -5
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
5
0
-3
5
5
-3
H4 =
-3
-3
-3
-3
0
-3
5
5
5
47
-3
H5 = -3
-3
-3
0
5
-3
5
5
-3
H7 = 5
5
-3
0
5
-3
-3
-3
H6 =
-3
-3
5
-3
0
5
-3
-3
5
H8 =
5
5
5
-3
0
-3
-3
-3
-3
+ Bc 2:
I H
i =1
2 f 2 f
f = 2 + 2
x
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)
Vy: 2 f= f(x+1,y) + f(x,y+1) - 4f(x,y) + f(x-1,y) + f(x,y-1)
48
Dn ti:
0 1 0
H = 1 4 1
0 1 0
0 1 0
1 1 1
1 2 1
H1 = 1 4 1 H 2 = 1 8 1 H 3 = 2 4 2
0 1 0
1 1 1
1 2 1
VD:
I=
4 5 4 2
9 12 9 4
12 15 12 5
9 12 9 4
4 5 4 2
Gi G l kt qu lc nhiu: G= I H
49
50
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.
51
Chu tuyn C
Chu tuyn C
Chu tuyn C
53
Begin
(bi+1,ri+1)= T(bi,ri); i:= i+1;
End;
iu kin dng
Cp nn-vng th n trng vi cp nn vng xut pht: (bn,rn)= (bo,ro)
* Xc nh cp nn vng xut pht
Cp nn vng xut pht c xc nh bng cch duyt nh ln lt
t trn xung di v t tri sang phi im em u tin gp c cng
vi im trng trc (theo hng 4) to nn cp nn vng xut pht.
* Xc nh cp nn vng tip theo
u vo: pt, dir
V d: (3, 2) 4
Point orient []= {(1,0);(1;-1);(0;-1);(-1;-1);(-1;0);(-1,1);(0,1);(1,1)};
//Hm tm hng c im en gn nht
BYTE GextNextDir(POINT pt, BYTE dir)
{
BYTE pdir= (dir + 7)%8;
do{
if(getpixel(pt. x+orient [pdir]. x,pt.y+orient [pdir]. y))==BLACK)
return pdir;
pdir = (pdir + 7) %8;
}while(pdir ! = dir);
return. ERR; //im c lp
}
//Gn gi tr cho bc tip theo
pdir = GetNextDir(pt, dir);
if(pdir==ERR) //Kim tra c l im c lp khng?
return. ERR; //im c lp
pt. x = pt. x + orient [pdir]. x;
pt. y = pt. y + orient [pdir]. y ;
55
im trng trc
Trng so vi en mi
x
56
57
N=5
a) Ma trn im nh trc khi lc
b) Ma trn im nh sau khi lc
Hnh 3.4. Ma trn im nh trc v sau lc
58
Sobel Hx, Hnh 3.5c l nh bin qua lc Sobel Hy, Hnh 3.5d l nh bin
qua lc Kirsh, Hnh 3.5e l nh bin qua lc Laplace. Hnh 3.6 l cc nh
bin thu c khi s dng thut ton pht hin bin xut da vo trung
bnh cc b vi gi tr 1 khc nhau. Hnh 3.6a l nh bin thu c vi
1= 25, Hnh 3.6b l nh bin thu c vi 1= 250.
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.
59
60
CLOSE(X,B)= (XB)B
Xp x trn ca X (cha X)
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)
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
Bc 2: Tnh
( X B )
i
i =1
61
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
B3
B4
a) nh gc a cp xm
Hnh 3.8. Pht hin bin bi thut ton da vo php ton hnh thi
62
Chng 4:
a) nh gc
b) nh xng
Hnh 4.1. V d v nh v xng
63
bin v cu trc ca nh, gip cho qu trnh nhn dng hoc vect ho sau
ny.
Thut ton lm mnh l qu trnh lp duyt v kim tra tt c cc im
thuc i tng. Trong mi ln lp tt c cc im ca i tng s c
kim tra: nu nh chng tho mn iu kin xo no tu thuc vo mi
thut ton th n s b xo i. Qu trnh c lp li cho n khi khng cn
im bin no c xo. i tng c bc dn lp bin cho n khi no
b thu mnh li ch cn cc im bin.
Cc thut ton lm mnh c phn loi da trn phng php x l
cc im l thut ton lm mnh song song v thut ton lm mnh tun t.
Thut ton lm mnh song song, l thut ton m trong cc im
c x l theo phng php song song, tc l c x l cng mt lc.
Gi tr ca mi im sau mt ln lp ch ph thuc vo gi tr ca cc lng
ging bn cnh (thng l 8-lng ging) m gi tr ca cc im ny
c xc nh trong ln lp trc . Trong my c nhiu b vi x l mi
vi x l s x l mt vng ca i tng, n c quyn c t cc im
vng khc nhng ch c ghi trn vng ca n x l.
Trong thut ton lm mnh tun t cc im thuc i tng s c
kim tra theo mt th t no (chng hn cc im c xt t tri qua
phi, t trn xung di). Gi tr ca im sau mi ln lp khng nhng
ph thuc vo gi tr ca cc lng ging bn cnh m cn ph thuc vo
cc im c xt trc trong chnh ln lp ang xt.
Cht lng ca thut ton lm mnh c nh gi theo cc tiu
chun c lit k di y nhng khng nht thit phi tho mn ng
thi tt c cc tiu chun.
Bo ton tnh lin thng ca i tng v phn b ca i tng
S tng hp gia xng v cu trc ca nh i tng
Bo ton cc thnh phn lin thng
Bo ton cc im ct
Xng ch gm cc im bin, cng mnh cng tt
Bn vng i vi nhiu
Xng cho php khi phc nh ban u ca i tng
Xng thu c chnh gia ng nt ca i tng c
lm mnh
Xng nhn c bt bin vi php quay.
64
(4.1)
(4.2)
(4.3)
(4.4)
(4.5)
(4.6)
(4.7)
a)
c)
b)
d)
67
3
1
CH(SR)
CH(SL)
11
9
10
2
5
68
p8
t
p6
v6
p9
v4
v3
v2
p7
p10
p4
Cc im thuc p1
Si-1
v1
p2
t
p5
p3
69
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).
70
Chng 5:
CC K THUT HU X L
h>
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;
72
index = i;
}
}
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;
di
P1
P4
dk
P5
i, j;
75
k
P4
P5
P1
Hnh 5.3. n gin ha ng cong vi thut ton Angles
76
{
if(Tinhgoc(pLINE[chot], pLINE[tg], pLINE[tg+1]) > )
chiso[tg] = FALSE;
else
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.
Bt bin
ng dng
ng trn
Ellipse
Hnh ch nht
Ellipse
Tam gic
T gic
Tam gic u
a gic
0 d m 1
d
,
n
78
Trong
d =
n 1
min
0 2 , R
kR U
j =0
+ a V( j + d ) mod m
, k=
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
y q dxdy .
Pg
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
f ( x , y ) x
U0
n 1
y q dxdy =
Pg
U3
sign( x y
i =0
O(0,0)
Un-
i +1
f ( x , y ) x
xi +1 yi )
y q dxdy
OU iU i + 1
Hnh 5.6. Phn tch min a gic thnh tng i s cc min tam gic
79
a ,b ,c R
1 n 2
( xi + yi2 + axi + byi + c) 2
n i =1
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 .
80
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).
81
28 3
3 .
V d 2:
Tn ti hai hnh vung
82
* 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
83
x.cos+y.sin=r
H
x
Hnh 5.9. ng thng Hough trong to cc
84
Chng 6:
NG DNG X L NH
85
Hough[][r1] = 4
x.cos+y.sin =
r1
y
x.cos+y.sin
r
x
Hnh 6.3. Bin i Hough pht hin gc nghing
88
91
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, 1i 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 <
94
95
96
97
1 Nu c k M Grid (i, j)
Intersec( c k ,M Grid (i,j) ) =
0 Nu ngc li
v lch ca mt vng ck so vi li MGrid c xc nh bi tng
lch ca vng so vi cc ca ca li MGrid:
nh
nv
Grid
N MGrid (i, j) =
(
)
Intersec
c
,
M
(
i
,
j
)
k
Grid
(
)
Segments
c
,
M
c k C M Grid
k
Grid
v ca vn bn so vi li c xc nh l tng lch ca vn
bn so vi tng ca li l:
nh
M Grid
nv
= NM (i, j)
i =1 j=1
Grid
98
S=
nv
N
i =1 j=1
'
MG Grid
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
- l lnh ca vn bn v mu so vi li (i,j)
Grid
*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
99
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/8
1/8
1/2
1/3
1/3
1/3
1/2
S=
4 *1 / 4 + 1 / 2 + 1 / 6 + 2 / 3 5
=
= 0,3125
4+4
16
100
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.
102
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.
( )
* Phn mm ot gii nht Sng to khoa hc k thut Vit Nam (gii VIFOTECH trc y) nm
1999.
103
A
End
Star
t
104
Tp
ng
M=0
a)
M=5
c)
b)
Hnh 5.13. V d v ng ct v mt ct
Na chu tuyn di
Ch trc khi d bin Ch sau khi d bin
Qu trnh tm cp im tht
im ang xt
Chu tuyn trong
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
Tng s P 1
Li
Li
106
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
a) Cm ch dnh
b) Cc cp im tht
tm c
107
i =1
109
Vng
cha
vn bn
(x12,y12)
(x21,y21)
i tng
hnh hc
nhdu
(x22,y22)
110
Bt bin
ng trn
Ellipse
Hnh ch nht
Tam gic u
Ellipse
Tam gic
T gic
a gic
Aphin
111
a)
b)
c)
d)
e)
f)
a) Tp hnh ch nht ban u, b) Dng li datrn tp cc hnh ch nht,
c) Hiu chnh li, d) Hiu chnh bng da trn li, e) Xc nh khuyt thiu
f) Sau khi b sung thm .
Hnh 6.20. Qu trnh hiu chnh bng t tp hnh ch nht
Trong,
ngoi
im
Ri nhau,
Ph nhau,
K
Hnh
ch
nht
Li
Ph
L
Hiu
chnh
Bng
113
Iwb(i,j).Green=255;
Iwb(i,j).Blue=255;
}
Iwb l nh en trng th hin vng khc nhau gia 2 khung hnh,
nhng im khc nhau s c mu trng, ngc li c mu en. Di y l
mt s hnh minh ha ca k thut tr nh lin k vi ngng c t l
20.
c) nh en trng Iwb
116
c) nh en trng Iwb
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:
117
118
d) nh Iwb lc nhiu
119
120
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:
+
126
/* bmfh */
bfType;
bfSize;
bfReserved1;
bfReserved2;
bfOffBits;
} BITMAPFILEHEADER;
typedef struct tagBITMAPINFOHEADER {
DWORD
LONG
LONG
WORD
WORD
DWORD
DWORD
LONG
LONG
DWORD
DWORD
/* bmih */
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
127
biClrUsed
biClrImportant
rgbBlue;
BYTE
rgbGreen;
BYTE
rgbRed;
BYTE
rgbReserved;
/* rgbq */
} 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:
pImage = ((HBYTE)::FindDIBBits((LPSTR)pDIB));
/*--------------------------------------------------*/
HBYTE pLine = ((HBYTE)::FindDIBBits((LPSTR)pDIB)) +
wBytes*(pDIBbiHeight-1);
WORD sizeBuff = 10240,
// 10 KB
132
d+=cr;
#else
#endif// _WIN32
if (!tmp) {tmp = 1; cr--;}
}
static BYTE b;
if ((b = pBuffers[index++]) >= 0xC0) // Get first byte
{
b &= 0x3F;
if (total < wBytes)
#ifdef _WIN32
{
L = min((int)b, (int)(wBytes-total));
memset((void*)(pLine+total),(Color=pBuffers[index++]),L);
HistogramC[Color] += L;
}
#else
#endif// _WIN32
total += (WORD)b;
}
else if (total < wBytes)
{
pLine[total++] = b;
++HistogramC[b];
}
else total++;
}
pLine -= (LONG)wBytes;
}
LPRGBQUAD lpRGB = (LPRGBQUAD)(pDIB + 1);
if (pDIBbiBitCount == 1) // Create the Look Up Table
133
{
lpRGB[0].rgbRed = lpRGB[0].rgbGreen = lpRGB[0].rgbBlue = 0; //
Black
lpRGB[1].rgbRed = lpRGB[1].rgbGreen = lpRGB[1].rgbBlue = 255;
// White
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;
134
{
ZeroMemory(HistogramC,256*4);
int i,j;
BYTE c;
for( j=y1;j<=y2;++j)
for( i=x1;i<=x2;++i)
{
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);
136
_lclose(hf);
::SetCursor(::LoadCursor(NULL, IDC_ARROW));
return hDIB;
}
/*---------------------------------------------------------------------*/
BOOL WINAPI ReadPCXHeader(HFILE hf, LPPCXHEADER pcxh)
{
// Read the file's header
#ifdef _WIN32
if (_lread(hf, (LPVOID)pcxh, 128) != 128) return FALSE;
#else
#endif// _WIN32
if ( pcxhmanufacture != 0x0A ) // Check manufacture of the PCX file
return FALSE;
// Only work with B/W and 8 bit image
if ((pcxhbitsperpixel*pcxhnplanes != 1) &&
(pcxhbitsperpixel*pcxhnplanes != 8))
return FALSE;
if (pcxhencoding != 1) // Unknow how to decode
return FALSE;
return TRUE;
}
/*---------------------------------------------------------------------*/
VOID WINAPI CreatePCXHeader(LPPCXHEADER pcxh,
LPBITMAPINFOHEADER lpDIB)
{
pcxhmanufacture= 0x0A;// Signature
pcxhversion= (lpDIBbiBitCount == 1) ? 2 : 5;// PCX version
pcxhencoding= 0x01;// Run length
pcxhbitsperpixel = (char)lpDIBbiBitCount;
137
pcxhwindow.xmin = 0;
pcxhwindow.ymin= 0;
pcxhwindow.xmax= lpDIBbiWidth -1;
pcxhwindow.ymax= lpDIBbiHeight-1;
pcxhhres= (WORD)lpDIBbiXPelsPerMeter;
pcxhvres= (WORD)lpDIBbiYPelsPerMeter;
pcxhreserved= 0x00;
pcxhnplanes= 1;
pcxhbytesperline=
(WORD)WIDTHBYTES(lpDIBbiBitCount*lpDIBbiWidth);
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))
{
138
j++;
Count++;
}
if ((Count > 1)||(item >= 0xC0))
{
pDes[iw++] = Count + 0xC0;
pDes[iw++] = item;
}
else pDes[iw++] = item;
j++;
}
return iw;
}
139
WORDsizeBuff = 10240; // 10 KB
HGLOBAL hBuffers = ::GlobalAlloc(GMEM_MOVEABLE,
sizeBuff+64);
HBYTEpBuffers = (HBYTE)::GlobalLock(hBuffers);
///
for (DWORD i = 0; i < (DWORD)lpDIBbiHeight; i++)
{
// Write line
#ifdef _WIN32
_lwrite(hf, (LPCSTR)pBuffers, (UINT)::CompressLine(pBuffers,
pLine, wBytes));
#else
#endif// _WIN32
pLine -= (LONG)wBytes;// Next line
}
if (lpDIBbiBitCount == 8)
{
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
}
140
::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);
::SetCursor(::LoadCursor(NULL, IDC_ARROW));
return rs;
}
// DestX
lpDCRecttop,
// DestY
RECTWIDTH(lpDCRect),
// nDestWidth
RECTHEIGHT(lpDCRect),
// nDestHeight
lpDIBRectleft,
// SrcX
// 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
142
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;
LPSTR lpbi = (LPSTR)::GlobalLock((HGLOBAL)hDIB);
/* get pointer to BITMAPINFO */
LPBITMAPINFO lpbmi = (LPBITMAPINFO)lpbi;
/* get the number of colors in the DIB */
WORD wNumColors = ::DIBNumColors(lpbi);
if (!wNumColors)
{
::GlobalUnlock((HGLOBAL)hDIB);
return FALSE;
}
/* allocate memory block for logical palette */
143
144
145
/*---------------------------------------------------------------------*/
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)
{
146
#ifdef _WIN32
memset((void*)lpbi, 0, sizeof (BITMAPINFOHEADER));
#else
#endif// _WIN32
lpbibiSize
lpbibiWidth
= sizeof (BITMAPINFOHEADER);
= dwWidth;
lpbibiHeight = dwHeight;
lpbibiPlanes = 1;
if (nBPP <= 1) lpbibiBitCount = 1;
else if(nBPP <= 4)lpbibiBitCount = 4;
else if(nBPP <= 8)lpbibiBitCount = 8;
else lpbibiBitCount = 24;
lpbibiSizeImage =
((DWORD)WIDTHBYTES(dwWidth*lpbibiBitCount))*dwHeight;
if(lpbibiBitCount == 1)
M("Anh 1 bit khong xet !");
CString s;
s.Format("W = %ld H = %ld bit =
%d",dwWidth,dwHeight,lpbibiBitCount);
}
newx=x+ROW[(dem+dir)%8];
newy=y+COL[(dem+dir)%8];
if(newx>=0 && newx<biHeight && newy>=0 && newy<biWidth)
if(GetPoint(Image,newx,newy)==c0) return((dir+dem)%8);
--dem;
}
return(-1);
}
/*===============================================
* Hm: Inverse(HBYTE Image,DWORD x,DWORD y,int dir ,BYTE c0)
* Mc ch:Tm im en k tip ngc chiu ng h trong d bin
*/
int WINAPI Inverse(HBYTE Image, DWORD x, DWORD y, int dir,
BYTE c0)
{
DWORD newx,newy,dem=0;
while(dem<8)
{
newx=x+ROW[(dem+dir)%8];
newy=y+COL[(dem+dir)%8];
if(newx>=0 && newx<biHeight && newy>=0 && newy<biWidth)
if(GetPoint(Image,newx,newy)==c0) return((dem+dir-1)%8);
++dem;
}
return(8);
}
/*===============================================
* Hm: PreProcessing(HDIB hDIB,int numclr,int dilation)
* Mc ch: X l s b
148
*/
void WINAPI PreProcessing(HDIB hDIB,int numclr,int dilation)
{
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;
149
}
for(i=-1;++i<256;)His[i]=0;
for(i=-1;++i<biHeight;) for(j=-1;++j<biWidth;)
{
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;
150
LPBITMAPINFOHEADER
lpDIB=(LPBITMAPINFOHEADER)::GlobalLock(hDIB);
HBYTE Image= ((HBYTE)::FindDIBBits((LPSTR)lpDIB));
HBYTE Image1=((HBYTE)::FindDIBBits((LPSTR)lpDIB));
for(i=0;++i<lpDIBbiHeight;)
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;
151
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);
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;
152
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;
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)!=savedi
r);
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)
153
{
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);
}
/*===============================================
* 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)
154
SetPoint(Image,i,j,Maunen);
155
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;
156
for(i=-1;++i<biHeight;) for(j=-1;++j<biWidth;)
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");
157
for(i=-1;++i<360;)
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;)
158
{
if(Rec[i].prm<=400)
++Prm[Rec[i].prm];
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];
159
for(i=-1;++i<=id/bn;)
if(His[i]>max){ max=His[i];dx=i; }
a=dx*bn;b=a+bn;
while(1)
{
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));
}
}
160
[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.
161
162