Thông tin tài liệu
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
Lêi c¶m ¬n !
Em xin bµy tá lßng biÕt ¬n s©u s¾c nhÊt tíi PGS. TS. Ng« Quèc T¹o,
thÇy ®· tËn t×nh híng dÉn vµ gióp ®ì em rÊt nhiÒu trong qu¸ tr×nh thùc tËp
vµ t×m hiÓu nghiªn cøu ®Ò tµi ®îc giao ®Ó em cã thÓ hoµn thµnh tèt b¸o c¸o
tèt nghiÖp cña m×nh.
Em xin ch©n thµnh c¶m ¬n sù d¹y b¶o cña c¸c thÇy gi¸o, c« gi¸o Khoa
C«ng NghÖ Th«ng Tin - Trêng §¹i häc D©n LËp H¶i Phßng ®· trang bÞ cho
em nh÷ng kiÕn thøc c¬ b¶n ®Ó em cã thÓ hoµn thµnh b¸o c¸o tèt nghiÖp vÒ
®Ò tµi ®îc giao.
Trong qu¸ tr×nh nghiªn cøu ®Ò tµi mÆc dï ®· ®îc c¸c thÇy c« gi¸o híng
dÉn tËn t×nh nhng do nhiÒu nguyªn nh©n chñ quan vµ kh¸ch quan nªn ®Ò tµi
kh«ng tr¸nh khái sai sãt .Em rÊt mong ®îc c¸c thÇy c« gi¸o chØ dÉn ,®ãng
gãp nh÷ng ý kiÕn quý b¸u gióp em hoµn thiÖn h¬n b¸o c¸o tèt nghiÖp , ph¸t
triÓn vµ më réng ®Ò tµi ®ùoc giao .
Em xin ch©n thµnh c¸m ¬n !
H¶i Phßng, ngµy
th¸ng
n¨m 2007
Sinh viªn
T¹ Minh Th¾ng
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 1
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
Môc lôc
Më ®Çu
Ngµy nay, cïng víi sù ph¸t triÓn kh«ng ngõng cña khoa häc vµ c«ng
nghÖ th× m¸y tÝnh ®ãng vai trß ngµy cµng quan träng vµ kh«ng thÓ thiÕu
trong cuéc sèng x· héi loµi ngêi. ViÖc trao ®æi th«ng tin cña con ngêi trong
tÊt c¶ c¸c ngµnh, c¸c lÜnh vùc cña ®êi sèng ngµy cµng trë nªn cÇn thiÕt cïng
víi sù ra ®êi vµ ph¸t triÓn cña m¹ng Internet.
Xö lý ¶nh lµ mét ngµnh khoa häc cßn t¬ng ®èi míi mÎ so víi nhiÒu
ngµnh khoa häc kh¸c nhng nã ®ang ®îc tËp trung nghiªn cøu vµ ph¸t triÓn v×
nh÷ng øng dông thùc tiÔn cña nã trong nhiÒu ngµnh , lÜnh vùc kh¸c nhau.
Trong ®ã “NÐn ¶nh” lµ mét phÇn cña xö lý ¶nh cã øng dông to lín trong
truyÒn th«ng vµ trong lu tr÷, ®· cã rÊt nhiÒu ph¬ng ph¸p nÐn ¶nh ®îc ra ®êi
vµ kh«ng ngõng ®îc c¶i tiÕn ®Ó ngµy cµng hoµn thiÖn ®em l¹i hiÖu qu¶ nÐn
cao vµ cho chÊt lîng ¶nh tèt nhÊt. Trong ®å ¸n tèt nghiÖp “T×M hiÓu mét
sè ph¬ng ph¸p nÐn ¶nh” ®îc sù híng dÉn cña PGS .TS . Ng« Quèc
T¹o em ®· ®i s©u nghiªn cøu mét sè ph¬ng ph¸p nÐn ¶nh phæ biÕn nh : m·
lo¹t dµi RLE, HUFFMAN, LZW, JPEG vµ ph¬ng ph¸p nÐn ¶nh JPEG2000
dùa trªn biÕn ®æi Wavelet víi nh÷ng ®Æc tÝnh vît tréi so víi c¸c chuÈn nÐn
tríc ®ã ®em l¹i hiÖu qu¶ nÐn cao , cho ¶nh nÐn chÊt lîng tèt vµ nhiÒu nh÷ng
u ®iÓm kh¸c mµ c¸c chuÈn nÐn tríc ®ã kh«ng thÓ cã.
Néi dung ®å ¸n tèt nghiÖp bao gåm c¸c phÇn chÝnh nh : ch¬ng mét giíi
thiÖu tæng quan vÒ xö lý ¶nh, môc ®Ých ch¬ng nµy lµ giíi thiÖu mét sè kh¸i
niÖm cÇn biÕt vÒ ¶nh sè vµ xö lý ¶nh sè. Ch¬ng hai sÏ giíi thiÖu mét sè ph¬ng ph¸p nÐn ¶nh vµ c¸ch ph©n lo¹i c¸c ph¬ng ph¸p nÐn ¶nh. Ch¬ng ba sÏ
giíi thiÖu vÒ ch¬ng tr×nh thö nghiÖm vµ kÕt qu¶ ®¹t ®ù¬c cña ch¬ng tr×nh.
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 2
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
Cuèi cïng sÏ lµ phÇn kÕt luËn ®¸nh gi¸ kÕt qu¶ nghiªn cøu thu ®îc vµ híng
ph¸t triÓn cña ®Ò tµi.
CH¬ng I:
Giíi thiÖu tæng quan vÒ nÐn ¶nh
I.1.Giíi thiÖu vÒ ¶nh sè vµ xö lý ¶nh sè:
I.1.1.¶nh sè:
¶nh cã thÓ biÓu diÔn díi d¹ng tÝn hiÖu t¬ng tù hoÆc tÝn hiÖu sè. Trong
biÓu diÔn sè cña c¸c ¶nh ®a møc x¸m, mét ¶nh ®îc biÓu diÔn díi d¹ng mét
ma trËn hai chiÒu. Mçi phÇn tö cña ma trËn biÓu diÔn cho møc x¸m hay cêng
®é cña ¶nh t¹i vÞ trÝ ®ã. Mçi phÇn tö trong ma trËn ®îc gäi lµ mét phÇn tö
¶nh, th«ng thêng kÝ hiÖu lµ PEL (Picture Element) hoÆc lµ ®iÓm ¶nh (Pixel).
- Víi ¶nh ®a cÊp x¸m: NÕu dïng 8 bit (1 byte) ®Ó biÓu diÔn møc x¸m, th×
sè c¸c møc x¸m cã thÓ biÓu diÔn ®îc lµ 28 hay 256. Mçi møc x¸m ®îc biÓu
diÔn díi d¹ng lµ mét sè nguyªn n»m trong kho¶ng tõ 0 ®Õn 255, víi møc 0
biÓu diÔn cho møc cêng ®é ®en nhÊt vµ 255 biÓu diÔn cho møc cêng ®é s¸ng
nhÊt.
- Víi ¶nh mµu: C¸ch biÓu diÔn còng t¬ng tù nh víi ¶nh ®en tr¾ng, chØ kh¸c
lµ c¸c sè t¹i mçi phÇn tö cña ma trËn biÓu diÔn cho ba mµu riªng rÏ gåm: ®á
(red), lôc (green) vµ lam (blue). §Ó biÓu diÔn cho mét ®iÓm ¶nh mµu cÇn 24
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 3
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
bit, 24 bit nµy ®îc chia thµnh ba kho¶ng 8 bit. Mçi kho¶ng nµy biÓu diÔn
cho cêng ®é s¸ng cña mét trong c¸c mµu chÝnh.
Pixel
or PEL
§é s¸ng trung b×nh trong mçi h×nh
ch÷ nhËt = gi¸ trÞ mét ®iÓm ¶nh.
H×nh 1.1 BiÓu diÔn cña mét møc x¸m cña ¶nh sè.
I.1.2.Xö lý ¶nh sè:
Xö lý ¶nh lµ mét khoa häc mÆc dï cßn t¬ng ®èi míi so víi nhiÒu
ngµnh khoa häc kh¸c ,nhÊt lµ trªn quy m« c«ng nghiÖp. Xö lý ¶nh sè cã rÊt
nhiÒu øng dông nh lµm næi c¸c ¶nh trong y häc, kh«i phôc l¹i ¶nh do t¸c
®éng cña khÝ quyÓn trong thiªn v¨n häc, t¨ng cêng ®é ph©n gi¶i cña ¶nh
truyÒn h×nh mµ kh«ng cÇn thay ®æi cÊu tróc bªn trong cña hÖ thèng chuyÓn
t¶i, nÐn ¶nh trong khi truyÒn ®i xa hoÆc lu tr÷.
C¸c giai ®o¹n chÝnh trong xö lý ¶nh cã thÓ ®îc m« t¶ trong h×nh sau:
Lu tr÷
CAMERA
Thu nhËn
¶nh
Sè ho¸
Ph©n
tÝch ¶nh
NhËn d¹ng
dd¹ng¹ng
SENSOR
Lu tr÷
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
HÖ quyÕt
®Þnh
Trang : 4
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
I.2.Môc ®Ých vµ sù cÇn thiÕt cña “ nÐn ¶nh ” :
NÐn ¶nh lµ mét kü thuËt m· ho¸ c¸c ¶nh sè ho¸ nh»m gi¶m sè lîng c¸c
bit d÷ liÖu cÇn thiÕt ®Ó biÓu diÔn ¶nh. Môc ®Ých lµ gi¶m ®i nh÷ng chi phÝ
trong viÖc lu tr÷ ¶nh vµ chi phÝ thêi gian ®Ó truyÒn ¶nh ®i xa trong truyÒn
th«ng nhng vÉn ®¶m b¶o ®îc chÊt lîng cña ¶nh. NÐn ¶nh thùc hiÖn ®îc lµ do
mét thùc tÕ: th«ng tin trong bøc ¶nh kh«ng ph¶i lµ ngÉu nhiªn mµ cã trËt tù ,
tæ chøc.V× thÕ nÕu bãc t¸ch ®îc tÝnh trËt tù, cÊu tróc ®ã th× sÏ biÕt phÇn
th«ng tin nµo quan träng nhÊt trong bøc ¶nh ®Ó biÓu diÔn vµ truyÒn ®i víi sè
lîng Ýt bit h¬n so víi ¶nh gèc mµ vÉn ®¶m b¶o tÝnh ®Çy ®ñ cña th«ng tin.ë
bªn nhËn qu¸ tr×nh gi¶i m· sÏ tæ chøc, s¾p xÕp l¹i ®îc bøc ¶nh xÊp xØ gÇn
chÝnh x¸c so víi ¶nh gèc nhng vÉn tháa m·n chÊt lîng yªu cÇu. Díi ®©y lµ vÝ
dô vÒ lu tr÷ ¶nh sè vµ truyÒn ®i xa víi ®êng truyÒn 9600 baud (9600 bps) ®Ó
thÊy râ sù cÇn thiÕt cña viÖc nÐn ¶nh:
• ¶nh ®a cÊp x¸m hay ¶nh 256 mµu cã kÝch thíc 800 x 600, 8 bit/®iÓm
¶nh, cÇn 3.840.000 bit lu tr÷ vµ mÊt 6.67 phót ®Ó truyÒn.
• ¶nh mµu RGB (24 bit/®iÓm ¶nh ) cïng ®é ph©n gi¶i nh vËy cÇn h¬n 10
triÖu bit ®Ó lu tr÷ vµ 20 phót ®Ó truyÒn.
• Mét phim ©m b¶n cã kÝch thíc 24 × 36 mm (35 mm) chia b»ng c¸c
kho¶ng c¸ch nhau 12 µm, vµo kho¶ng 3000 × 2000 ®iÓm, 8 bit / pixel, yªu
cÇu 48 triÖu bit cho lu gi÷ ¶nh vµ 83 phót ®Ó truyÒn.
Qua vÝ dô trªn ta thÊy nhiÒu vÊn ®Ò trong viÖc lu tr÷ vµ truyÒn t¶i ¶nh sè
ho¸. NÐn ¶nh cã nhiÒu øng dông trong thùc tÕ nh : truyÒn c¸c v¨n b¶n ®å
ho¹ qua ®êng ®iÖn tho¹i (Fax), nÐn ¶nh trong y tÕ vµ truyÒn h×nh
c¸p….ChÝnh sù øng dông trong nhiÒu lÜnh vùc cña nÐn ¶nh cïng víi sù tiÕn
bé trong lÜnh vùc vi ®iÖn tö dÉn ®Õn sù ra ®êi c¸c chuÈn nÐn ¶nh.
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 5
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
NÐn ¶nh ®¹t ®îc b»ng c¸ch lo¹i bá c¸c phÇn d thõa trong ¶nh ®· ®îc sè
ho¸. D thõa cã thÓ lµ d thõa th«ng tin vÒ kh«ng gian, d thõa vÒ cÊp x¸m hay
d thõa vÒ thêi gian:
• D thõa th«ng tin vÒ kh«ng gian : trong mét bøc ¶nh lu«n tån t¹i sù t¬ng
quan gi÷a c¸c ®iÓm ¶nh c¹nh nhau.
• D thõa th«ng tin vÒ cÊp x¸m :lµ d thõa dùa vµo sù t¬ng quan gi÷a c¸c
mµu s¾c c¹nh nhau.
• D thõa th«ng tin vÒ thêi gian : Trong mét chuçi ¶nh video, tån t¹i sù t¬ng quan gi÷a c¸c ®iÓm ¶nh cña c¸c frame kh¸c nhau .
I.3.C¸c kh¸i niÖm c¬ b¶n:
• Pixel (picture element) : phÇn tö ¶nh
¶nh trong thùc tÕ lµ mét ¶nh liªn tôc vÒ kh«ng gian vµ vÒ gi¸ trÞ ®é s¸ng.
§Ó cã thÓ xö lý ¶nh b»ng m¸y tÝnh cÇn thiÕt ph¶i tiÕn hµnh sè ho¸ ¶nh. Nh
vËy mét ¶nh lµ mét tËp hîp c¸c pixel. Mçi pixel lµ gåm mét cÆp to¹ ®é x, y
vµ mµu. CÆp to¹ ®é x,y t¹o nªn ®é ph©n gi¶i (resolution). Mµn h×nh m¸y tÝnh
cã nhiÒu lo¹i víi ®é ph©n gi¶i kh¸c nhau: 320 x 200, 640x350, 800x600,
1024x768,…
• Møc x¸m (Graylevel)
Møc x¸m lµ kÕt qu¶ sù m· ho¸ t¬ng øng cña mçi cêng ®é s¸ng cña mçi
®iÓm ¶nh víi mét gi¸ trÞ sè – kÕt qu¶ cña qu¸ tr×nh lîng ho¸ .
• D÷ liÖu
Trong mét bµi to¸n, d÷ liÖu bao gåm mét tËp c¸c phÇn tö c¬ së mµ ta gäi
lµ d÷ liÖu nguyªn tö. Nã cã thÓ lµ mét ch÷ sè, mét ký tù, ... nhng còng cã thÓ
lµ mét con sè, mét tõ, ... ®iÒu ®ã phô thuéc vµo tõng bµi to¸n.
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 6
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
• NÐn d÷ liÖu
NÐn d÷ liÖu lµ qu¶ tr×nh gi¶m dung lîng th«ng tin “d thõa” trong d÷ liÖu
gèc vµ lµm cho lîng th«ng tin thu ®îc sau nÐn thêng nhá h¬n d÷ liÖu gèc rÊt
nhiÒu. Do vËy, tiÕt kiÖm ®îc bé nhí vµ gi¶m thêi gian trao ®æi d÷ liÖu trªn
m¹ng th«ng tin mµ l¹i cho phÐp chóng ta kh«i phôc l¹i d÷ liÖu ban ®Çu.
• Tû lÖ nÐn
Tû lÖ nÐn lµ mét trong c¸c ®Æc trng quan träng cña mäi ph¬ng ph¸p nÐn.
Tû lÖ nÐn ®îc ®Þnh nghÜa nh sau:
Tû lÖ nÐn = 1/r*%
víi r lµ tû sè nÐn ®îc ®Þnh nghÜa:
r = kÝch thíc d÷ liÖu gèc / kÝch thíc d÷ liÖu nÐn.
Nh vËy hiÖu suÊt nÐn = (1- tû lÖ nÐn)*100%.
§èi v¬i ¶nh tÜnh, kÝch thíc chÝnh lµ sè bit biÓu diÔn toµn bé bøc ¶nh.
§èi víi ¶nh video, kÝch thíc chÝnh lµ sè bit ®Ó biÓu diÔn mét khung h×nh
video (video frame).
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 7
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
Ch¬ng II:
C¸c ph¬ng ph¸p nÐn ¶nh
II.1.C¸ch ph©n lo¹i c¸c ph¬ng ph¸p nÐn ¶nh:
II.1.1.C¸ch ph©n lo¹i dùa vµo nguyªn lý nÐn:
NÐn b¶o toµn th«ng tin (losses compression): bao gåm c¸c ph¬ng ph¸p
nÐn mµ sau khi gi¶i nÐn sÏ thu ®ù¬c chÝnh x¸c d÷ liÖu gèc.Tuy nhiªn nÐn
b¶o toµn th«ng tin chØ ®¹t hiÖu qu¶ nhá so víi ph¬ng ph¸p nÐn kh«ng b¶o
toµn th«ng tin.
NÐn kh«ng b¶o toµn th«ng tin (lossy compression): bao gåm c¸c ph¬ng
ph¸p nÐn sau khi gi¶i nÐn sÏ kh«ng thu ®îc d÷ liÖu nh b¶n gèc. C¸c ph¬ng
ph¸p nµy ®îc gäi lµ “t©m lý thÞ gi¸c” ®ã lµ lîi dông tÝnh chÊt cña m¾t ngêi
chÊp nhËn mét sè vÆn xo¾n trong ¶nh khi kh«i phôc l¹i.Ph¬ng ph¸p nµy lu«n
®em l¹i hiÖu qu¶ cao do lo¹i bá ®i nh÷ng th«ng tin d thõa kh«ng cÇn thiÕt.
II.1.2.C¸ch ph©n lo¹i dùa vµo c¸ch thøc thùc hiÖn nÐn:
Ph¬ng ph¸p kh«ng gian (Spatial Data Compression ): c¸c ph¬ng ph¸p
nµy thùc hiÖn nÐn b»ng c¸ch t¸c ®éng trùc tiÕp lªn viÖc lÊy mÉu cña ¶nh
trong miÒn kh«ng gian.
Ph¬ng ph¸p sö dông biÕn ®æi (Transform Coding): gåm c¸c ph¬ng ph¸p
t¸c ®éng lªn sù biÕn ®æi cña ¶nh gèc chø kh«ng t¸c ®éng trùc tiÕp.
II.1.3.C¸ch ph©n lo¹i dùa vµo lý thuyÕt m· ho¸:
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 8
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
C¸c ph¬ng ph¸p nÐn thÕ hÖ thø nhÊt: gåm c¸c ph¬ng ph¸p cã møc ®é
tÝnh to¸n ®¬n gi¶n nh lÊy mÉu , g¸n tõ m·,….
C¸c ph¬ng ph¸p nÐn thÕ hÖ thø hai: gåm c¸c ph¬ng ph¸p dùa vµo møc ®é
b·o hoµ cña tû lÖ nÐn b»ng c¸ch sö dông c¸c phÐp to¸n tæ hîp ®Çu ra mét
c¸ch hîp lý hoÆc sö dông biÓu diÔn ¶nh nh : ph¬ng ph¸p kim tù th¸p
Laplace, ph¬ng ph¸p dùa vµo vïng gia t¨ng, ph¬ng ph¸p t¸ch hîp.
II.1.4.Qu¸ tr×nh nÐn vµ gi¶i nÐn :
Gåm 2 c«ng ®o¹n :
NÐn : d÷ liÖu gèc qua bé m· ho¸ d÷ liÖu , bé m· ho¸ nµy thùc hiÖn nÐn
d÷ liÖu ®Õn mét møc thÝch hîp cho viÖc lu tr÷ vµ truyÒn dÉn th«ng tin. Qu¸
tr×nh nµy sÏ thùc hiÖn viÖc lo¹i bá hay c¾t bít nh÷ng d thõa cña ¶nh ®Ó thu
®îc th«ng tin cÇn thiÕt nhng vÉn ®¶m b¶o ®îc chÊt lîng ¶nh.
Gi¶i nÐn : d÷ liÖu nÐn ®i qua bé gi¶i m· d÷ liÖu, bé gi¶i m· sÏ thùc
hiÖn gi¶i nÐn ®Ó thu ®îc d÷ liÖu gèc ban ®Çu.ViÖc gi¶i nÐn nµy thêng ph¶i
dùa vµo c¸c th«ng tin ®i kÐm theo d÷ liÖu nÐn ,tuú thuéc vµo kiÓu nÐn hay
ph¬ng ph¸p nÐn mµ d÷ liÖu gi¶i nÐn ®îc cã hoµn toµn gièng víi d÷ liÖu gèc
ban ®Çu hay kh«ng.
Tãm l¹i qu¸ tr×nh nÐn vµ gi¶i nÐn d÷ liÖu cã thÓ m« t¶ mét c¸ch tãm
t¾t theo s¬ ®å díi ®©y:
Qu¸ tr×nh nÐn
D÷ liÖu gèc
D÷ liÖu nÐn
Qu¸ tr×nh gi¶i nÐn
H×nh 2.1 : Qu¸ tr×nh nÐn vµ gi¶i nÐn
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 9
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
II.2.Ph¬ng ph¸p m· ho¸ ®é dµi lo¹t RLE:
M· ho¸ theo ®é dµi lo¹t RLE (Run Length Encoding) lµ mét ph¬ng ph¸p
nÐn ¶nh dùa trªn sù c¾t bít c¸c d thõa vÒ kh«ng gian (mét vµi h×nh ¶nh cã
vïng mµu lín kh«ng ®æi ®Æc biÖt ®èi víi ¶nh nhÞ ph©n). Lo¹t ®îc ®Þnh nghÜa
lµ d·y c¸c phÇn tö ®iÓm ¶nh (pixel) liªn tiÕp cã cïng chung mét gi¸ trÞ.
II.2.1.Nguyªn t¾c :
Nguyªn t¾c cña ph¬ng ph¸p nµy lµ ph¸t hiÖn mét lo¹t c¸c ®iÓm ¶nh lÆp
l¹i liªn tiÕp, vÝ dô :110000000000000011 .Ta thÊy ®iÓm ¶nh cã gi¸ trÞ 0 xuÊt
hiÖn nhiÒu lÇn liªn tiÕp thay v× ph¶i lu tr÷ toµn bé c¸c ®iÓm ¶nh cã gi¸ trÞ 0
ta chØ cÇn lu tr÷ chóng b»ng c¸ch sö dông c¸c cÆp (®é dµi lo¹t, gi¸ trÞ).
VÝ dô:
Cho mét chuçi nguån d :
d =5 5 5 5 5 5 5 5 5 5 19 19 19 19 19 0 0 0 0 0 0 0 23 23 23 23 23 23 23 23
Ta sÏ cã chuçi míi :
(10 5) (5 19) (7 0) (8 23)
Tû sè nÐn = 20/ 8 = 2.5
§èi víi ¶nh ®en tr¾ng chØ sö dông 1 bit ®Ó biÓu diÔn 1 ®iÓm ¶nh th× ph¬ng ph¸p nµy tá ra rÊt hiÖu qu¶, ta thÊy ®iÒu ®ã qua vÝ dô sau :
Cho mét chuçi nguån d:
000000000000000111111111100000000001111111111000000000000000
Ta cã chuçi míi :
(15, 10, 10, 10, 15)
Tû sè nÐn = 60 bit / (5*4 bit) = 3 ( chØ sö dông 4 bit ®Ó thÓ hiÖn ®é dµi
lo¹t vµ kh«ng thÓ hiÖn gi¸ trÞ lo¹t v× ¶nh ®en tr¾ng chØ cã 2 gi¸ trÞ bit lµ 0
hoÆc lµ 1)
Chó ý:
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 10
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
• §èi víi ¶nh chiÒu dµi cña mét d·y lÆp cã thÓ lín h¬n 255, nÕu ta dïng 1
byte ®Ó lu tr÷ chiÒu dµi th× sÏ kh«ng ®ñ. Gi¶i ph¸p ®îc dïng lµ t¸ch chuçi ®ã
thµnh 2 chuçi: mét chuçi cã chiÒu dµi lµ 255, chuçi kia cã chiÒu dµi cßn l¹i.
• Ph¬ng ph¸p nÐn RLE chØ ®¹t hiÖu qu¶ khi chuçi lÆp lín h¬n 1 ngìng
nhÊt ®Þnh nµo ®ã hay nãi c¸c kh¸c trong ¶nh cÇn nÐn ph¶i cã nhiÒu ®iÓm ¶nh
kÒ nhau cã cïng gi¸ trÞ mµu.Do ®ã ph¬ng ph¸p nµy kh«ng ®em l¹i cho ta kÕt
qu¶ mét c¸ch æn ®Þnh v× nã phô thuéc hoµn toµn vµo ¶nh nÐn chØ thÝch hîp
cho nh÷ng ¶nh ®en tr¾ng hay ¶nh ®a cÊp x¸m.
VÝ dô:
Ta cã mét chuçi nguån: d=5 7 9 11 13 18 28 38 48 58 30 35 40 45
Chuçi kÕt qu¶ sau khi m· ho¸ :
1 5 1 7 1 9 1 11 1 3 1 18 1 28 1 38 1 48 1 58 1 30 1 35 1 40 1 45
Tû sè nÐn = 14 / 28 = 0.2
Nh vËy chuçi sau khi m· ho¸ ®· lín h¬n nhiÒu chuçi nguån ban ®Çu. Do
®ã cÇn ph¬ng ph¸p c¶i tiÕn ®Ó xö lý nh÷ng trêng hîp nh trªn tr¸nh lµm më
réng chuçi d÷ liÖu nguån nghÜa lµ chØ m· ho¸ ®é dµi lo¹t d÷ liÖu lÆp l¹i. Ngêi ta ®· ®a ra c¸ch ®ã lµ thªm kÝ tù tiÒn tè vµo tríc ®é dµi lo¹t, viÖc gi¶i m·
®îc thùc hiÖn nÕu gÆp kÝ tù tiÒn tè víi ®é dµi lo¹t vµ gi¸ trÞ ®iÓm ¶nh theo
sau.
VÝ dô:
Ta cã chuçi nguån :
d = 5 8 4 8 8 8 8 8 8 8 8 10 10 10 10 10 10 10 10 10
Gi¶ sö kÝ tù tiÒn tè lµ “+” ta cã : 5 8 4 +7 8 + 9 10
Tû sè nÐn = 19 / 9 = 2.1
Tuy nhiªn trong mét sè trêng hîp c¸c ®iÓm ¶nh cã ®é t¬ng quan víi nhau
vÓ gi¸ trÞ møc x¸m nh trong vÝ dô díi ®©y ta cã thÓ tiÕn hµnh xö lý nh sau.
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 11
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
VÝ dô:
Ta cã mét chuçi nguån:
d = 5 7 9 11 13 18 28 38 48 58 55 60 65 70 75 80 85 90 95 100
Ta cã dùa vµo ®é t¬ng quan nµy ®Ó cã ®îc hiÖu qu¶ nÐn cao , b»ng
viÖc ¸p dông e(i) = d(i) –d(i-1) sÏ thu ®îc :
5 2 2 2 2 5 10 10 10 10 -3 5 5 5 5 5 5 5 5 5
¸p dông ph¬ng ph¸p nÐn lo¹t dµi ta dÔ dµng thu ®îc :
(5 1)( 2 4)(5 1)(10 5)(-3 1)(5 9)
II.2.2.ThuËt to¸n:
ThuËt to¸n nh sau :
• TiÕn hµnh duyÖt trªn tõng hµng cho ®Õn khi kÕt thóc vïng d÷ liÖu
¶nh, trong qu¸ tr×nh duyÖt tiÕn hµnh kiÓm tra ®Ó t×m ra nh÷ng lo¹t cã cïng
gi¸ trÞ ®ång thêi chó ý nh÷ng kÝ hiÖu xuèng dßng (hay kÕt thóc dßng) ,kÕt
thóc ¶nh Bitmap, …
• Khi gÆp lo¹t cã ®é dµi > 3 th× nh¶y ®Õn chÕ ®é nÐn ngîc l¹i nh¶y ®Õn
chÕ ®é kh«ng nÐn tuy nhiªn nÕu lo¹t > 255 th× sÏ t¸ch ra chØ m· < 255 sau
®ã m· tiÕp phÇn cßn l¹i. Ngoµi ra cßn c¸c chÕ ®é kh¸c nh : b¾t ®Çu , kÕt thóc
1 dßng.
•
KÕt thóc khi gÆp kÝ hiÖu kÕt thóc bitmap ( end – o f- bitmap)
II.2.3.Mét sè thñ tôc ch¬ng tr×nh :
• Ch¬ng tr×nh nÐn theo ph¬ng ph¸p RLE :
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 12
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
void CRLE::CompressInRLE8(BYTE*pSrcBits,CByteArray& pRLEBits, int&
RLE_size)
{
int line;
int src_index = 0, dst_index = 0, counter, i;
for ( line = 0; line < m_dib.dsBmih.biHeight; line++)
{
state_start:
if ( EndOfLine(src_index))
{
pRLEBits[dst_index++] = 1;
pRLEBits[dst_index++] = pSrcBits[src_index];
src_index++;
goto end_of_line;
}
if(pSrcBits[src_index]==pSrcBits[src_index+1]) goto tate_compress;
if ( EndOfLine(src_index+1))
{
pRLEBits[dst_index++] = 1;
pRLEBits[dst_index++] = pSrcBits[src_index++];
pRLEBits[dst_index++] = 1;
pRLEBits[dst_index++] = pSrcBits[src_index++];
goto end_of_line;
}
if (pSrcBits[src_index+1] == pSrcBits[src_index+2])
{
pRLEBits[dst_index++] = 1;
pRLEBits[dst_index++] = pSrcBits[src_index++];
goto state_compress;
}
else
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 13
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
goto state_no_compress;
state_compress:
for ( counter = 1; counter 2) counter--;
pRLEBits[dst_index++] = 0;
pRLEBits[dst_index++] = counter+1;
for (i = counter+1; i > 0; i--)
pRLEBits[dst_index++] = pSrcBits[src_index++];
if ( 0 != ((counter+1) % 2) ) pRLEBits[dst_index++];
goto state_compress;
}
}
pRLEBits[dst_index++] = 0;
pRLEBits[dst_index++] = counter;
for (i = counter; i > 0; i--)
pRLEBits[dst_index++] = pSrcBits[src_index++];
if ( 0 != ((counter) % 2) )
pRLEBits[dst_index++];
goto state_start;
end_of_line:
if ( 0 != (src_index % 4 ))
{
int pad = 4 - (src_index%4);
src_index += pad;
}
pRLEBits[dst_index++] = 0;
pRLEBits[dst_index++] = 0;
}
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 15
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
pRLEBits[dst_index++] = 0;
pRLEBits[dst_index++] = 1;
RLE_size = dst_index;
}
• Ch¬ng tr×nh gi¶i nÐn ph¬ng ph¸p RLE :
BOOL CRLE::DecRLE8(ifstream &fil, BYTE *pDest)
{
DWORD x, y, paddedwidth;
paddedwidth =BMPWIDTHBYTES(pInfo->biWidth*pInfo-> biBitCount);
BYTE FirstByte, SecondByte;
WORD data;
x = y = 0;
while (!fil.eof())
{
if (!fil.read((char*)&data, 2)) return FALSE;
FirstByte = LOBYTE(data);
SecondByte = HIBYTE(data);
if (FirstByte == 0)
{
switch (SecondByte)
{
case 0:
x = 0;
y++;
break;
case 1:
return TRUE;
case 2:
if (!fil.read((char*)&data, 2)) return FALSE;
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 16
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
x += LOBYTE(data);
y += HIBYTE(data);
break;
default:
char ch;
for (BYTE i = 0; i < SecondByte; i++)
{
if (!fil.get(ch)) return FALSE;
pDest[paddedwidth * y + x++] = (BYTE)ch;
}
if ((SecondByte % 2) == 1)
if (!fil.get(ch)) return FALSE;
}
}
else
{
for (BYTE i = 0; i < FirstByte; i++)
pDest[paddedwidth * y + x++] = SecondByte;
}
}
return FALSE;
}
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 17
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
II.3.Ph¬ng ph¸p m· ho¸ Huffman:
II.3.1. Nguyªn t¾c:
Ph¬ng ph¸p m· ho¸ Huffman lµ ph¬ng ph¸p dùa vµo m« h×nh thèng kª.
Ngêi ta tÝnh tÇn suÊt xuÊt hiÖn cña c¸c ký tù b»ng c¸ch duyÖt tuÇn tù tõ ®Çu
tÖp gèc ®Õn cuèi tÖp. ViÖc xö lý ë ®©y tÝnh theo bit. Trong ph¬ng ph¸p nµy
c¸c ký tù cã tÇn suÊt cao mét tõ m· ng¾n, c¸c ký tù cã tÇn suÊt thÊp mét tõ
m· dµi. Nh vËy víi c¸ch thøc nµy ta ®· lµm gi¶m chiÒu dµi trung b×nh cña tõ
m· ho¸ b»ng c¸ch dïng chiÒu dµi biÕn ®æi tuy nhiªn còng cã trêng hîp bÞ
thiÖt 1 Ýt bit khi tÇn suÊt lµ rÊt thÊp.
II.3.2. ThuËt to¸n:
• ThuËt to¸n m· ho¸ Huffman gåm 2 bíc chÝnh:
• Bíc mét:
TÝnh tÇn suÊt cña c¸c ký tù trong d÷ liÖu gèc b»ng c¸ch duyÖt tÖp
gèc mét c¸ch tuÇn tù tõ ®Çu ®Õn cuèi ®Ó x©y dùng b¶ng m· vµ tÝnh to¸n tÇn
suÊt. TiÕp theo sau lµ s¾p xÕp l¹i b¶ng m· theo thø tù tÇn suÊt gi¶m dÇn.
• Bíc hai:
DuyÖt b¶ng tÊn suÊt tõ cuèi lªn ®Çu ®Ó thùc hiÖn ghÐp hai phÇn tö
cã tÇn suÊt thÊp thµnh mét phÇn tö duy nhÊt cã tÇn suÊt b»ng tæng hai tÇn
suÊt thµnh phÇn. CËp nhËt phÇn tö nµy vµo vÞ trÝ phï hîp trong b¶ng vµ lo¹i
bá hai phÇn tö ®· xÐt. Thùc hiÖn cho ®Õn khi b¶ng chØ cã mét phÇn tö. §©y
lµ qu¸ tr×nh t¹o c©y nhÞ ph©n Huffman ,phÇn tö cã tÇn suÊt thÊp ë bªn ph¶i,
phÇn tö kia ë bªn tr¸i. Sau khi c©y ®· t¹o xong ngêi ta tiÕn hµnh g¸n m· cho
c¸c nót l¸. ViÖc m· ho¸ thùc hiÖn theo quy ®Þnh : mçi lÇn xuèng bªn ph¶i ta
thªm mét bit ‘1’ vµo tõ m·, mçi lÇn xuèng bªn tr¸i ta thªm mét bit ‘0’ vµo tõ
m·.
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 18
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
Qu¸ tr×nh gi¶i nÐn còng kh¸ ®¬n gi¶n ®îc tiÕn hµnh theo chiÒu ngîc l¹i.
Ngêi ta còng ph¶i dùa vµo b¶ng m· t¹o ra trong giai ®o¹n nÐn (b¶ng nµy ®îc
lu tr÷ trong cÊu tróc ®Çu cña tÖp nÐn cïng víi d÷ liÖu nÐn).
VÝ dô: Mét tÖp bÊt kú cã tÇn suÊt xuÊt hiÖn cña c¸c kÝ tù sè nh b¶ng sau.
Ký tù
0
TÇn suÊt
1532
1
152
2
323
3
412
4
226
5
385
6
602
7
92
8
112
9
87
B¶ng tÇn suÊt s¾p xÕp gi¶m dÇn
KÝ tù
0
X¸c suÊt (%)
0.3906
6
0.1535
3
0.1051
5
0.0982
2
0.0824
4
0.0577
1
0.0388
8
0.0286
7
0.0235
9
0.0222
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 19
§å ¸n tèt nghiÖp
0
6
3
5
2
4
1
8
7
9
0.3905
0.1535
0.1051
0.0982
0.0824
0.0577
0.0457
0.0388
0.3905
0.1535
0.1051
0.0982
0.0824
0.0577
0.0388
0.0286
0.0235
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
0.3905
0.1535
0.1051
0.0982
0.0824
0.0674
0.0577
0.3906
0.1535
0.1051
0.1034
0.0982
0.0824
0.3905
0.1535
0.1498
0.1051
0.1034
0.3905
0.2016
0.1535
0.1498
0.1051
0.3905
0.2549
0.2016
0.1535
0.3905
0.3551
0.2549
0.0982
0.0674
0.0457
0.0286
0.0222
M« t¶ : Ta tiÕn hµnh hîp nhÊt hay céng 2 tÇn suÊt nhá nhÊt ë cuèi
b¶ng ®Ó thu ®îc gi¸ trÞ tÇn suÊt míi sau ®ã ®a gi¸ trÞ nµy trë l¹i b¶ng tÇn suÊt
ban ®Çu ®· bá ®i 2 tÇn suÊt thµnh phÇn t¹o thµnh nã. Sau khi ®a gi¸ trÞ míi
vµo b¶ng ta ph¶i tiÕn hµnh s¾p xÕp l¹i toµn bé b¶ng , lóc nµy sè lîng tÇn suÊt
chØ cßn lµ n-1 nÕu ban ®Çu sè lîng tÇn suÊt lµ n. TiÕp tôc thùc hiÖn lÇn lît
theo thø tù nh trªn cho ®Õn khi nµo sè lîng tÇn suÊt chØ cßn l¹i duy nhÊt 1
gi¸ trÞ.
ViÖc t¹o c©y nhÞ ph©n cã thÓ ®îc thùc hiÖn theo mét thuËt to¸n sau:
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 20
0.6100
0.3905
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
1. TÊt c¶ nh÷ng ký tù ban ®Çu ®îc xem nh lµ nh÷ng ký tù giao ®iÓm tù
do.
2. Hai nót tù do víi tÇn sè xuÊt hiÖn thÊp nhÊt ®îc ph©n c«ng tíi mét nót
gèc víi gi¸ trÞ b»ng víi tæng cña hai nót con tù do.
3. Hai nót con ®îc chuyÓn khái danh s¸ch nót tù do. ChuyÓn nót gèc
míi t¹o thµnh c«ng vµo danh s¸ch.
0635241879
B0
4. Bíc hai sang bíc ba ®îc lÆp cho ®Õn khi chØ cã 1 nót tù do vÒ phÝa
tr¸i. Nót tù do nµy lµ gèc cña c©y.
Qu¸ 0tr×nh
c©y nhÞ ph©n Huffman
6 3 5 x©y
2 4 1 dùng
8
0 6 3 5®îc
2 4 thÓ hiÖn chi tiÕt nh
B2
trong h×nh sau :
1
9
B1
7
8
06352
B3
0635
B4
4
2
9
7
063
B5
1
B6
8
06
3
5
4
2
1
9
7
0
B7
0
B8
5
8
6
6
4
7
5
9
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
4
7
3
2
1
9
Trang : 21
8
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
H×nh 2.3 : Qu¸ tr×nh t¹o c©y nhÞ ph©n
Ta cã c©y m· Huffman t¬ng øng nh sau :
0
1
0
6
5
3
2
1
4
7
8
9
B¶ng tõ m· g¸n cho c¸c kÝ tù sè nh sau:
KÝ tù
0
M·
1
6
001
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 22
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
3
011
5
0001
2
0100
4
00000
1
01010
8
01011
7
000010
9
000011
Nh vËy víi vÝ dô sau ®©y ta cã thÓ tiÕn hµnh m· ho¸ nh sau:
Chuçi nguån : 00000000006666693333 kÝch thíc = 20*8=160 bit
Sö dông m· Huffman theo b¶ng trªn
kÝch thíc =10*1+5*3+1*6+4*3= 43 bit
V× gÝa trÞ trÞ 0 xuÊt hiÖn 10 lÇn nhng chØ dïng 1 bit ®Ó thÓ hiÖn, gi¸ trÞ 6
xuÊt hiÖn 5 lÇn dïng 3 bit ®Ó thÓ hiÖn ,gi¸ trÞ 9 dïng 6 bit vµ gi¸ trÞ 3 xuÊt
hiÖn 4 lÇn dïng 3 bit ®Ó thÓ hiÖn.
Tû sè nÐn = 160 / 43 = 3.7
Trong ph¬ng ph¸p m· Huffman m· cña ký tù lµ duy nhÊt vµ kh«ng m·
nµo lµ phÇn b¾t ®Çu cña m· tríc.V× vËy khi ®äc theo tõng bit tõ ®Çu ®Õn cuèi
tÖp nÐn ta cã thÓ duyÖt c©y m· cho ®Õn mét l¸, tøc lµ ký tù ®· ®îc gi¶i m·.
ViÖc gi¶i m· ch¾c ch¾n ph¶i sö dông c©y nhÞ ph©n gièng nh trong m· ho¸.
§Ó ®äc, gi¶i m· ®îc yªu cÇu ph¶i sö dông theo ®óng tiªu chuÈn nhÊt ®Þnh .
II.3.3.Mét sè thñ tôc ch¬ng tr×nh :
• Ch¬ng tr×nh nÐn ph¬ng ph¸p HUFFMAN :
bool CompressHuffman(BYTE*pSrc, int nSrcLen, BYTE *&pDes, int &nDesLen)
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 23
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
{
CHuffmanNode nodes[511];
for(int nCount = 0; nCount < 256; nCount++)
nodes[nCount].byAscii = nCount;
for(nCount = 0; nCount < nSrcLen; nCount++)
nodes[pSrc[nCount]].nFrequency++;
qsort(nodes, 256, sizeof(CHuffmanNode), frequencyCompare);
int nNodeCount = GetHuffmanTree(nodes);
int nNodeSize = sizeof(DWORD)+sizeof(BYTE);
nDesLen = nSrcLen+nNodeCount*nNodeSize;
pDes = (BYTE*)malloc(nDesLen);
BYTE *pDesPtr = pDes;
memset(pDesPtr, 0, nDesLen);
*(DWORD*)pDesPtr = nSrcLen;
pDesPtr += sizeof(DWORD);
*pDesPtr = nNodeCount-1;
pDesPtr += sizeof(BYTE);
for(nCount = 0; nCount < nNodeCount; nCount++)
{
memcpy(pDesPtr, &nodes[nCount], nNodeSize);
pDesPtr += nNodeSize;
}
qsort(nodes, 256, sizeof(CHuffmanNode), asciiCompare);
int nDesIndex = 0;
for(nCount = 0; nCount < nSrcLen; nCount++)
{
*(DWORD*)(pDesPtr+(nDesIndex>>3))|=nodes[pSrc[nCount]].dwCodepParent)
pRoot = pRoot->pParent;
int nDesIndex = 0;
DWORD nCode;
nSrcIndex 3)))>>(nSrcIndex&7);
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 25
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
pNode = pRoot;
while(pNode->pLeft)
{
pNode = (nCode&1) ? pNode->pRight : pNode->pLeft;
nCode >>= 1;
nSrcIndex++;
}
pDes[nDesIndex++] = pNode->byAscii;
}
return true;
}
II.4.Ph¬ng ph¸p m· ho¸ LZW:
Kh¸i niÖm nÐn tõ ®iÓn ®îc Jocob Lempe vµ Abraham Ziv ®a ra lÇn ®Çu
tiªn n¨m 1977 sau ®ã ph¸t triÓn thµnh mét hä gi¶i thuËt nÐn tõ ®iÓn LZ.
N¨m 1984 Welch ®· c¶i tiÕn gi¶i thuËt LZ thµnh gi¶i thuËt míi hiÖu qu¶ h¬n
vµ ®îc ®Æt tªn lµ LZW ( Lempe – Ziv - Welch). Ph¬ng ph¸p nµy x©y dùng
tõ ®iÓn lu c¸c chuçi ký tù cã tÇn suÊt lÆp l¹i cao vµ thay thÕ b»ng tõ m· t¬ng
øng mçi khi gÆp l¹i chóng, nã hay h¬n c¸c ph¬ng ph¸p tríc ®ã ë kü thuËt tæ
chøc tõ ®iÓn cho phÐp n©ng cao tû lÖ nÐn.
Gi¶i thuËt LZW ®îc dïng cho tÊt c¶ c¸c lo¹i file nhÞ ph©n, thêng ®îc
dïng ®Ó nÐn c¸c lo¹i d÷ liÖu nh : v¨n b¶n, ¶nh ®en tr¾ng, ¶nh mµu, ¶nh ®a
cÊp s¸m… vµ lµ chuÈn nÐn cho c¸c d¹ng ¶nh GIF vµ TIFF. Sè bit / pixel
kh«ng ¶nh hëng ®Õn hiÖu qu¶ cña LZW.
II.4.1.Nguyªn t¾c:
Gi¶i thuËt nÐn LZW x©y dùng mét tõ ®iÓn lu c¸c mÉu cã tÇn suÊt xuÊt
hiÖn cao trong ¶nh. Tõ ®iÓn lµ tËp hîp nh÷ng cÆp (tõ vùng vµ nghÜa cña tõ
vùng). Trong ®ã tõ vùng sÏ lµ c¸c tõ m· ®îc s¾p xÕp theo thø tù nhÊt ®Þnh.
NghÜa lµ mét chuçi con trong d÷ liÖu ¶nh. Tõ ®iÓn ®îc x©y dùng song song
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 26
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
víi qu¸ tr×nh ®äc d÷ liÖu. Sù xuÊt hiÖn cña chuçi con trong tõ ®iÓn kh¼ng
®Þnh r»ng chuçi ®ã ®· tõng xuÊt hiÖn trong phÇn d÷ liÖu ®· ®ùoc ®äc qua.
ThuËt to¸n liªn tôc tra cøu vµ sau mçi lÇn ®äc mét ký tù ë d÷ liÖu ®Çu vµo
th× tiÕn hµnh cËp nhËt l¹i tõ ®iÓn.
Do giíi h¹n cña bé nhí vµ ®Ó ®¶m b¶o tèc ®é t×m kiÕm nhanh, tõ ®iÓn
chØ giíi h¹n 4096 phÇn tö dïng ®Ó lu tr÷ gi¸ trÞ cña c¸c tõ m·. Nh vËy ®é dµi
lín nhÊt cña tõ m· lµ 12 bit (4096=212). CÊu tróc tõ ®iÓn nh sau:
0
1
…
…
255
256
257
258
259
…
…
4095
0
1
…
…
255
256
257
Chuçi
Chuçi
…
…
Chuçi
(Clear Code)
(End Of Information)
• 256 tõ m· ®Çu tiªn theo thø tù tõ 0 … 255 chøa c¸c sè nguyªn tõ 0 …
255. §©y lµ m· cña 256 kÝ tù c¬ b¶n trong b¶ng m· ASCII.
• Tõ m· thø 256 chøa mét m· ®Æc biÖt lµ m· xo¸ (CC - Clear Code).
Khi sè mÉu lÆp lín h¬n 4096 th× ngêi ta sÏ coi ¶nh gåm nhiÒu m¶nh ¶nh vµ
tõ ®iÓn sÏ gåm nhiÒu tõ ®iÓn con. Khi hÕt mét m¶nh ¶nh sÏ göi 1 m· xo¸
( CC ) ®Ó b¸o hiÖu kÕt thóc m¶nh ¶nh cò vµ b¾t ®Çu m¶nh ¶nh míi ®ång thêi
sÏ khëi t¹o l¹i tõ ®iÓn.
• Tõ m· thø 257 chøa m· kÕt thóc th«ng tin (EOI - End Of
Information). Th«ng thêng mét file ¶nh GIF cã thÓ chøa nhiÒu m¶nh ¶nh,
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 27
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
mçi m¶nh ¶nh nµy sÏ ®îc m· ho¸ riªng. Ch¬ng tr×nh gi¶i m· sÏ lÆp ®i lÆp l¹i
thao t¸c gi¶i m· tõng ¶nh cho ®Õn khi gÆp m· kÕt thóc th«ng tin th× dõng l¹i.
• C¸c tõ m· cßn l¹i (tõ 258 ®Õn 4095) chøa c¸c mÉu thêng lÆp l¹i trong
¶nh. 512 phÇn tö ®Çu tiªn cña tõ ®iÓn biÓu diÔn b»ng 9 bit. C¸c tõ m· tõ 512
®Õn 1023 biÓu diÔn bëi 10 bit, tõ 1024 ®Õn 2047 biÓu diÔn bëi 11 bit, vµ tõ
2048 ®Õn 4095 biÓu diÔn bëi 12 bit.
VÝ dô : Cho chuçi ®Çu vµo “HELLOHELLOHELL”
Tõ ®iÒn ban ®Çu ®· gåm 256 kÝ tù c¬ b¶n.
KÝch thíc ®Çu vµo : 14 x 8 = 112 bit
§Çu vµo
H(72)
E(69)
L(76)
L
O(79)
H
E
L
L
O
H
E
L
L
§Çu ra
72
69
76
76
79
258
260
262
259
76
EOI
Thùc hiÖn
H ®· cã trong tõ ®iÓn ®äc tiÕp
Thªm vµo tõ ®iÓn m· 258 ®¹i diÖn cho chuçi HE
Thªm vµo tõ ®iÓn m· 259 ®¹i diÖn cho chuçi EL
Thªm vµo tõ ®iÓn m· 260 ®¹i diÖn cho chuçi LL
Thªm vµo tõ ®iÓn m· 261 ®¹i diÖn cho chuçi LO
Thªm vµo tõ ®iÓn m· 262 ®¹i diÖn cho chuçi OH
HE ®· cã trong tõ ®iÓn ®äc tiÕp
Thªm vµo tõ ®iÓn m· 263 ®¹i diÖn cho chuçi HEL
LL ®· cã trong tõ ®iÓn ®äc tiÕp
Thªm vµo tõ ®iÓn m· 264 ®¹i diÖn cho chuçi LLO
OH ®· cã trong tõ ®iÓn ®äc tiÕp
Thªm vµo tõ ®iÓn m· 265 ®¹i diÖn cho chuçi OHE
EL ®· cã trong tõ ®iÓn ®äc tiÕp
Thªm vµo tõ ®iÓn m· 266 ®¹i diÖn cho chuçi ELL
Input = FALSE
Chuçi ®Çu ra lµ : 72 69 76 76 79 258 260 262 259 76
KÝch thíc ®Çu ra : 6 x 8 + 4 x 9 = 84 bit
Tû sè nÐn : 112 / 84 = 1.3
Qu¸ tr×nh gi¶i nÐn thùc hiÖn nh sau:
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 28
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
AddToDictionary()
Code
OutBuff()
72
H
69
E
258
HE
76
L
259
EL
76
L
260
LL
79
O
261
LO
258
HE
262
OHE
260
LL
263
HEL
262
OH
264
LLO
259
EL
265
OHE
76
L
266
CodeWord
String
ELL
EOI
Chuçi thu ®îc sau gi¶i nÐn :”HELLOHELLOHELL”
II.4.2. ThuËt to¸n:
• ThuËt to¸n nÐn b»ng LZW:
InitDictionary()
Output(Clear_Code)
OldStr = NULL
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 29
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
WHILE ( Input )
{
NewChar = GetNextChar()
NewStr = OldStr + NewChar
IF ( InDictionary(NewStr) )
OldsSr = NewStr
ELSE
{
Output(Code(OldStr))
AddToDictionary(NewStr)
OldStr = NewChar
}
}
Output(Code(OldStr))
Output(EOI)
• Gi¸ trÞ cê Input = TRUE khi vÉn cßn d÷ liÖu ®Çu vµo vµ ngîc l¹i.
Chøc n¨ng cña c¸c hµm:
• Hµm InitDictionary() : Khëi t¹o tõ ®iÓn. §Æt gi¸ trÞ cho 256 phÇn
tö ®Çu tiªn. G¸n m· xo¸ CC cho phÇn tö thø 256 vµ m· kÕt thóc th«ng
tin EOI cho phÇn tö thø 257. Xo¸ gi¸ trÞ tÊt c¶ c¸c phÇn tö cßn l¹i.
•
Hµm InDictionary (NewStr) : KiÓm tra chuçi NewStr ®· cã trong
tõ ®iÓn cha .
•
Hµm OutPut() : Göi chuçi bit ra file.Tuú thuéc vµo vÞ trÝ cña tõ
m· trong tõ ®iÓn mµ chuçi bit cã ®é dµi lµ 9,10,11 hoÆc 12.
•
Hµm GetNextChar() : Tr¶ vÒ mét ký tù tõ chuçi ký tù ®Çu vµo.
Hµm nµy cËp nhËt gi¸ trÞ cê Input x¸c ®Þnh xem cßn d÷ liÖu ®Çu vµo
n÷a hay kh«ng.
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 30
§å ¸n tèt nghiÖp
•
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
Hµm AddToDictionary() : Hµm lµm chøc n¨ng cËp nhËt mÉu míi
vµo phÇn tö tiÕp theo trong tõ ®iÓn. NÕu tõ ®iÓn ®· ®Çy nã sÏ göi ra m·
xo¸ CC vµ gäi ®Õn hµm InitDictionary() ®Ó khëi t¹o l¹i tõ ®iÓn.
• Hµm Code() : Tr¶ vÒ tõ m· øng víi 1 chuçi.
T tëng cña ®o¹n m· trªn cã thÓ hiÓu nh sau: NÕu cßn d÷ liÖu ®Çu vµo th×
tiÕp tôc ®äc. Mét chuçi míi sÏ ®îc t¹o ra tõ chuçi cò (chuçi nµy ban ®Çu
rçng, chuçi nµy ph¶i lµ chuçi ®· tån t¹i trong tõ ®iÓn) vµ ký tù võa ®äc vµo.
Sau ®ã kiÓm tra xem chuçi míi ®· cã trong tõ ®iÓn hay cha. Môc ®Ých cña
c«ng viÖc nµy lµ hi väng t×m ®îc chuçi cã sã ký tù lín nhÊt trong tõ ®iÓn.
NÕu tån t¹i th× l¹i tiÕp tôc ®äc mét ký tù tiÕp theo vµ lÆp l¹i c«ng viÖc. NÕu
cha cã trong tõ ®iÓn, th× göi chuçi cò ra ngoµi vµ thªm chuçi míi vµo tõ
®iÓn.
• Gi¶i nÐn d÷ liÖu b»ng LZW:
Gi¶i thuËt gi¶i nÐn gÇn nh ngîc víi gi¶i thuËt nÐn. Víi gi¶i thuËt nÐn,
mét tõ m· øng víi mét chuçi sÏ ®îc ghi ra tÖp khi chuçi ghÐp bëi chuçi trªn
víi ký tù võa ®äc cha cã mÆt trong tõ ®iÓn. Ngêi ta còng cËp nhËt ngay vµo
tõ ®iÓn tõ m· øng víi chuçi t¹o bëi chuçi cò víi ký tù võa ®äc. Ký tù nµy
®ång thêi lµ ký tù ®Çu tiªn trong chuçi øng víi tõ m· sÏ ®îc ghi ra tiÕp theo.
ThuËt to¸n ®îc m« t¶ nh sau:
WHILE (GetNextCode() != EOI)
{
IF (First_Code) /*M· ®Çu tiªn cña mçi m¶nh ¶nh*/
{
OutBuff(DeCode(code))
OldStr = DeCode(code)
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 31
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
}
ELSE
{
IF (code == CC) /*M· xo¸*/
{
InitDictionary()
First_Code = TRUE
}
NewStr = DeCode(code)
OutBuff(NewStr)
OldStr = OldStr + FirstChar(NewStr)
AddToDictionary(OldStr)
OldStr = NewStr
}
}
• Gi¸ trÞ cê First_Code = TRUE chØ m· võa ®äc lµ m· ®Çu tiªn cña
mçi m¶nh ¶nh.
Chøc n¨ng cña c¸c hµm:
• M· CC b¸o hiÖu hÕt mét m¶nh ¶nh. M· EOI b¸o hiÖu hªt toµn bé
th«ng tin ¶nh.
• Hµm GetNextCode() : Hµm nµy ®äc th«ng tin ®Çu vµo (d÷ liÖu nÐn)
tr¶ vÒ m· t¬ng øng.
• Hµm OutBuff() : Hµm nµy göi chuçi ®· gi¶i m· ra vïng nhí ®Öm.
• Hµm InitDictionary(): Khëi t¹o tõ ®iÓn. §Æt gi¸ trÞ cho 256 phÇn tö
®Çu tiªn. G¸n m· xo¸ CC cho phÇn tö thø 256 vµ m· kÕt thóc th«ng tin
EOI cho phÇn tö thø 257. Xo¸ gi¸ trÞ tÊt c¶ c¸c phÇn tö cßn l¹i.
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 32
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
• Hµm DeCode() : Hµm nµy tra cøu tõ ®iÓn vµ tr¶ vÒ chuçi ký tù t¬ng
øng víi m·.
• Hµm FirstChar() : LÊy ký tù ®Çu tiªn cña mét chuçi. Ký tù võa
x¸c ®Þnh nèi tiÕp vµo chuçi ký tù cò (®· gi¶i m· ë bíc tríc) ta ®îc
chuçi ký tù cã mÆt trong tõ ®iÓn khi nÐn. Chuçi nµy sÏ ®îc thªm vµo
tõ ®iÓn gi¶i nÐn.
• Hµm AddToDictionary() : Hµm lµm chøc n¨ng cËp nhËt mÉu míi vµo
phÇn tö tiÕp theo trong tõ ®iÓn. NÕu tõ ®iÓn ®· ®Çy nã sÏ göi ra m· xo¸
CC vµ gäi ®Õn hµm InitDictionary() ®Ó khëi t¹o l¹i tõ ®iÓn..
II.4.3.Mét sè thñ tôc ch¬ng tr×nh :
• Ch¬ng tr×nh nÐn ph¬ng ph¸p LZW :
BOOL CLZW::Compress(CFile &source, CFile &destination)
{
long prefix = 0;
long result = 0;
BYTE readByte = 0;
unsigned long filetotal = 0;
CString logString;
DWORD resAdd = 256;
Init();
filetotal = source.GetLength();
if (m_tudien == NULL)
{
CreateDictionary();
}
source.Read(&prefix, 1);
while (source.GetPosition() < filetotal)
{
source.Read(&readByte, 1);
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 33
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
result = m_tudien->GetEntry(prefix, readByte);
if (result == -1)
{
resAdd = m_tudien->AddEntry(prefix, readByte);
CalculateBitSize(resAdd);
logString.Format("Adding combination of %d and %d to
dictionary to entry %d.",prefix, readByte, resAdd);
Log(logString);
CompressData(destination, prefix);
prefix = readByte;
result = -1;
}
else
{
prefix = result;
readByte = 0;
}
}
CompressData(destination, prefix);
CloseCompressedFile(destination);
ClearDictionary();
return TRUE;
}
• Ch¬ng tr×nh gi¶i nÐn ph¬ng ph¸p LZW :
BOOL CLZW::Decompress(CFile &source, CFile &destination)
{
DWORD prefix = 0, data = 0;
CString logString;
CByteArray decodeString;
BYTE writeData = 0, character = 0;
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 34
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
int counter = 0;
Init();
if (m_tudien == NULL)
{
CreateDictionary();
}
prefix = DecompressData(source);
character = (BYTE)prefix;
destination.Write(&prefix, 1);
while ((data = DecompressData(source)) != m_MaxCode[m_MaxBits])
{
if (!m_tudien->IsCodeExist(data))
{
decodeString.Add((BYTE)character);
m_tudien->GetBytesFromCode(&decodeString, prefix);
}
else
{
m_tudien->GetBytesFromCode(&decodeString, data);
character = decodeString.GetAt(decodeString.GetSize() - 1);
}
counter = decodeString.GetSize();
while (counter > 0)
{
writeData = (BYTE)decodeString.GetAt(--counter);
destination.Write(&writeData, 1);
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 35
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
logString.Format("Adding character code %d with know visualisation of:
%s", writeData, convertASCIIToText(writeData));
Log(logString);
}
decodeString.RemoveAll();
m_tudien->AddEntry(prefix, (BYTE)character);
CalculateBitSize(m_tudien->GetMaxCode()+1);
prefix = data;
}
return TRUE;
}
II.5.Ph¬ng ph¸p m· ho¸ JPEG:
II.5.1.Nguyªn t¾c:
JPEG lµ viÕt t¾t cña Joint Photographic Expert Group ( nhãm c¸c
chuyªn gia ®å ho¹ ph¸t triÓn chuÈn nµy ). ChuÈn nµy ®îc ph¸t triÓn tõ gi÷a
thËp niªn 80 bëi sù hîp t¸c cña tæ chøc ISO vµ ITU vµ ®Õn 1992 ®îc c«ng
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 36
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
nhËn lµ chuÈn ¶nh quèc tÕ ,phôc vô c¸c øng dông vÒ ¶nh cho c¸c lÜnh vùc
nh m¹ng, y häc, khoa häc kü thuËt, ¶nh nghÖ thuËt …
ChuÈn JPEG ®îc sö dông ®Ó m· ho¸ ¶nh ®a møc x¸m, ¶nh mµu. JPEG
kh«ng cho kÕt qu¶ æn ®Þnh l¾m víi ¶nh ®en tr¾ng, nã cung cÊp c¶ 2 chÕ ®é
nÐn : nÐn mÊt m¸t th«ng tin vµ nÐn kh«ng tæn thÊt. Do ®é phøc t¹p vµ hiÖu
suÊt nÐn cña JPEG kh«ng mÊt m¸t th«ng tin mµ nã kh«ng ®îc sö dông phæ
biÕn .Díi ®©y chØ tr×nh bµy chi tiÕt vÒ mét trong c¸c d¹ng nÐn biÕn ®æi chÊp
nhËn mÊt m¸t th«ng tin dïng biÕn ®æi Cosin tuÇn tù ( Sequential DTCBased) cña chuÈn JPEG.
II.5.2.ThuËt to¸n:
M· ho¸ JPEG bao gåm nhiÒu c«ng ®o¹n, s¬ ®å thuËt to¸n nÐn vµ gi¶i
nÐn ®îc m« t¶ nh díi ®©y
¶nh
gèc
P
h
©
n
k
h
è
i
8x8
DCT
Lîng tö
ho¸
M·
ho¸
B¶ng l
îng tö
B¶ng
m·
¶nh
nÐn
8x8
8x8
Khèi
8x8
8x8
H×nh 2.5.1 : Qu¸ tr×nh nÐn ¶nh theo chuÈn JPEG
Qu¸ tr×nh gi¶i nÐn sÏ ®îc thùc hiÖn ngîc l¹i, ngêi ta dùa vµo c¸c th«ng tin
liªn quan ghi trong phÇn Header cña file nÐn ®Ó gi¶i m· tõng phÇn ¶nh nÐn
øng víi ph¬ng ph¸p nÐn. KÕt qu¶ thu ®îc lµ hÖ sè ®· lîng tö. C¨n cø vµo
b¶ng lîng tö sÏ kh«i phôc l¹i gi¸ trÞ tríc khi lîng tö ho¸ cña c¸c hÖ sè nµy.
Cuèi cïng lµ biÕn ®æi Cosin ngîc ®Ó thu l¹i ®îc ¶nh nh ban ®Çu .
¶nh
nÐn
Gi¶i
m·
T¬ng
tù ho¸
Sinh viªn thùc hiÖn
: T¹ Minh Th¾ng
CT 702
B¶ng
B¶ng
m·
lîng
tö
DCT
ngîc
¶nh
gi¶i
nÐn
Trang : 37
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
H×nh 2.5.2 : Qu¸ tr×nh gi¶i nÐn ¶nh JPEG
A. Chia ¶nh thµnh khèi
ChuÈn nÐn JPEG ph©n ¶nh ra c¸c khèi 8x8. BiÕn ®æi nhanh Cosin 2
chiÒu cho c¸c khèi 8x8 sÏ ®¹t hiÖu qu¶ h¬n, viÖc biÕn ®æi Cosin cho c¸c khèi
cã cïng kÝch cì cã thÓ gi¶m ®îc mét phÇn c¸c tÝnh to¸n chung nh viÖc tÝnh
hÖ sè Cij . Khi n = 8 chóng ta chØ cÇn tÝnh hÖ sè C ij cho 3 tÇng (8 = 23), sè c¸c
hÖ sè lµ: 4 + 2 + 1 = 7
NÕu víi mét ¶nh 512x512, phÕp biÕn ®æi nhanh Cosin mét chiÒu theo
hµng ngang hoÆc hµng däc ta ph¶i cÇn qua 9 tÇng (512 = 2 9). Sè c¸c hÖ sè Cij
lµ: 256 + 128 + 64 + 32 + 16 + 8 + 4 + 2 +1 =509. Nh vËy thêi gian tÝnh c¸c
hÖ sè Cij cho ¶nh 512x512 lín gÊp 72 lÇn so víi thêi gian tÝnh to¸n c¸c hÖ sè
nµy cho tõng khèi 8x8 , nÕu kÝch thíc ¶nh lín h¬n th× chi phÝ thêi gian sÏ
cßn t¨ng gÊp nhiÒu lÇn ®ång thêi cßn gióp viÖc tÝnh to¸n trong khi biÕn ®æi
Cosin chÝnh x¸c h¬n.
¶nh sÏ chia lµm B khèi víi:
M ' N'
B =
× = M B × NB
k
l
C¸c khèi ®îc x¸c ®Þnh bëi bé sè (m,n) víi m=[0..MB-1] vµ n=[0..NB-1].
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702
Trang : 38
§å ¸n tèt nghiÖp
T×m hiÓu mét sè ph¬ng ph¸p nÐn ¶nh
Trong ®ã :
m : thø tù cña khèi theo chiÒu réng.
n : thø tù cña khèi theo chiÒu dµi.
Ph©n khèi thùc chÊt lµ x¸c ®Þnh t¬ng quan gi÷a to¹ ®é riªng trong khèi
víi t¹o ®é thùc cña ®iÓm ¶nh trong ¶nh ban ®Çu. NÕu ¶nh ban ®Çu ký hiÖu
Image[i,j] th× ma trËn biÓu diÔn khèi (m,n) lµ x[u,v] ®îc tÝnh:
x[u,v] = Image[mk + u, nl + v]
B. BiÕn ®æi
§©y lµ c«ng ®o¹n quan träng cña c¸c ph¬ng ph¸p nÐn sö dông phÐp biÕn
®æi, nhiÖm vô cña c«ng ®o¹n nµy lµ tËp trung n¨ng lîng vµo mét sè Ýt c¸c hÖ
sè biÕn ®æi.
C«ng thøc biÕn ®æi cho mçi khèi lµ:
ε ε
X ( k1 , k 2 ) = k1 k 2
4
7
7
∑ ∑ x(n , n )Cos
n1=0 n 2= 0
1
2
(2n1 + 1)k1Π
(2n2 + 1)k 2 Π
Cos
16
16
Trong ®ã:
εk 1
1
=
2
0
εk 2
1
= 2
0
Khi
k1 = 0
Khi
(0[...]... Tìm hiểu một số phơng pháp nén ảnh Đối với ảnh chiều dài của một dãy lặp có thể lớn hơn 255, nếu ta dùng 1 byte để lu trữ chiều dài thì sẽ không đủ Giải pháp đợc dùng là tách chuỗi đó thành 2 chuỗi: một chuỗi có chiều dài là 255, chuỗi kia có chiều dài còn lại Phơng pháp nén RLE chỉ đạt hiệu quả khi chuỗi lặp lớn hơn 1 ngỡng nhất định nào đó hay nói các khác trong ảnh cần nén phải có nhiều điểm ảnh. .. Thắng CT 702 4 7 3 2 1 9 Trang : 21 8 Đồ án tốt nghiệp Tìm hiểu một số phơng pháp nén ảnh Hình 2.3 : Quá trình tạo cây nhị phân Ta có cây mã Huffman tơng ứng nh sau : 0 1 0 6 5 3 2 1 4 7 8 9 Bảng từ mã gán cho các kí tự số nh sau: Kí tự 0 Mã 1 6 001 Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 22 Đồ án tốt nghiệp Tìm hiểu một số phơng pháp nén ảnh 3 011 5 0001 2 0100 4 00000 1 01010 8 01011 7 000010... Information) Thông thờng một file ảnh GIF có thể chứa nhiều mảnh ảnh, Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 27 Đồ án tốt nghiệp Tìm hiểu một số phơng pháp nén ảnh mỗi mảnh ảnh này sẽ đợc mã hoá riêng Chơng trình giải mã sẽ lặp đi lặp lại thao tác giải mã từng ảnh cho đến khi gặp mã kết thúc thông tin thì dừng lại Các từ mã còn lại (từ 258 đến 4095) chứa các mẫu thờng lặp lại trong ảnh 512 phần tử... 10 Giả sử kí tự tiền tố là + ta có : 5 8 4 +7 8 + 9 10 Tỷ số nén = 19 / 9 = 2.1 Tuy nhiên trong một số trờng hợp các điểm ảnh có độ tơng quan với nhau vể giá trị mức xám nh trong ví dụ dới đây ta có thể tiến hành xử lý nh sau Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 11 Đồ án tốt nghiệp Tìm hiểu một số phơng pháp nén ảnh Ví dụ: Ta có một chuỗi nguồn: d = 5 7 9 11 13 18 28 38 48 58 55 60 65... tiên theo thứ tự từ 0 255 chứa các số nguyên từ 0 255 Đây là mã của 256 kí tự cơ bản trong bảng mã ASCII Từ mã thứ 256 chứa một mã đặc biệt là mã xoá (CC - Clear Code) Khi số mẫu lặp lớn hơn 4096 thì ngời ta sẽ coi ảnh gồm nhiều mảnh ảnh và từ điển sẽ gồm nhiều từ điển con Khi hết một mảnh ảnh sẽ gửi 1 mã xoá ( CC ) để báo hiệu kết thúc mảnh ảnh cũ và bắt đầu mảnh ảnh mới đồng thời sẽ khởi tạo lại... Đồ án tốt nghiệp Tìm hiểu một số phơng pháp nén ảnh II.3.Phơng pháp mã hoá Huffman: II.3.1 Nguyên tắc: Phơng pháp mã hoá Huffman là phơng pháp dựa vào mô hình thống kê Ngời ta tính tần suất xuất hiện của các ký tự bằng cách duyệt tuần tự từ đầu tệp gốc đến cuối tệp Việc xử lý ở đây tính theo bit Trong phơng pháp này các ký tự có tần suất cao một từ mã ngắn, các ký tự có tần suất thấp một từ mã dài Nh... toàn bộ bảng , lúc này số lợng tần suất chỉ còn là n-1 nếu ban đầu số lợng tần suất là n Tiếp tục thực hiện lần lợt theo thứ tự nh trên cho đến khi nào số lợng tần suất chỉ còn lại duy nhất 1 giá trị Việc tạo cây nhị phân có thể đợc thực hiện theo một thuật toán sau: Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 20 0.6100 0.3905 Đồ án tốt nghiệp Tìm hiểu một số phơng pháp nén ảnh 1 Tất cả những ký... Trang : 25 Đồ án tốt nghiệp Tìm hiểu một số phơng pháp nén ảnh pNode = pRoot; while(pNode->pLeft) { pNode = (nCode&1) ? pNode->pRight : pNode->pLeft; nCode >>= 1; nSrcIndex++; } pDes[nDesIndex++] = pNode->byAscii; } return true; } II.4.Phơng pháp mã hoá LZW: Khái niệm nén từ điển đợc Jocob Lempe và Abraham Ziv đa ra lần đầu tiên năm 1977 sau đó phát triển thành một họ giải thuật nén từ điển LZ Năm 1984... x 9 = 84 bit Tỷ số nén : 112 / 84 = 1.3 Quá trình giải nén thực hiện nh sau: Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 28 Đồ án tốt nghiệp Tìm hiểu một số phơng pháp nén ảnh AddToDictionary() Code OutBuff() 72 H 69 E 258 HE 76 L 259 EL 76 L 260 LL 79 O 261 LO 258 HE 262 OHE 260 LL 263 HEL 262 OH 264 LLO 259 EL 265 OHE 76 L 266 CodeWord String ELL EOI Chuỗi thu đợc sau giải nén :HELLOHELLOHELL... Minh Thắng CT 702 Trang : 18 Đồ án tốt nghiệp Tìm hiểu một số phơng pháp nén ảnh Quá trình giải nén cũng khá đơn giản đợc tiến hành theo chiều ngợc lại Ngời ta cũng phải dựa vào bảng mã tạo ra trong giai đoạn nén (bảng này đợc lu trữ trong cấu trúc đầu của tệp nén cùng với dữ liệu nén) Ví dụ: Một tệp bất kỳ có tần suất xuất hiện của các kí tự số nh bảng sau Ký tự 0 Tần suất 1532 1 152 2 323 3 412 4 226 ... vợt trội so với chuẩn nén trớc đem lại hiệu nén cao , cho ảnh nén chất lợng tốt nhiều u điểm khác mà chuẩn nén trớc có Nội dung đồ án tốt nghiệp bao gồm phần nh : chơng giới thiệu tổng quan xử... dựng từ điển lu chuỗi ký tự có tần suất lặp lại cao thay từ mã tơng ứng gặp lại chúng, hay phơng pháp trớc kỹ thuật tổ chức từ điển cho phép nâng cao tỷ lệ nén Giải thuật LZW đợc dùng cho tất loại... prefix = 0; long result = 0; BYTE readByte = 0; unsigned long filetotal = 0; CString logString; DWORD resAdd = 256; Init(); filetotal = source.GetLength(); if (m_tudien == NULL) { CreateDictionary();
Ngày đăng: 10/10/2015, 10:39
Xem thêm: Tìm hiểu một số phương pháp nén ảnh, Tìm hiểu một số phương pháp nén ảnh