C# - Image Processing (Negative Algorithm)

Posted by ေတဇာလင္း Wednesday 22 February 2017 0 comments

မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမမ်ား အားလံုးပဲ မဂၤလာပါဗ်ာ။ ဒီေန႔ေတာ့ က်ေနာ္တို႔ Visual Studio C# ကို အသံုးျပဳၿပီး Image တစ္ခုကို Negative View ပုံစံနဲ႔ ထုတ္ၾကည့္ႏိုင္တာေလးကို ေလ့လာၾကည့္ပါ့မရ္။ က်ေနာ့္ ေလ့က်င့္ခန္းေတြကေတာ့ စတင္ ေလ့လာသူမ်ားအတြက္သာ ရည္ရြယ္ပါတရ္။ ဒါေၾကာင့္ သိေနၿပီးသား သူမ်ားအေနနဲ႔ နားလည္ေပးၾကဖို႔နဲ႔ က်ေနာ္ရဲ႕ တင္ျပပံု မွားယြင္းတာမ်ားရွိခဲ့ရင္ ျပန္လည္ေထာက္ျပေပးႏိုင္ဖို႔ ေမွ်ာ္လင့္ပါတရ္ဗ်။
ဖလင္ကင္မရာေတြေခာတ္ကို မွီခဲ့တဲ့ မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမတို႔အတြက္ေတာ့ Negative Image ဆိုတာကို သိၾကမရ္ထင္ပါတရ္။ Negative Film လိပ္ေလးေတြကို တယုတယသိမ္းၿပီး ဓါတ္ပံုအျဖစ္ ျပန္ျပန္ကူးယူခဲ့ၾကရတာကိုဗ်။ Negative ဆိုတာက ရုိးရိုးရွင္းရွင္း ေျပာရရင္ Invert လုပ္လိုက္တာပါ။ 1 ဆိုရင္ 0 ေျပာင္း၊ အျဖဴဆိုအမဲ ေျပာင္းလိုက္တာေပါ့။ Pixel တစ္ခုစီမွာရွိတဲ့ Color ေတြကို Invert လုပ္ပစ္ႏိုင္မွာသာ က်ေနာ္တို႔လိုခ်င္တဲ့ Negative Image တစ္ခုကိုရရွိမွာ မဟုတ္လားဗ်။ Color Range 0 to 255 ၾကားမွ ဘာျဖစ္လာမရ္မွန္းမသိတဲ့ Color Value ကို Invert လုပ္ဖို႔ တစ္ခုတည္းေသာ နည္းလမ္းရွိပါတရ္။ ဒါကေတာ့ Color ရဲ႕ Upper Bound ျဖစ္တဲ့ 255 ထဲက Detect လုပ္လုိ႔ရရွိတဲ့ Color Value ကိုႏုတ္လိုက္ယံုပါပဲ။ ေအာက္မွာ အဆင့္လိုက္ အေသးစိတ္ Algorithm ေလးကို ၾကည့္လိုက္ပါ။ အနည္းငယ္ ရွင္းျပရမရ္ဆိုရင္ေတာ့... ပထမအဆင့္မွာ Image ရဲ႕ Pixel တစ္ခုကို Detect လုပ္ၿပီး R, G, B Color Value ေတြကို ဆြဲထုတ္ယူပါတရ္။ ဒုတိယအဆင့္မွာေတာ့ Color range ရဲ႕ Upper Bound ျဖစ္တဲ့ 255 ထဲက Detect ရရွိေသာ R, G, B Color တန္ဖိုးေတြကို နဳတ္ပါတရ္။ တတိယအဆင့္မွာေတာ့ အသစ္ရရွိလာေသာ R, G, B တန္ဖိုးေတြကို မူလ Pixel ရဲ႕ R, G, B Color တန္ဖိုးေတြေနရာကို ျပန္အစားထိုးလိုက္တာပါ။ ဒီနည္းလမ္းအတိုင္းပဲ Last Pixel ေရာက္သည္အထိ အလုပ္လုပ္ေစၿပီး Color Image တစ္ခုကို Negative Image အျဖစ္သို႔ ေျပာင္းလဲယူလိုက္တာပဲ ျဖစ္ပါတရ္ဗ်။ ဥပမာေလးနဲ႔တြဲၿပီးရွင္းထားလို႔ နားလည္ၾကလိမ့္မရ္လို႔ ေမွ်ာ္လင့္ပါတရ္။
မွတ္ခ်က္။ ဒီ Algorithm က Color Image ကုိ Negative Image အျဖစ္ ေျပာင္းလဲႏိုင္သလို၊ Negative Image ကို Color Image အျဖစ္ ျပန္လည္ေျပာင္းလဲယူႏိုင္ပါတရ္ဗ်။
ကဲ... ဒီေလာက္ဆိုရင္ေတာ့ Negative Algorithm ရဲ႕ သေဘာတရားကို သိၿပီလို႔ ထင္ပါတရ္။ က်ေနာ္တို႔ GUI ေဖာက္ Coding ေရးၿပီး လက္ေတြ႔ေလ့လာၾကည့္ရေအာင္။ ဒါကေတာ့ က်ေနာ္တို႔ Project မွာ အသံုးျပဳမရ္ Library File ေတြပါ။ ဒီေန႔ ေလ့က်င့္ခန္းအတြက္ GUI တည္ေဆာက္ျခင္းအပိုင္းမွာေတာ့ က်ေနာ္ Button(2)ခုနဲ႔ PictureBox(2)ခုကို အသံုးျပဳထားပါတရ္။ Tools ေတြရဲ႕ Properties ေတြကိုေတာ့ ေအာက္က Table အတိုင္း ျပင္ယူလိုက္ၾကပါဗ်ာ။
က်ေနာ္ကေတာ့ ေအာက္ကပံုအတိုင္း ပံုစံခ်ထားပါတရ္ဗ်ာ။ မိတ္ေဆြတို႔အေနနဲ႔ေတာ့ GUI ကို ႀကိဳက္သလို ပံုေဖာ္ ဖန္တီးႏိုင္ပါတရ္ဗ်။
NegativeImage( ) Method ေလးကို ေလ့လာၾကည့္ပါ့မရ္။ Button Click_Event ကိုသာ သံုးထားတဲ့အတြက္ေၾကာင့္ Negative Image Button ကို D_Click ေပးၿပီး ေအာက္ပါ Coding ေလးကို ေရးယူလိုက္ပါဗ်ာ။ Method ကိုေတာ့ Processing လုပ္မရ္႕ Image ကုိ Parameter Passing လုပ္ထားပါတရ္။ Pixel Detection လုပ္တဲ့ လုပ္ငန္းစဥ္ကိုေတာ့ က်ေနာ္တို႔ ေရွ႕မွာေလ့လာခဲ့ၿပီးျဖစ္တဲ့ Fast Image Processing ေလ့က်င့္ခန္းအတိုင္း Detect လုပ္ထားပါတရ္။ နားမလည္ေသးတဲ့ မိတ္ေဆြတို႔အတြက္ ေရွ႕သင္ခန္းစာေတြကို ျပန္ဖတ္ေပးပါလို႔ တိုက္တြန္းပါရေစ။ R, G, B Color Value ေတြကို Invert ေျပာင္း Negative လုပ္ယူပံုအဆင့္ဆင့္ကိုေတာ့ က်ေနာ္ အေပၚမွာ ဥပမာနဲ႔ အေသစိတ္ရွင္းျပခဲ့ပါတရ္။ Coding မွာ ခက္ခဲတာ ဘာမွမပါလို႔ နားလည္ၾကလိမ့္မရ္လို႔ ေမွ်ာ္လင့္ပါတရ္ဗ်။ ဒါကေတာ့ Calling Method ပံုစံပါ။ if( )statement နဲ႔စစ္ထားတာကေတာ့ Processing လုပ္မရ္႕ Image ကုိဆြဲတင္ၿပီး ရွိ/မရွိ သိခ်င္လို႔ပါ။ မိတ္ေဆြတို႔ အားလံုးကို ၿခံဳငံုနားလည္သြားေအာင္ ေအာက္မွာ Coding အျပည့္အစံုကို ေလ့လာႏိုင္ပါတရ္ဗ်။ မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုး ေလ့လာျခင္းျဖင့္ ေက်နပ္ႏိုင္ၾကပါေစ။

0 Responses so far.

Post a Comment