Saturday, January 4, 2014

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


JPEG ရရွိရန္ လုပ္ေဆာင္ပုံအဆင္႔ဆင္႔

JPEGရရွိဖုိ႔ compression လုပ္တဲ႔အခါ ပညာရွင္တစ္ဦးနဲ႔ တစ္ဦး အဆင္႔သတ္မွတ္တာျခင္း မတူညီႀကပါဘူး။ အနည္းဆုံးအေနနဲ႔ေတာ႔ အဆင္႔ငါးဆင္႔ ရွိပါတယ္။
(က) မူရင္းပုံတြင္ ပါရွိေသာ RGBကာလာမ်ားကုိ YCbCr ကာလာမ်ားအျဖစ္ ေျပာင္းလဲျခင္း။
(ခ) ရရွိေသာ YCbCrမ်ားကုိ downsample ျပဳလုပ္ျခင္း။
(ဂ) DCT (descrete cosine transform) နည္းျဖင္႔ ေျပာင္းလဲျခင္း။
(ဃ) quantisation ျပဳလုပ္ျခင္း။
(င) code မ်ား အျဖစ္ ေျပာင္းလဲသတ္မွတ္ကာ ကာလာမ်ား ျပန္လည္ျဖည္႔သြင္းျခင္းျဖစ္ပါတယ္။
ဒီအဆင္႔ေတြကုိ အဆင္႔ဆင္႔လုပ္ေဆာင္ျပီးသြားရင္ေတာ႔ JPEG image တစ္ခုကုိ ရရွိျပီျဖစ္ပါတယ္။

(က) မူရင္းပုံတြင္ ပါရွိေသာ RGBကာလာမ်ားကုိ YCbCr ကာလာမ်ားအျဖစ္ ေျပာင္းလဲျခင္း

အရင္ဆုံးအေနနဲ႔ RGB ဆုိတာ ဘာလဲ သိဖုိ႔လုိပါမယ္။ Rဆုိတာ red-အနီေရာင္၊ Gဆုိတာ green-အစိမ္းေရာင္ နဲ႔ Bဆုိတာကေတာ႔ blue-အျပာေရာင္တုိ႔ပဲ ျဖစ္ပါတယ္။ ဓာတ္ပုံတစ္ပုံမွာ ပါတဲ႔ အေရာင္အားလုံးဟာ သည္အေရာင္ေတြကုိ အေျခခံျပီး ကြဲျပားသြားတာျဖစ္ပါတယ္။ ဆုိႀကပါစုိ႔။ အ၀ါေရာင္ကုိ လုိခ်င္တယ္ဆုိရင္ အနီေရာင္နဲ႔ အစိမ္းေရာင္ကုိ စပ္ရပါတယ္။ ဒါကုိ ပန္းခ်ီဆရာေတြနဲ႔ ဓာတ္ပုံဆရာေတြ ပိုသိပါလိမ္႔မယ္။ ကြ်န္ေတာ္ကေတာ႔ ဒီသုံးေရာင္ကုိ စပ္ျခင္းျဖင္႔ အျခားအေရာင္ေတြ ရတယ္ဆုိတာေလာက္ပဲ သိပါတယ္။ RGBအေျခခံကာလာမ်ားအျဖစ္ သတ္မွတ္ထားျခင္းရဲ႕ အဓိက ရည္ရြယ္ခ်က္ကေတာ႔ electronic နဲ႔ digital စနစ္ေတြမွာ ကာလာမ်ားကုိ အာရုံခံဖုိ႔နဲ႔ ပုံရိပ္အျဖစ္ေဖာ္ျပႏုိင္ဖုိ႔ သတ္မွတ္ထားတာပါ။

RGB ကာလာ ေရာစပ္ျခင္းပုံ

ရယူထားတဲ႔ ပုံတစ္ပုံရဲ႕ ကာလာဖြဲ႔စည္းပုံမွာ RGB components (ပါ၀င္ေသာအစိတ္အပုိင္းမ်ား) ဘယ္ေလာက္ပါလဲဆုိတာ အရင္စစ္ေဆးျပီး အဲဒီ RGB components ေတြကုိ YCbCr components မ်ားအျဖစ္ ေျပာင္းလဲပစ္ရပါတယ္။ YCbCrအစား တခ်ိဳ႕က YUV components မ်ားအျဖစ္ ေျပာင္းလဲတဲ႔နည္းကုိလည္း သုံးႀကပါတယ္။
ဘယ္လုိေျပာင္းလဲသလဲဆုိေတာ႔ ေအာက္ပါပုံေသနည္းေတြနဲ႔ ေျပာင္းလဲႏုိင္ပါတယ္။ ေအာက္ပါပုံေသနည္းေတြဟာ ဒႆမတစ္ေနရာစာအတြက္ပဲ ျဖတ္ထားတာမုိ႔ ပုိအေသးစိတ္လုိတဲ႔အခါ ဒႆမငါးလုံးေျခာက္လုံးေလာက္ထိျဖတ္ထားတဲ႔ ပုံေသနည္းေတြလဲ ရွိပါတယ္။
Y = 0.3R + 0.6G + 0.1B
U = B – Y
V = R – Y
Cb = U/2+0.5
Cr = V/1.6+0.5
ဒီYUV တုိ႔၊ YCbCrတုိ႔ဟာ ရုပ္ျမင္သံႀကားထုတ္လႊင္႔ျခင္းလုပ္ငန္းေတြလုိ မ်ိဳးမွာလည္း သုံးပါတယ္။ ကာလာအတြက္ standard တစ္ခုဆုိပါေတာ႔။
YCbCrဆုိတာ တကယ္ေတာ႔ တစ္ခုက အလင္းအေမွာင္ေတာက္ပမႈကုိ ကုိယ္စားျပဳျပီး၊ ေနာက္ႏွစ္ခုက အေရာင္မ်ားကုိ ကုိယ္စားျပဳပါတယ္။ အလင္းအေမွာင္ေတာက္ပမႈဆုိတာ အျဖဴအမည္းကုိယ္စားျပဳျခင္းလုိ႔လဲ ယူဆႏုိင္ပါတယ္။
အဲဒီYCbCrပါ၀င္မႈကုိေတာ႔ အသုံးျပဳတဲ႔ ကိရိယာ(ဥပမာ ကင္မရာ)ရဲ႕ pixelေပၚမူတည္ သတ္မွတ္ပါတယ္။ pixel တစ္ခုမွာ YCbCrဘယ္ေလာက္ပါ၀င္သလဲ ခြဲျခားသတ္မွတ္ပါတယ္။ ဥပမာ 64pixel ရွိတယ္ဆုိရင္ ေျခာက္ဆယ္႔ေလးကြက္ခဲြျပီး YCbCrကုိ သပ္သပ္စီ သတ္မွတ္ျခင္းျဖစ္ပါတယ္။
(ကင္မရာေတြမွာ pixelမ်ားေလ၊ ေကာင္းေလပဲလုိ႔ ေျပာႀကတာ ႀကားဖူးႀကမယ္ထင္ပါတယ္။ ဘာေႀကာင္႔လဲဆုိေတာ႔ ဓာတ္ပုံရဲ႕ ေတာက္ပမႈနဲ႔ကာလာပါ၀င္ေတြျဖစ္တဲ႔ YCbCrကုိ pixelေပၚ မူတည္ျပီး သတ္မွတ္လုိ႔ပါပဲ။ pixelမ်ားေလ၊ မူရင္းပုံရဲ႕ ေတာက္ပမႈနဲ႔ကာလာပါ၀င္မႈကုိ ပုိမုိခြဲျခားႏုိင္ေလ၊ ရရွိလာတဲ႔ ဓာတ္ပုံက ပုိမုိႀကည္လင္ျပတ္သားေလပဲေပါ႔။)

ကင္မရာမွာ ပါ၀င္ေသာ pixelအတုိင္း pixelမ်ား အကြက္လုိက္ခြဲထားတဲ႔ပုံပါ။ အကြက္တစ္ကြက္ကုိ Pixel တစ္ခုျဖစ္ပါတယ္။
Pixelတစ္ခုခ်င္းစီအလုိက္ RGBတြက္ခ်က္ျပီး YCbCr componentsမ်ား ဘယ္ေလာက္ပမာဏရွိမလဲ သတ္မွတ္ႏုိင္ျပီဆုိရင္ေတာ႔ ဒုတိယအဆင္႔ကုိ တက္လုိ႔ရပါျပီ။

(ခ) ရရွိေသာ YCbCrမ်ားကုိ downsample ျပဳလုပ္ျခင္း

ဒုတိယအဆင္႔ကေတာ႔ ပထမအဆင္႔မွ တြက္ခ်က္ရရွိထားတဲ႔ YCbCr componentsမ်ားကုိ downsampling လုပ္ျခင္းပါပဲ။ Downsampleလုပ္တာဟာ မူရင္းပုံရဲ႕ ပမာဏကုိ qualityသိသိသာသာမေလ်ာ႔က်ေစဘဲ ေလွ်ာ႔ခ်တဲ႔အဆင္႔တစ္ခုလဲ ျဖစ္ပါတယ္။
လူသားရဲ႕မ်က္လုံးဟာ CbCr components ေတြမွာ အေျပာင္းအလဲျဖစ္သြားတယ္ဆုိတာထက္ Y မွာ အေျပာင္းအလဲျဖစ္သြားတာကုိ ပိုသတိထားမိတတ္ပါတယ္။ ျမန္မာလုိ အလြယ္ေျပာရမယ္ဆုိရင္ေတာ႔ ပုံတစ္ပုံမွာ ကာလာေတြတုိးလာတာ ေလ်ာ႔သြားတာထက္ အျဖဴပုိမ်ားလာတာ၊ အနက္ပုိမ်ားလာတာကုိ လူ႔မ်က္လုံးက ပုိျပီး သိျမင္ခြဲျခားႏုိင္တယ္ဆုိတဲ႔ သေဘာပါပဲ။
ဒါေႀကာင္႔ pixelေတြကုိ downsample လုပ္တဲ႔အခါ Yတန္ဖုိးကုိ pixel တစ္ခုခ်င္းစီမွာ မူလတြက္ခ်က္ရရွိထားတဲ႔ တန္ဖုိးအတုိင္းပဲ ထားျပီး CbCrေတြကုိပဲ သက္ဆုိင္ရာ အခ်ိဳးအလုိက္ ေလွ်ာ႔ခ်သြားတာကုိ လုပ္ႀကပါတယ္။
ဒီလုိ YCbCr အခ်ိဳးအစားေတြဟာလဲ သူ႔ဘာသာ သတ္မွတ္ခ်က္ေတြရွိပါတယ္။ 4:4:4၊ 4:2:2၊ 4:1:1 စသျဖင္႔ေပါ႔ေလ။ 4:4:4 ကေတာ႔ မူလအခ်ိဳးအစားအတုိင္း pixelေတြမွာ သက္ဆုိင္ရာ componentsတန္ဖုိးေတြ ေလွ်ာ႔ခ်ျခင္း မရွိဘူးဆုိတဲ႔ သေဘာေပါ႔။ က်န္တဲ႔ အခ်ိဳးေတြကေတာ႔ ေလွ်ာ႔ခ်သြားတယ္ဆုိတာ ေတြ႔ႏုိင္ပါတယ္။
4:2:2 ကေတာ႔ Y ေလးခု (pixel ေလးခု)တုိင္းမွာ Yက ေလးခု၊ Cbက ႏွစ္ခုနဲ႔ Crက ႏွစ္ခုပဲ ရွိတယ္ဆုိတဲ႔ သေဘာပါ။ က်န္တဲ႔ ႏွစ္ခုစီကုိ ေလွ်ာ႔ခ်သြားတဲ႔ သေဘာေပါ႔။
4:1:1 ကေတာ႔ Y ေလးခု (pixel ေလးခု)တုိင္းမွာ Yက ေလးခု၊ Cbက ႏွစ္ခုနဲ႔ Crက တစ္ခုပဲ ရွိတယ္ဆုိတဲ႔ သေဘာပါ။ က်န္တဲ႔ သုံးခုစီကုိ ေလွ်ာ႔ခ်သြားတဲ႔ သေဘာေပါ႔။
အခ်ိဳးအစားမ်ားကေတာ႔ ႀကိဳက္ႏွစ္သက္သလုိ ေလွ်ာ႔ခ်ႏုိင္ပါတယ္။ 4:2:1၊ 4:2:0 စသျဖင္႔လဲ ေလွ်ာ႔ခ်လုိ႔ ရႏုိင္ပါတယ္။
ေအာက္မွာ သက္ဆုိင္ရာအခ်ိဳးအစားလုိက္ ေလွ်ာ႔ခ်ပုံမ်ားကုိ နားလည္ေစရန္ ပုံနဲ႔ ေဖာ္ျပထားပါတယ္။



ဆက္ရန္...


No comments:

Post a Comment