C# - Image Processing (Brightness Algorithm)

Posted by ေတဇာလင္း Monday 20 February 2017 0 comments

မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမမ်ား အားလံုးပဲ မဂၤလာပါဗ်ာ။ ဒီေန႔ေတာ့ က်ေနာ္တို႔ Visual Studio C# ကို အသံုးျပဳၿပီး Image တစ္ခုကို Brithtness အတိုး/အေလွ်ာ့လုပ္ၿပီး အလင္း/အေမွာင္ ခ်ိန္ယူႏိုင္တာေလးနဲ႔ပါတ္သတ္ၿပီး ေလ့လာၾကည့္ပါ့မရ္။ က်ေနာ့္ ေလ့က်င့္ခန္းေတြကေတာ့ စတင္ ေလ့လာသူမ်ားအတြက္သာ ရည္ရြယ္ပါတရ္။ ဒါေၾကာင့္ သိေနၿပီးသား သူမ်ားအေနနဲ႔ နားလည္ေပးၾကဖို႔နဲ႔ က်ေနာ္ရဲ႕ တင္ျပပံု မွားယြင္းတာမ်ားရွိခဲ့ရင္ ျပန္လည္ေထာက္ျပေပးႏိုင္ဖို႔ ေမွ်ာ္လင့္ပါတရ္ဗ်။
Brightness ဆိုတာကေတာ့ Image တစ္ခုကို အလင္း/အေမွာင္ ခ်ိန္ညိႈႏိုင္ဖို႔အတြက္ အသံုးျပဳတဲ့ Algorithm တစ္ခုပဲ ျဖစ္ပါတရ္။ Image တစ္ခုကို Region ေတြ အေသးစိတ္ခြဲၿပီး Pixel တစ္ခုခ်င္းစီကို Detect လုပ္ကာ စိတ္ႀကိဳက္ အလင္း/အေမွာင္ကို ခ်ိန္ယူႏိုင္ပါတရ္။ အႏုစိတ္ႏိုင္ေလ ပံုထြက္ေကာင္းေလပါပဲဗ်။ ဒီေလ့က်င့္ခန္းမွာေတာ့ Image ရဲ႕ Pixel အားလံုးကို Detect လုပ္ၿပီး Brightness အတိုး/အေလွ်ာ့ကို စိတ္ႀကိဳက္ကစားၾကည့္မွာ ျဖစ္ပါတရ္။ အလင္း/အေမွာင္ပဲ ခ်ိန္တာေလးကို ပံုထြက္ေကာင္းတရ္ေျပာလို႔ အမ်ိဳးေတာ့ မထင္ၾကပါနဲ႔ Camera အသံုးျပဳဖူးသူေတြနဲ႔ ဆယ္ဖီသမားေတြအတြက္ကေတာ့ မီး အလင္း/အေမွာင္ရဲ႕ အေရးပါမႈကို ေကာင္းေကာင္း သိၾကမရ္ထင္ပါတရ္။ ရုပ္ရွင္ေတြမွာ မီးထိုး၊ မွန္ထိုးတာေတြကလည္း ဒီ အလင္း/အေမွာင္ကို စိတ္ႀကိဳက္ ကစားၾကတာပါ။
Brightness က အလင္း/အေမွာင္ ခ်ိန္ယူတာလို႔ ေျပာခဲ့ပါတရ္။ ဒီေတာ့ Brightness ကို ေလ့လာတဲ့အခါ အလင္းနဲ႔အေမွာင္ဆိုၿပီ ႏွစ္ပိုင္းခြဲၿပီး ေလ့လာႏိုင္ပါတရ္။ အလင္းဘက္ကိုပဲသြားသြား၊ အေမွာင္ဘက္ကိုပဲသြားသြား Color range က (0 to 255) သာရွိလို႔ ဒီ scope ထဲက လြတ္သြားလို႔မရပါဘူး။ ဒီေတာ့ က်ေနာ္တုိ႔ အလင္း/အေမွာင္ကို ကစားလို႔ရတဲ့ Range က (-255 to +255) ေပါ့။
Algorithm ကိုခ်ဥ္းကပ္တဲ့ ပံုစံကေတာ့ ထူးထူးျခားျခားမရွိပါဘူးဗ်။ ပထမဦးဆံုး Pixel တစ္ခုကို Detect လုပ္ၿပီး R, G, B Color Value ေတြကို ဆြဲထုတ္ပါတရ္။ ရလာတဲ့ R, G, B တန္ဖိုးေတြကိုမွ မိမိတို႔လိုခ်င္တဲ့ အလင္း/အေမွာင္ တန္ဖိုးနဲ႔ ေပါင္းေပးၿပီး မူရင္း Pixel ရဲ႕ R, G, B value ေတြထဲ ျပန္ထည့္ေပးလိုက္တာပါ။ အလင္းဘက္သြားခ်င္ရင္ အေပါင္းတန္ဖိုးနဲ႔ ေပါင္းမရ္။ အေမွာင္ဘက္သြားခ်င္ရင္ အႏုတ္တန္ဖိုးနဲ႔ ေပါင္းေပးယံုေပါ့။ ဥပမာ အလင္းဘက္ကို သြားမရ္ဆိုပါစို႔-
Brightness Value = 45;
Pixel = RGB(120, 114, 50);
Brightness Processing,
Pixel = RGB(120+45, 114+45, 50+45); = RGB(165, 159, 95);

ဒီလိုပါပဲ။ အေမွာင္ဘက္ကို သြားမရ္ဆိုရင္ေတာ့...
Brightness Value = -45;
Pixel = RGB(120, 114, 50);
Brightness Processing,
Pixel = RGB(120+(-45), 114+(-45), 50+(-45)); = RGB(75, 69, 5);
ကဲ... ဒီေလာက္ဆိုရင္ေတာ့ Brightness Algorithm ရဲ႕ သေဘာတရားကို သိၿပီလို႔ ထင္ပါတရ္။ က်ေနာ္တို႔ GUI ေဖာက္ Coding ေရးၿပီး လက္ေတြ႔ေလ့လာၾကည့္ရေအာင္။ ဒါကေတာ့ က်ေနာ္တို႔ Project မွာ အသံုးျပဳမရ္ Library File ေတြပါ။ ဒီေန႔ ေလ့က်င့္ခန္းအတြက္ GUI တည္ေဆာက္ျခင္းအပိုင္းမွာေတာ့ က်ေနာ္ Button(1)ခု၊ Label(1)ခု၊ PictureBox(2)ခုနဲ႔ TrackBar(1)ခုကို အသံုးျပဳထားပါတရ္။ Tools ေတြရဲ႕ Properties ေတြကိုေတာ့ ေအာက္က Table အတိုင္း ျပင္ယူလိုက္ၾကပါဗ်ာ။
က်ေနာ္ကေတာ့ ေအာက္ကပံုအတိုင္း ပံုစံခ်ထားပါတရ္ဗ်ာ။ မိတ္ေဆြတို႔အေနနဲ႔ေတာ့ GUI ကို ႀကိဳက္သလို ပံုေဖာ္ ဖန္တီးႏိုင္ပါတရ္ဗ်။
ဒီေန႔ ေလ့က်င့္ခန္းမွာေတာ့ Brightness Processing အတြက္ TrackBar ကိုသံုးထားပါတရ္။ TrackBar ကို Initial Value = 255 ေပးထားတာကေတာ့ Brightness In/Out အတြက္ TrackBar ကို စမွတ္ 255 မွာ Zero Line ခ်လိုက္တာပါ။ ဒါမွ ကနဦး ဆြဲတင္လိုက္ေသာ Image ဟာ 255(0%)မွာ ေဖာ္ျပၿပီး 255 ေအာက္ငယ္သြားရင္ Bright Out Process ျဖစ္တဲ့ အေမွာင္ဘကိုကုိလုပ္္ကာ 255 ထက္မ်ားသြားရင္ေတာ့ Bright In Process ျဖစ္တဲ့ အလင္းဘက္ကိုလုပ္ပါလို႔ ခိုင္းလို႔ရမွာပါ။ နားလည္ၾကလိမ့္မရ္လို႔ ေမွ်ာ္လင့္ပါတရ္။ ဒီေတာ့ TrackBar ရဲ႕ Value အခ်ိန္းအေျပာင္းေပၚမူတည္ၿပီး Brightness Result ေျပာင္းလဲ လုပ္ေဆာင္သြားမွာျဖစ္ပါတရ္။ TrackBar ကို D-Click ေပးၿပီး ေအာက္က Method ေလးကို ေရးယူလိုက္ပါဗ်ာ။ Method ကိုေတာ့ Processing လုပ္မရ္႕ Image နဲ႔ Brightness Changing အတြက္ Value ကုိ Parameter Passing လုပ္ထားပါတရ္။ Pixel Detection လုပ္တဲ့ လုပ္ငန္းစဥ္ကိုေတာ့ က်ေနာ္တို႔ ေရွ႕မွာေလ့လာခဲ့ၿပီးျဖစ္တဲ့ Fast Image Processing ေလ့က်င့္ခန္းအတိုင္း Detect လုပ္ထားပါတရ္။ နားမလည္ေသးတဲ့ မိတ္ေဆြတို႔အတြက္ ေရွ႕သင္ခန္းစာေတြကို ျပန္ဖတ္ေပးပါလို႔ တိုက္တြန္းပါရေစ။ R, G, B Brightness Value အတိုး/အေလွ်ာ့ လုပ္သြားတဲ့ပုံကိုေတာ့ က်ေနာ္ အေပၚမွာ ဥပမာနဲ႔ အေသစိတ္ရွင္းျပခဲ့ပါတရ္။ Coding မွာ ခက္ခဲတာ ဘာမွမပါလို႔ နားလည္ၾကလိမ့္မရ္လို႔ ေမွ်ာ္လင့္ပါတရ္ဗ်။
ဒါကေတာ့ Calling Method ပံုစံပါ။ if()statement နဲ႔စစ္ထားတာကေတာ့ Processing လုပ္မရ္႕ Image ကုိဆြဲတင္ၿပီး ရွိ/မရွိ သိခ်င္လို႔ပါ။ မိတ္ေဆြတို႔ အားလံုးကို ၿခံဳငံုနားလည္သြားေအာင္ ေအာက္မွာ Coding အျပည့္အစံုကို ေလ့လာႏိုင္ပါတရ္ဗ်။ မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုး ေလ့လာျခင္းျဖင့္ ေက်နပ္ႏိုင္ၾကပါေစ။

0 Responses so far.

Post a Comment