C# - Image Processing (Color Addition/Subtraction Algorithm)

Posted by ေတဇာလင္း Thursday 9 March 2017 0 comments

မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမမ်ား အားလံုးပဲ မဂၤလာပါဗ်ာ။ ဒီေန႔ေတာ့ က်ေနာ္တို႔ Visual Studio C# နဲ႔ Image တစ္ခုထဲသို႔ မိမိႏွစ္သက္ရာ Color တစ္ခုအား ေပါင္းထည့္၍ သို႔မဟုတ္ နဳတ္ယူ၍ ရုပ္လံုးေဖာ္ယူႏိုင္တာေလးကို ေလ့လာၾကည့္ပါ့မရ္။ နည္းပညာ Term အရေတာ့ Color Addition/Subtraction Algorithm လို႔ေခၚပါတရ္။ က်ေနာ့္ ေလ့က်င့္ခန္းေတြကေတာ့ စတင္ ေလ့လာသူမ်ားအတြက္သာ ရည္ရြယ္ပါတရ္။ ဒါေၾကာင့္ သိေနၿပီးသား သူမ်ားအေနနဲ႔ နားလည္ေပးၾကဖို႔နဲ႔ က်ေနာ္ရဲ႕ တင္ျပပံု မွားယြင္းတာမ်ားရွိခဲ့ရင္ ျပန္လည္ေထာက္ျပေပးႏိုင္ဖို႔ ေမွ်ာ္လင့္ပါတရ္ဗ်။
Algorithm ရဲ႕ သေဘာတရားကေတာ့ အရမ္းကို ရိုးရွင္းပါတရ္။ Detect လုပ္မိတဲ့ RGB Color Value ေတြကို မိမိတို႔ ေရြးခ်ယ္ေပးလိုက္ေသာ Color ရဲ႕ RGB Color Value နဲ႔ ေပါင္းျခင္း/နဳတ္ျခင္းကို ျပဳလုပ္ပါတရ္။ ေနာက္ ရလာတဲ့ တန္ဖုိးကို မူလ Pixel ထဲသို႔ ျပန္လည္ Assign လုပ္လုိက္တာပဲျဖစ္ပါတရ္ဗ်။ ဥပမာအေနနဲ႔ေတာ့ က်ေနာ္ Color Addition/Subtraction Algorithm ကုိအသံုးျပဳၿပီး Color ေပါင္းျခင္း/နဳတ္ျခင္း ႏွစ္ခုစလံုးကို result ထုတ္ျပထားပါတရ္။ Screen Shoot ေတြကို ၾကည့္လိုက္ရင္ေတာ့ မိတ္ေဆြတို႔ နားလည္သြားၾကလိမ့္မရ္လို႔ ထင္ပါတရ္ဗ်။ Algorithm ရဲ႕ လုပ္ငန္းစဥ္ေတြကေတာ့ ေအာက္ပါအတိုင္းပဲျဖစ္ပါတရ္ဗ်။ Color Addition အတြက္ က်ေနာ္ Example မွာ pixel တစ္ခုစာ တြက္ျပထားပါတရ္။ အနည္းငယ္ ရွင္းျပရမရ္ဆိုရင္ေတာ့... ပထမဦးဆံုး Pixel ကို Detect လုပ္ၿပီး RGB Color Value ေတြကို ဆြဲထုတ္ယူပါတရ္။ ဒုတိယအဆင့္မွာေတာ့ Detect ရရွိေသာ RGB တန္ဖိုးေတြကို Specified Color ရဲ႕ RBG Value နဲ႔ေပါင္းယူပါတရ္။ ေနာက္ဆံုးအဆင့္မွာေတာ့ ရရွိလာေသာ New Color တန္ဖိုး မူလ Pixel အတြင္းသို႔ ျပန္ Assign လုပ္ယူလိုက္တာပဲ ျဖစ္ပါတရ္။ ဒီနည္းအတိုင္း last Pixel ေရာက္သည္အထိ တြက္ထုတ္ၿပီး Addition/Subtraction Color Image တစ္ခုအျဖစ္ ဖန္တီးယူလိုက္တာပဲ ျဖစ္ပါတရ္ဗ်။
မွတ္ခ်က္။ Color တစ္ခုရဲ႕ Range ဟာ 0 to 255 သာရွိလို႔ ၄င္း Range ထဲက လြတ္သြားလို႔ မရပါဘူး။ ဒါေၾကာင့္ Addition/Subtraction Processing မွာရရွိလာတဲ့ Color Value ဟာ သုည(0) ထက္ငယ္ေနရင္ 0 လို႔ယူၿပီး 255 ထက္ႀကီးသြားရင္ေတာ့ 255 လို႔ ယူရမရ္ဆိုတာကိုေတာ့ မေမ့ပါနဲ႔ဗ်။
ကဲ... ဒီေလာက္ဆိုရင္ေတာ့ Substitution Color Algorithm ရဲ႕ သေဘာတရားကို သိၿပီလို႔ ထင္ပါတရ္။ က်ေနာ္တို႔ GUI ေဖာက္ Coding ေရးၿပီး လက္ေတြ႔ေလ့လာၾကည့္ရေအာင္။ ဒါကေတာ့ က်ေနာ္တို႔ Project မွာ အသံုးျပဳမရ္ Library File ေတြပါ။ ဒီေန႔ ေလ့က်င့္ခန္းအတြက္ GUI တည္ေဆာက္ျခင္းအပိုင္းမွာေတာ့ က်ေနာ္ Button(1)ခုနဲ႔ PictureBox(2)ခု၊ Panel(1) ခုနဲ႔ ComboBox(1)ခုကို အသံုးျပဳထားပါတရ္။ Tools ေတြရဲ႕ Properties ေတြကိုေတာ့ ေအာက္က Table အတိုင္း ျပင္ယူလိုက္ၾကပါဗ်ာ။
က်ေနာ္ကေတာ့ ေအာက္ကပံုအတိုင္း ပံုစံခ်ထားပါတရ္ဗ်ာ။ မိတ္ေဆြတို႔အေနနဲ႔ေတာ့ GUI ကို ႀကိဳက္သလို ပံုေဖာ္ ဖန္တီးႏိုင္ပါတရ္ဗ်။
က်ေနာ္တို႔ Processing လုပ္မရ္႕ Color အတြက္ Panel Box ႏွစ္ခုကို သံုးထားပါတရ္။ Panel Box ရဲ႕ Click_Event ေတြမွာ ColorDialog Box ေတြကိုေခၚၿပီး မိမိႏွစ္သက္ရာ Color ကိုေရြးခ်ယ္မွာျဖစ္ပါတရ္။ က်ေနာ္ကေတာ့ Color Loading နည္းလမ္းႏွစ္ခုအတြက္ Method ခြဲေရးထားပါတရ္။ ေအာက္မွာ ေလ့လာၾကည့္လုိက္ပါဗ်ာ။ LoadColor()Method နဲ႔ Calling ပံုစံေတြကိုေတာ့ ေရွ႕သင္ခန္းစာမွာ ေလ့လာခဲ့ၿပီးျဖစ္လို႔ က်ေနာ္ မရွင္းျပေတာ့ပါဘူးဗ်။ အထက္ပါ Coding အားလံုးရဲ႕ ရည္ရြယ္ခ်က္ကေတာ့ Processing လုပ္မဲ့ Specified Color ကို ေရြးခ်ယ္ဖို႔ပါပဲဗ်ာ။ ခက္ခဲတာမပါလို႔ နားလည္မရ္လို႔ ေမွ်ာ္လင့္ပါတရ္ဗ်။
Addition/Subtraction Color Image ေျပာင္းလဲယူမရ္႕ Method ကိုေတာ့ ComboBox ရဲ႕ SelectedIndexChanged_Event ထဲမွာေရးပါတရ္။ ဒါေၾကာင့္ ComboBox ရဲ႕ Index ေျပာင္းလဲမႈအေပၚမူတည္ၿပီး Image Result ေျပာင္းလဲမႈရွိပါလိမ့္မရ္ဗ်။ Method ကိုေတာ့ Processing လုပ္မရ္႕ Image, Color Value နဲ႔ Processing Method တို႔ကို Parameter Passing လုပ္ထားပါတရ္။ Pixel Detection လုပ္တဲ့ လုပ္ငန္းစဥ္ကိုေတာ့ က်ေနာ္တို႔ ေရွ႕မွာေလ့လာခဲ့ၿပီးျဖစ္တဲ့ Fast Image Processing ေလ့က်င့္ခန္းအတိုင္း Detect လုပ္ထားပါတရ္။ နားမလည္ေသးတဲ့ မိတ္ေဆြတို႔အတြက္ ေရွ႕သင္ခန္းစာေတြကို ျပန္ဖတ္ေပးပါလို႔ တိုက္တြန္းပါရေစ။ Addition/Subtraction Color အလုပ္လုပ္သြားပံု အဆင့္ဆင့္ကိုေတာ့ က်ေနာ္ အေပၚမွာ ဥပမာနဲ႔ အေသစိတ္ရွင္းျပခဲ့ပါတရ္။ ComboxBox ရဲ႕ Index ႏွစ္ခုအတြက္ က်ေနာ္ Siwtch()statemet ကို အသံုးျပဳထားပါတရ္။ Index 0 က Addition Color အတြက္ျဖစ္ၿပီး Index 1 ကေတာ့ Subtraction Color အတြက္ျဖစ္ပါတရ္ဗ်။
Calling Method ေလးကို ဆက္ၾကည့္ၾကရေအာင္ဗ်ာ။ ဒါကေေတာ့ ComboBox Index ေျပာင္းလဲအမႈအေပၚ မူတည္ၿပီး Color Processing Method ေျပာင္းလဲယူဖို႔အတြက္ Calling Method အေျခအေနပါ။ if( )statement နဲ႔စစ္ထားတာကေတာ့ Processing လုပ္မရ္႕ Image ကုိဆြဲတင္ၿပီး ရွိ/မရွိ သိခ်င္လို႔ပါ။ မိတ္ေဆြတို႔ အားလံုးကို ၿခံဳငံုနားလည္သြားေအာင္ ေအာက္မွာ Coding အျပည့္အစံုကို ေလ့လာႏိုင္ပါတရ္ဗ်။ မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုး ေလ့လာျခင္းျဖင့္ ေက်နပ္ႏိုင္ၾကပါေစ။

0 Responses so far.

Post a Comment