Tuesday, January 28, 2014

JPEG ဆုိတာ ဘာလဲ (၄)

ႀကားထဲမွာ အဆက္ျပတ္သြားလုိ႔ ေတာင္းပန္ပါတယ္။ စာေမးပြဲနဲ႔ ပေရာဂ်က္ကိစၥေတြ ရႈပ္ေနလုိ႔ပါခင္ဗ်ာ။

(ဃ) quantisation ျပဳလုပ္ျခင္း


ကြ်န္ေတာ္တုိ႔အေနနဲ႔ အဆင္႔(ဂ)ကုိ ျပဳလုပ္ျပီးခ်ိန္မွာ ၈x၈ matirx တစ္ခုနဲ႔ ပါ၀င္ႀကေသာ coefficients ၆၄ခုကုိ ရရွိျပီျဖစ္ပါတယ္။ အဲဒီေနာက္မွာေတာ႔ quantisation ျပဳလုပ္ဖုိ႔ အဆင္သင္႔ျဖစ္ပါျပီ။
Quantisation  ျပဳလုပ္ျခင္းျဖင္႔ ဘယ္dataဟာ အေရးႀကီးျပီး ဘယ္dataကေတာ႔ အေရးမႀကီးဘူးဆုိတာ သိႏုိင္ပါတယ္။ သိျပီးေနာက္မွာ userအေနနဲ႔ ကုိယ္လုိခ်င္တဲ႔ qualityအလုိက္ file sizeကုိ ေလွ်ာ႔ခ်သြားႏုိင္ျပီျဖစ္ပါတယ္။ JPEG compression မွာ သည္အဆင္႔ဟာ ဖုိင္ပမာဏကုိ အေလွ်ာ႔ခ်ေပးႏုိင္ဆုံး အဆင္႔လဲ ျဖစ္ပါတယ္။
သည္လုိေလွ်ာ႔ခ်ႏုိင္ဖုိ႔အတြက္ quantisation matrix ေတြဟာ သူ႔qualityအလုိက္ သီးသန္႔တည္ရွိႀကပါတယ္။ သူသည္လည္းပဲ ၈x၈ matrix ပဲ ျဖစ္ပါတယ္။ quality အတြက္ျဖစ္တဲ႔အတြက္ matrixနာမည္ကုိ Q လုိ႔ ေပးထားပါတယ္။ Q1 သည္ ကြာလတီအနိမ္႔ဆုံး ေလွ်ာ႔ခ်ေပးမွာျဖစ္ျပီး Q100ကေတာ႔ မူရင္းတန္ဖုိးအတုိင္းပဲ ျဖစ္သြားမွာပါ။ ေအာက္မွာေတာ႔ နမူနာအေနနဲ႔ အခ်ိဳ႕ေသာ quality matrix ေတြကုိ ေဖာ္ျပေပးထားပါတယ္။

ဖုိင္ပမာဏကုိ ေလွ်ာ႔ခ်တဲ႔ေနရာမွာ ေအာက္ပါ အခ်က္ႏွစ္ခ်က္ကုိ အသုံးျပဳျပီး ေလွ်ာ႔ခ်သြားတာပါ။
(က) ဖုိင္ပမာဏေလွ်ာ႔ခ်ေသာ္လည္း မူရင္းပုံမွာ ပါ၀င္ႏႈန္းျမင္႔မားတဲ႔ coefficientsေတြကုိ ဆက္လက္ထိန္းသိမ္းသြားျခင္း၊
(ခ) coefficient ေတြရဲ႕ မူရင္းတန္ဖုိးဟာ သုညနားကုိ ကပ္ေနရင္ေတာ႔ တန္ဖုိးကုိ လုံး၀ သုညအျဖစ္ သတ္မွတ္လုိက္ျခင္းတုိ႔ပဲ ျဖစ္ပါတယ္။
ဖုိင္ပမာဏေလွ်ာ႔ခ်တဲ႔ ပုံေသနည္းကေတာ႔ ေအာက္မွာ ေဖာ္ျပေပးထားပါတယ္။


သေဘာတရားကေတာ႔ တတိယအဆင္႔မွာ ကြ်န္ေတာ္တုိ႔ ရရွိထားတဲ႔ DCT matrix ကုိတည္ျပီး ကုိယ္လုိခ်င္တဲ႔ ကြာလတီအတုိင္း ပုံေသျဖစ္တဲ႔ quality matrix နဲ႔ matrix စားနည္းအတုိင္း စားလုိက္တာျဖစ္ပါတယ္။
ဥပမာအေနနဲ႔ ကြ်န္ေတာ္တုိ႔ တတိယအဆင္႔မွာ ရရွိထားတဲ႔ ၈x၈ matrix ကုိ Q50 matrix နဲ႔ quantisation ျပဳလုပ္တဲ႔အခါ ေအာက္ပါ matrix ကုိ ရရွိမွာပါ။
အထက္ေဖာ္ျပပါ (က)နဲ႔ (ခ) အခ်က္ႏွစ္ခ်က္အတုိင္းပဲ ကုိယ္ပုိင္တန္ဖုိးရွိတဲ႔ ဂဏန္းေတြကုိ ဒႆမကိန္းေတြျဖဳတ္ခ်ျပီး တန္ဖုိးမ်ားအတုိင္း ထိန္းသိမ္းယူေဆာင္ပါတယ္။ သုညနားနီးတဲ႔ ကိန္းဂဏန္းေတြကိုေတာ႔ လုံးလုံး သုညအျဖစ္ ေလွ်ာ႔ခ်လုိက္တာကုိ ေတြ႔ရမွာပါ။
ဒီေနရာမွာေတာ႔ User အသုံးျပဳခ်င္တဲ႔ quality matrix အလုိက္ Q10 ဆုိရင္ေတာ႔ သုညကိန္းေတြ အမ်ားႀကီးေတြ႔ရမွာျဖစ္ျပီး Q90ဆုိရင္ေတာ႔ သုညကိန္းေတြကုိ အနည္းငယ္ပဲ ေတြ႔ရလိမ္႔မယ္ျဖစ္ပါတယ္။
ဒါဆုိရင္ေတာ႔ အဆင္႔(၄)ကုိ ေအာင္ျမင္စြာ ျပဳလုပ္ျပီးစီးသြားလုိ႔ အဆင္႔၅ codeမ်ားအျဖစ္ ေျပာင္းလဲသတ္မွတ္ႏုိင္ျပီျဖစ္ပါတယ္။

(င) code မ်ား အျဖစ္ ေျပာင္းလဲသတ္မွတ္ကာ ကာလာမ်ား ျပန္လည္ျဖည္႔သြင္းျခင္း


အဆင္႔(၄)မွ ရရွိလာတဲ႔ coefficientsေတြကုိ ကြ်န္ေတာ္တုိ႔အေနနဲ႔ ကြန္ျပဴတာမွ နားလည္ေသာ binary codeမ်ား အျဖစ္ coding လုပ္ရပါမယ္။
JPEG compression လုပ္တဲ႔ေနရာမွာ မ်ားေသာအားျဖင္႔ေတာ႔ Huffman encode နည္းကုိပဲ အမ်ားဆုံး သုံးႀကပါတယ္။
အထက္အဆင္႔ကေန ရလာတဲ႔ coefficients ကိန္းဂဏန္းေတြအတြက္ Huffman encode မွာ binary codeေတြ ရရွိေအာင္ ျပဳလုပ္ရတာပဲျဖစ္ပါတယ္။ ဆုိႀကပါစုိ႔၊ ရုိးရုိးကိန္းဂဏန္း 4 အတြက္ binaryမွာ 11 ျဖစ္ပါတယ္။ အဲဒီသေဘာပါပဲ။
Huffman coding ကုိ အက်ယ္ရွင္းေနရင္ တအားရွည္သြားမွာမုိ႔ ေအာက္ေဖာ္ျပပါပုံေလးကုိပဲ နမူနာအေနနဲ႔ ေဖာ္ျပေပးလုိက္ပါတယ္။
သည္လုိမ်ိဳး encodingလုပ္တဲ႔ေနရာမွာ JPEG compression ဟာ ziz-zag နည္းကုိ အသုံးျပဳပါတယ္။ ေအာက္ပါအတုိင္း encodingလုပ္သြားတာ ျဖစ္ပါတယ္။
ဘာေႀကာင္႔ ziz-zagနည္းကုိ သုံးရသလဲ ကြ်န္ေတာ္႔အထင္ေျပာရရင္ေတာ႔ အေပၚအဆင္႔မွ ကြ်န္ေတာ္တုိ႔ ရရွိခဲ႔တဲ႔ C matrixမွာ ေတြ႔ရွိရတဲ႔ ဇီးရုိးေတြေႀကာင္႔ပဲလုိ႔ ထင္ျမင္မိပါတယ္။
တကယ္ေတာ႔ သည္အဆင္႔ျပီးသြားတဲ႔ JPEG compression ဟာ ေအာင္ျမင္ျပီးဆုံးသြားခဲ႔ပါျပီ။ သုိ႔ေသာ္ ကြ်န္ေတာ္တုိ႔အေနနဲ႔ ကုဒ္ေတြကုိပဲ ရရွိေနေသးျပီး ပုံအျဖစ္ ျပန္မျမင္ရႏုိင္ေသးပါဘူး။
ဒါေႀကာင္႔ display screen (ကြန္ျပဴတာေမာ္နီတာscreenျဖစ္ေစ၊ မုိဘုိင္းဖုန္းscreenျဖစ္ေစ) မွာ Imageအျဖစ္ ျပန္လည္ ေဖာ္ျပေပးဖုိ႔ရန္အတြက္ decompression လုပ္ေပးဖုိ႔ ျပန္လုိလာပါတယ္။
ရရွိတဲ႔ကုဒ္ေတြကုိ ကာလာအျဖစ္ ျပန္လည္ေျပာင္းလဲေပးဖုိ႔ပါ။
ကြ်န္ေတာ္တုိ႔ compressionလုပ္စဥ္မွာ ေဆာင္ရြက္ခဲ႔ရတဲ႔ အဆင္႔ငါးဆင္႔ကုိ ေျပာင္းျပန္ ျပန္လုပ္တဲ႔သေဘာပါပဲ။ အဲဒါေႀကာင္႔ အက်ယ္ရွင္းစရာမလုိေတာ႔ဘူးထင္ပါတယ္။ အသုံးျပဳတဲ႔ ပုံေသနည္းေတြကုိေတာ႔ ကြ်န္ေတာ္ ေဖာ္ျပေပးသြားပါမယ္။
အေစာက ရရွိခဲ႔တဲ႔ binary codeေတြကို C matrixအျဖစ္ ျပန္လည္ အသက္သြင္းပါမယ္။
ျပီးရင္ R matrix ကုိ တည္ေဆာက္ရပါမယ္။ ပုံေသနည္းကေတာ႔ ေအာက္ပါအတုိင္းပါ။
ဆုိႀကပါစုိ႔။ codeေျဖအျပီး ျပန္လည္ရရွိတဲ႔ C matrixကုိ ကြ်န္ေတာ္တုိ႔အသုံးျပဳခဲ႔ quality matrixနဲ႔ ျပန္ေျမွာက္ေပးတာပါ။ Q10သုံးခဲ႔ရင္Q10 ၊ Q50သုံးခဲ႔ရင္ Q50ေပါ႔ေလ။
အဲဒါဆုိရင္ ဥပမာအေနနဲ႔ ကြ်န္ေတာ္တုိ႔ ေအာက္ပါmatrixကုိ ရရွိပါျပီ။
ဒါရျပီးရင္ေတာ႔ Inverse DCTနည္းနဲ႔ ေနာက္matrixတစ္ခု ေျပာင္းယူရပါဦးမယ္။ ပုံေသနည္းကေတာ႔ ေအာက္ပါအတုိင္းပါ။
တီဆုိတာ ဘာmatrixလဲ၊ တီပရုိင္းဆုိတာ ဘာ matrixလဲ ဆုိတာ ေမ႔သြားရင္ေတာ႔ တတိယအဆင္႔ကုိ ျပန္ႀကည္႔ေပးပါေနာ္။
ကဲ ေနာက္ဆုံး N matrix ရျပီဆုိရင္ျဖင္႔ ကြ်န္ေတာ္တုိ႔ဟာ color codeေတြ ျပန္လည္ရရွိျပီျဖစ္ပါတယ္။ display screen မွာ image အျဖစ္ ျပန္လည္ေဖာ္ျပႏုိင္ဖုိ႔ ကာလာအေရာင္မ်ားအျဖစ္ ျပန္လည္ေရးသြင္းရုံပဲ ျဖစ္ပါတယ္။
JPEG compression လုပ္ျခင္းျဖင္႔ ဖုိင္ဆုိဒ္ေလ်ာ႔က်သြားေႀကာင္းကုိေတာ႔ ေအာက္ပါ matrix ႏွစ္ခုကုိ ႏႈိင္းယွဥ္ႀကည္႔ျခင္းျဖင္႔ သိသာသြားျပီျဖစ္ပါတယ္ခင္ဗ်ာ။
အနည္းဆုံးအေနနဲ႔ compression လုပ္ထားတဲ႔ပုံဟာ မူရင္းပုံထက္ ခုနစ္ဆယ္ရာခုိင္ႏႈန္း ဖုိင္ဆုိဒ္ေလ်ာ႔နည္းသြားျပီျဖစ္ပါတယ္။
သည္လုိ အဆင္႔ေပါင္းေျမာက္ျမားစြာကုိ ျဖတ္ေက်ာ္ျပီးမွသာလွ်င္ ကြ်န္ေတာ္တုိ႔ဟာ quality သိသိသာသာမေလ်ာ႔က်ေသာ္လည္း ဖုိင္ဆုိဒ္သိသိသာသာေလွ်ာ႔ခ်ေပးႏုိင္ေသာ JPEG type ျဖစ္တဲ႔ ဓာတ္ပုံမ်ားကုိ ရရွိျခင္းျဖစ္ေႀကာင္းပါခင္ဗ်ား။

ျပီးဆုံးသည္အထိ သည္းခံျပီး ဖတ္ရႈေပးခဲ႔ႀကသူအေပါင္းအား ေက်းဇူးအထူးတင္ရွိပါသည္။

ကုိးကား
(၁) Image compression and discrete cosine transform – Ken Cabeen and Peter gent
(၄) An Introduction to Image Compression - Speaker: Wei-Yi Wei
      Advisor: Jian-Jung Ding
      Digital Image and Signal Processing Lab
                                                               GICE, National Taiwan University


No comments:

Post a Comment