C# - Image Processing (Pink Color Filtering Algorithm)

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

မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမမ်ား အားလံုးပဲ မဂၤလာပါဗ်ာ။ ဒီေန႔ေတာ့ က်ေနာ္တို႔ Visual Studio C# နဲ႔ Image တစ္ခုအတြင္းမွာရွိတဲ့ Pink Color ႏွင့္ ၄င္းနဲ႔အနီးစပ္ဆံုးတူတဲ့ Color ေတြကို Detect လုပ္ယူႏိုင္တာေလးနဲ႔ ပါတ္သတ္ၿပီး ေလ့လာၾကည့္ပါ့မရ္။ Image and Color Filtering ေတြထဲက တစ္ခုေပါ့။ က်ေနာ့္ ေလ့က်င့္ခန္းေတြကေတာ့ စတင္ ေလ့လာသူမ်ားအတြက္သာ ရည္ရြယ္ပါတရ္။ ဒါေၾကာင့္ သိေနၿပီးသား သူမ်ားအေနနဲ႔ နားလည္ေပးၾကဖို႔နဲ႔ က်ေနာ္ရဲ႕ တင္ျပပံု မွားယြင္းတာမ်ားရွိခဲ့ရင္ ျပန္လည္ေထာက္ျပေပးႏိုင္ဖို႔ ေမွ်ာ္လင့္ပါတရ္ဗ်။
Algorithm ရဲ႕ သေဘာတရားကေတာ့ ရိုးရွင္းပါတရ္။ Image ရဲ႕ Pixel တိုင္းကို Detect လုပ္ၿပီး RGB Color Value ေတြကို ဆြဲထုတ္ပါတရ္။ ရရွိလာတဲ့ RGB Color Value ေတြကိုမွ Pink Filter Alogrithm ကိုျဖတ္ခိုင္းၿပီး Pink Color ဟုတ္/မဟုတ္ကို စစ္ေဆးပါတရ္။ Pink Color ျဖစ္ခဲ့ရင္ေတာ့ ၄င္း Pixel ကို RGB(255, 255, 255) အစားသြင္းၿပီး အျဖဴေရာင္ျဖစ္ Assign လုပ္ပါတရ္။ Pink Color မဟုတ္ခဲ့ရင္ေတာ့ RGB(0, 0, 0) အစားသြင္းကာ Pixel ကို အမဲေရာင္ျဖစ္ ျပန္ Assign လုပ္ပါတရ္ဗ်။ Result Screen Shoot ေတြကို ၾကည့္လိုက္ရင္ေတာ့ မိတ္ေဆြတို႔ နားလည္သြားၾက လိမ့္မရ္လို႔ ထင္ပါတရ္ဗ်။ Algorithm ရဲ႕ လုပ္ငန္းစဥ္ေတြကေတာ့ ေအာက္ပါအတိုင္းပဲျဖစ္ပါတရ္ဗ်။ Pink Color Filter ဖမ္းယူျခင္းအတြက္ က်ေနာ္ Example မွာ pixel တစ္ခုစာ တြက္ျပထားပါတရ္။ အနည္းငယ္ ရွင္းျပရမရ္ ဆိုရင္ေတာ့... ပထမဦးဆံုး Pixel ကို Detect လုပ္ၿပီး RGB Color Value ေတြကို ဆြဲထုတ္ယူပါတရ္။ ဒုတိယအဆင့္မွာေတာ့ Detect ရရွိေသာ RGB တန္ဖိုးေတြကို Pink Color ဟုတ္/မဟုတ္ စစ္ေဆးရန္ Pink Filter Algorithm ထဲကိုျဖတ္ပါတရ္။ Red > Green+60 နဲ႔ Red > Blue-20 က ဒီ Algorithm ရဲ႕ အဓီကအသက္ပါ။ ဒီ Condition ႏွစ္ခုစလံုးမွန္ခဲ့မွသာလွ်င္ Pink Color ပါလို႔မွတ္ယူၿပီး Detected Pixel ကို အျဖဴေရာင္ Color နဲ႔ ဖမ္းယူမွာျဖစ္ပါတရ္။ Condition ႏွစ္ခုထဲက တစ္ခုခု မွားခဲ့ရင္ေတာ့ Pink Color မဟုတ္ဘူးဆိုတာ Auto သိၿပီး Detected Pixel ကို အမဲေရာင္ Color နဲ႔ ဖမ္းယူမွာျဖစ္ပါတရ္။ ဒီနည္းအတိုင္း last Pixel ေရာက္သည္အထိ တြက္ထုတ္ၿပီး Pink Color Filter လုပ္ၿပီးသား Image တစ္ခုအျဖစ္ ဖန္တီးယူလိုက္တာပဲ ျဖစ္ပါတရ္ဗ်။
မွတ္ခ်က္။ ေအာက္ပါ Pink Color ရဲ႕ RGB Value ကို ေလ့လာႏိုင္ပါတရ္။
Pink Color Value နဲ႔ Algorithm ကိုၾကည့္ရင္ က်ေနာ္တို႔ ဒီ Algorithm ဟာ အထက္ပါပံုက Pink Color ေတြကိုသာ အတိအက် Detect လုပ္တာ မဟုတ္ဘူးဆိုတာကို ေတြ႔ရမွာပါ။ Pixel ကို Detect လုပ္တဲ့အခါ Color Value ေတြဟာ အရမ္းကို Sensitive ျဖစ္လြန္းတာေၾကာင့္ အနီးစပ္ဆံုး ဒီ Algorithm နဲ႔ စစ္ထုတ္ၿပီး Pink Color ကို ဆြဲထုတ္တာပါဗ်။ တိတိက်က် Pink Color ေတြႀကီး ဆြဲထုတ္ခ်င္ရင္ေတာ့ Detect လုပ္မိတဲ့ RGB Color Value ေတြဟာ အထက္ပါပံုက Pink Color တန္ဖိုးေတြနဲ႔ ညီ/မညီ Condition ေတြနဲ႔ စစ္ထုတ္ႏိုင္ပါတရ္။ ဒီနည္းအတိုင္းပါပဲ မည္သည့္ Color ကုိမဆို စစ္ထုတ္ႏိုင္ပါလိမ့္မရ္ဗ်။
ကဲ... ဒီေလာက္ဆိုရင္ေတာ့ Processing ရဲ႕ သေဘာတရားကို သိၿပီလို႔ ထင္ပါတရ္။ က်ေနာ္တို႔ GUI ေဖာက္ Coding ေရးၿပီး လက္ေတြ႔ေလ့လာၾကည့္ရေအာင္။ ဒါကေတာ့ က်ေနာ္တို႔ Project မွာ အသံုးျပဳမရ္ Library File ေတြပါ။ ဒီေန႔ ေလ့က်င့္ခန္းအတြက္ GUI တည္ေဆာက္ျခင္းအပိုင္းမွာေတာ့ က်ေနာ္ Button(2)ခုနဲ႔ PictureBox(2)ခုကို အသံုးျပဳထားပါတရ္။ Tools ေတြရဲ႕ Properties ေတြကိုေတာ့ ေအာက္က Table အတိုင္း ျပင္ယူလိုက္ၾကပါဗ်ာ။
က်ေနာ္ကေတာ့ ေအာက္ကပံုအတိုင္း ပံုစံခ်ထားပါတရ္ဗ်ာ။ မိတ္ေဆြတို႔အေနနဲ႔ေတာ့ GUI ကို ႀကိဳက္သလို ပံုေဖာ္ ဖန္တီးႏိုင္ပါတရ္ဗ်။
Pink Filter Image ေျပာင္းလဲယူမရ္႕ Method ကိုေတာ့ Button ရဲ႕ Click_Event ထဲမွာေရးပါတရ္။ ဒါေၾကာင့္ Pink Detect Button ကို D-Click ေပးၿပီး ေအာက္ပါ Coding ကုိေရးယူလိုက္ပါဗ်ာ။ Method ကိုေတာ့ Processing လုပ္မရ္႕ Image ကို Parameter Passing လုပ္ထားပါတရ္။ Pixel Detection လုပ္တဲ့ လုပ္ငန္းစဥ္ကိုေတာ့ က်ေနာ္တို႔ ေရွ႕မွာေလ့လာခဲ့ၿပီးျဖစ္တဲ့ Fast Image Processing ေလ့က်င့္ခန္းအတိုင္း Detect လုပ္ထားပါတရ္။ နားမလည္ေသးတဲ့ မိတ္ေဆြတို႔အတြက္ ေရွ႕သင္ခန္းစာေတြကို ျပန္ဖတ္ေပးပါလို႔ တိုက္တြန္းပါရေစ။ Pink Filter Image အလုပ္လုပ္သြားပံု အဆင့္ဆင့္ကိုလည္း က်ေနာ္ အေပၚမွာ ဥပမာနဲ႔ အေသစိတ္ရွင္းျပခဲ့ပါတရ္။
က်ေနာ္ Processing ႏွစ္မ်ိဳးနဲ႔ Screen Shoot လုပ္ျပထားပါတရ္။ ေရွ႕ဆက္ၿပီး Calling Method ေလးကို ဆက္ေလ့လာၾကည့္ၾကမရ္ဗ်ာ။ ဒါကေေတာ့ Calling Method အေျခအေနပါ။ if( )statement နဲ႔စစ္ထားတာကေတာ့ Processing လုပ္မရ္႕ Image ကုိဆြဲတင္ၿပီး ရွိ/မရွိ သိခ်င္လို႔ပါ။ မိတ္ေဆြတို႔ အားလံုးကို ၿခံဳငံုနားလည္သြားေအာင္ ေအာက္မွာ Coding အျပည့္အစံုကို ေလ့လာႏိုင္ပါတရ္ဗ်။ မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုး ေလ့လာျခင္းျဖင့္ ေက်နပ္ႏိုင္ၾကပါေစ။

0 Responses so far.

Post a Comment