OpenCV ကိǽေလ့လာြခင်း Open Source Computer Vision သင့်စက်အတွက်အြမင် ကိǽေအး coolemerald.blogspot.com Monday 27 th March, 2017

Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

Embed Size (px)

Citation preview

Page 1: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

OpenCV ကေလလာြခငး

Open Source Computer Vision

သငစကအတကအြမင

ကေအး

coolemerald.blogspot.com

Monday 27th March, 2017

Page 2: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

ေကျးဇးတငလာ

OpenCV အေကာငး ေရးေတာ image processing န ပတသက ပး အကအညေတ

ေပးခ ကတ မတေဆေတက သတရမ၊ ေကျးဇးတငမပါတယ။ ၂၀၀၉ ေလာကက C န

image processing ေတလပေတာ စာအပေတပေပးခတ ေငမးေအာငက ေကျးဇးတငတ

အေကာငးေြပာချငပါတယ။ အဒ အချနတနးက algorithm ေတေတာေတာများများ

က ကယဟာကယပ implement လပရေတာ connected component labeling

တလ နညးေတန မတဆကေပး၊ အကဉာဏေကာငးေတ အ မေပးခတ ေဇာမငးဦးက

အရမး ေကျးဇးတငပါတယ။ ၂၀၁၀ ေလာကကOpenCV န မတဆကေပး၊ စာအပေတပါ

ေပးခတ ဉာဏပငစး ကလညး အထးေကျးဇးတငပါတယ။ OpenCV န ပတသက ပး

အားေပး၊ တကတနးခ ကတ ေနဦး၊ သကမနေထး တက လညး သတတရ ေကျးဇး

တငမ ပါတယ။ ေနာကဆးအေနန ကေတာက နေတာအေပ ချစခင၊သညးခ၊ ြဖညဆညး

ေပးတ ချစဇနး သရ က ေကျးဇးတငတ အေကာငး ေြပာပါရေစ။

i

Page 3: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

မာတကာ

ေကျးဇးတငလာ i

မာတကာ ii

ပများ v

ဇယားများ vii

သေကတ၊အေခ အေဝ များ viii

၁ မတဆက ၁

၁.၁ ေနာကခအေကာငးအရာ . . . . . . . . . . . . . . . . . . . . . . . . ၁

၁.၂ ဖစညးပ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ၂

၁.၃ OpenCV က Linux တင တပဆငြခငး . . . . . . . . . . . . . . . . ၃

၁.၃.၁ OpenCV က GCC ၊ CMake တ ြဖင အသးြပ ြခငး . . . . . . ၅

၁.၃.၂ OpenCV က Qt ြဖင အသးြပ ြခငး . . . . . . . . . . . . . . ၇

၁.၄ OpenCV က Windows တင တပဆငြခငး . . . . . . . . . . . . . . ၁၁

၁.၅ Source ကဒများ . . . . . . . . . . . . . . . . . . . . . . . . . . . . ၁၉

၂ တညရာနယတငြပ စပြခငးများ ၂၀

၂.၁ ေချာမတရနြပ ြပငြခငးများ . . . . . . . . . . . . . . . . . . . . . . . ၂၀

၂.၁.၁ boxFilter . . . . . . . . . . . . . . . . . . . . . . . . . . . ၂၀

ii

Page 4: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

မာတကာ iii

၂.၁.၂ blur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ၂၂

၂.၁.၃ GaussianBlur . . . . . . . . . . . . . . . . . . . . . . . . . ၂၂

၂.၁.၄ medianBlur . . . . . . . . . . . . . . . . . . . . . . . . . . ၂၃

၂.၂ filter2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ၂၆

၂.၃ Thresholding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ၂၉

၂.၄ ပလးေဖာလပေဆာငချကများ . . . . . . . . . . . . . . . . . . . . . ၃၅

၂.၄.၁ တကစားြခငး (erosion) . . . . . . . . . . . . . . . . . . . . ၃၅

၂.၄.၂ ေဖာငးပြခငး (dilation) . . . . . . . . . . . . . . . . . . . . ၃၆

၂.၄.၃ morphologyEx . . . . . . . . . . . . . . . . . . . . . . . . ၃၆

၂.၅ အေရာငနယေြပာငးလြခငးများ . . . . . . . . . . . . . . . . . . . . ၄၀

၂.၆ Source ကဒများ . . . . . . . . . . . . . . . . . . . . . . . . . . . . ၄၂

၃ ကမ နးနယတငြပ စပြခငးများ ၄၃၃.၁ ကမ နးနယပယ၏ Gaussian Filter များ . . . . . . . . . . . . . . . ၄၄

၃.၂ ကမ နးနယ၏ Butterworth Filter များ . . . . . . . . . . . . . . . ၄၅

၃.၃ Wiener Filtering . . . . . . . . . . . . . . . . . . . . . . . . . . . ၅၂

၃.၄ Source ကဒများ . . . . . . . . . . . . . . . . . . . . . . . . . . . . ၆၀

၄ ဗဒယြပ စပြခငး ၆၁၄.၁ ဗဒယ ဖတြခငး၊ေရးြခငး . . . . . . . . . . . . . . . . . . . . . . . . ၆၁

၄.၂ Real-time Face Detection . . . . . . . . . . . . . . . . . . . . . . ၆၄

၄.၃ Source ကဒများ . . . . . . . . . . . . . . . . . . . . . . . . . . . . ၆၈

၅ ပရပခြခမးသးသပ ာေဖြခငးများ ၇၀၅.၁ Connected Component Labeling . . . . . . . . . . . . . . . . . ၇၀

၅.၂ Template Matching . . . . . . . . . . . . . . . . . . . . . . . . . ၇၄

၅.၃ Harris Corner Detector . . . . . . . . . . . . . . . . . . . . . . . ၇၈

၅.၄ ြမနမာ ငင၏ဗဟ . . . . . . . . . . . . . . . . . . . . . . . . . . . . ၈၀

၅.၅ Source ကဒများ . . . . . . . . . . . . . . . . . . . . . . . . . . . . ၈၅

Page 5: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

iv မာတကာ

A ေနာကဆကတ ငးလငးချက ၈၆၁.၁ ThresholdTypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . ၈၆

အကးအကားများ ၉၀

Page 6: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

ပများ

၁.၁ DisplayImage ပ ဂရမ ၏ ရလာဒ က terminal င ယ တ ြပထား

သည။ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ၇

၁.၂ Qt တင new project တစခက ဖနတးြခငး။ . . . . . . . . . . . . . ၉

၁.၃ ပ ဂရမမ ထကေပလာသည သရ၏ မရငးပ င အြဖ အမညး ပများ။ ၁၀

၁.၄ Environment variable အသစထပထညြခငး။ . . . . . . . . . . . . ၁၂

၁.၅ Visual Studio 2015 တင project အသစ တစခ ဖနတးြခငး။ . . . . ၁၂

၁.၆ Platform က x64 အားေရးြခငး။ . . . . . . . . . . . . . . . . . . . . ၁၃

၁.၇ Property Manager ကဖငြခငး။ . . . . . . . . . . . . . . . . . . . . ၁၃

၁.၈ Property Sheet ထညြခငး။ . . . . . . . . . . . . . . . . . . . . . . ၁၄

၁.၉ Include directory အားသတမတြခငး။ . . . . . . . . . . . . . . . . ၁၅

၁.၁၀ Library directory အား သတမတြခငး။ . . . . . . . . . . . . . . . . ၁၅

၁.၁၁ Library အမညအား သတမတြခငး။ . . . . . . . . . . . . . . . . . . ၁၆

၁.၁၂ Deprecation က disable လပြခငး။ . . . . . . . . . . . . . . . . . ၁၇

၁.၁၃ Mask လပ၍ရသည ရလဒ။ . . . . . . . . . . . . . . . . . . . . . . ၁၉

၂.၁ Smoothing filter များက ငးယ ေဖာြပြခငး။ . . . . . . . . . . . . ၂၅

၂.၂ filter2D ၏ရလဒများက ငးယ ေဖာြပြခငး။ . . . . . . . . . . . . . ၂၈

၂.၃ Thresholding ရလဒများက ငးယ ေဖာြပြခငး။ . . . . . . . . . . . ၃၄

v

Page 7: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

vi ပများ

၂.၄ ပလးေဖာလပေဆာငချကများ၏ရလဒများက ငးယ ေဖာြပြခငး။ Open-

ing တင အြဖ ေရာင အစကများ ေပျာကသား သည။ Closing တင

အမညး ေရာင အစကများ ေပျာကသား သည။ . . . . . . . . . . . . ၃၉

၂.၅ မရငးပ၊ mask င အေရာငေြပာငး ပးသည ပများ။ . . . . . . . . . . ၄၂

၃.၁ ကမ နးနယ တင filtering လပြခငး။ . . . . . . . . . . . . . . . . . ၄၄

၃.၂ GLPF၏ ပမာဏအားအလငး ြပငးအား၊ အနမ အြမင တ ြဖင ေဖာြပ

ထားပ။ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ၄၅

၃.၃ နမနာအေန င channel တစခထက ကမ နးနယတငဖယတာြခငး။ . ၅၂

၃.၄ Noiseထ၍ဝါးေနေသာပကWiener filter ြဖင deblurလပ ပးသည

အခါ ရလာေသာ ရလဒ။ . . . . . . . . . . . . . . . . . . . . . . . . ၆၀

၄.၁ တချန င တေြပးည မျက ာ ာေဖြခငး။ . . . . . . . . . . . . . . . . ၆၈

၅.၁ ဆကစပေနေသာ နယေြမ များအားအစကတနဖးတစခြခငးအေန င

ေတ င ပး၊ သတ၏ label များ၊ အေရအတက၊အကးဆး နယေြမ၏

အကျယအဝနး၊ ဗဟတက ေဖာြပထားသည။ . . . . . . . . . . . . . ၇၃

၅.၂ Template matching လပ၍ရေသာ ပ။ . . . . . . . . . . . . . . . . ၇၇

၅.၃ ေထာင အသငအြပင များက ာေဖြခငး။ . . . . . . . . . . . . . . . ၇၉

၅.၄ ြမနမာ ငင ေြမပအား Googlemaps မရယလကေသာမရငး င၊ GIMP

ကသး၍ အစနး များ င အတ crop လပ၊ အြဖ အမညး ေြပာငးထားပ။ ၈၁

၅.၅ ြမနမာြပည ေြမပ၏ အလယဗဟ။ . . . . . . . . . . . . . . . . . . . ၈၄

Page 8: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

ဇယားများ

၁.၁ Threshold အမျ းအစားများ၏ ညမ ြခငးများ။ . . . . . . . . . . . . . ၈၇

vii

Page 9: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

သေကတ၊အေခ အေဝ များ

OpenCV . . . . . . . . . . . . . . . . . . Open source computer vision

vs14 . . . . . . . . . . . . . . . . . . . . . . Visual studio 2015

x86 . . . . . . . . . . . . . . . . . . . . . . . A family of backward compatible 32 bit instruction set

architectures based on the Intel 80386 CPU

x64 . . . . . . . . . . . . . . . . . . . . . . . The 64-bit version of the x86 instruction set

DFT . . . . . . . . . . . . . . . . . . . . . Discrete Fourier Transform

ကမ နးနယ . . . . . . . . . . . . . . . Frequency domain

တညရာနယ . . . . . . . . . . . . . . . . Spatial domain

ပရပြပ စပြခငး . . . . . . . . . . . . . Image processing

ပလးေဖာလပေဆာငချကများ Morphological operation

ြပကက . . . . . . . . . . . . . . . . . . . . Frame

ြပ နး . . . . . . . . . . . . . . . . . . . . . Frame rate

viii

Page 10: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

သေကတ၊အေခအေဝ များ ix

ဖယတာ . . . . . . . . . . . . . . . . . . . Filter

အေရာငနယ . . . . . . . . . . . . . . . Color space

ြဖညစကအာ ရပ . . . . . . . . . . . Augmented reality

Page 11: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

အခနး ၁

မတဆက

OpenCVသညပညာေရးအတကသာမက၊ စးပားေရးအတကပါအလကားသးစခင ေသာ

free software တစခြဖစ ပး၊ BSD license ငထတသည [1]။ C/C++ ၊ Python ၊

Java များ ငတဖကအသးြပ င ပး၊ Windows ၊ Linux ၊MacOS များအေပတငသာမက

iOS ၊ Androidအစ ေသာmobile platformများအတကပါအလပလပသည။OpenCV

ကထေရာကြမနဆနစာတကချကမ ငအချန ငအမအေရးကးေသာ real-timeအသးချမ

များအတကအဓကထားကာဒဇငးထဆစြပလပထားသည။ C/C++သး၍ေရးထားသြဖင

multi-core processing များ၏ေကာငးကကကလညးအသးချ ငသည။OpenCVကအ

ပညာလပငနးများမအစ၊ မငး ာြခငး၊ ေြမပများချတဆကြခငး၊အဆငြမငစက ပများဖန

တးြခငးအထနယပယအမျ းမျ းတငကျယကျယြပန ြပနအသးြပ ေနကသည။

၁.၁ ေနာကခအေ ကာငးအရာ

OpenCV၏အဓပါယ မာOpen Source Computer Vision Library ြဖစ၍ မရငးကဒ

များအား ဖငြပထားသည။ကနပျ တာ င စကအြမငဆငရာလပငနး များတငကးကား

အသးြပ စရာ ေဆာဖဝ library ြဖစသည။OpenCVက စတင ဖနတးစ မစ၍ကနပျ တာ

င စကအြမငဆငရာ အများ သငါ အလယအကအသးြပ ငသည ဘယ ရားတစခ

ရရန ရညရယသည။ စးပားေရးထတကန များတငပါ စကအြမငဆငရာအပငး များတင

Page 12: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၂ အခနး ၁. မတဆက

တးတကမ ေစရန ြဖစသည။ BSD-license ငေပးထား သညအတက စးပားေရး

လပငနး များတင အလယတကယသး၊ ြပ ြပ င နငသည။

ဤ library တင အေကာငးဆး ရေစရန ချနည ထားေသာ နညးလမး (algorithm)

ေပါငး ၂၅၀၀ ေကျာ သည။ နညးေဟာငးများ မစ၍ ေနာကဆးေပ နညးလမးသစ

များအထ ြပညစ စပစာ ပါဝငသည။ ထနညးလမး များက မျက ာ များက ာေဖ

သ ြခငး၊ မတမြခငး (face detection and recognition)၊ အရာဝတ များက ခြခား

သ ြခငး (object identification)၊ ဗဒယ အတငးမ လ အမအရာ များက ခြခား သတ

မတြခငး (classification of human actions)၊ ေရလ ား ေနေသာ အရာဝတ များ

ေနာကလကြခငး (tracking moving objects)၊ သးဘကြမင ေမာဒယ ထတြခငး (3D

modeling)၊ ပပ များက ဆကြခငး (stiching)၊ သမးထားသည ပများ ထမ တေသာ

ပက ေရးထတြခငး၊ ခငး များက မတမြခငး၊ ြဖညစကအာ ရပ (augmented real-

ity) များအတက အမတ အသား များ လပြခငး တတင အသးြပ ငသည။

၁.၂ ဖစညးပ

OpenCVကအပငး (module) များ ခ၍တညေဆာကထားသည။ထေ ကာင များစာေသာ

sharedသမဟတ static libraries များ ပါဝင ေနသည။အဓကအသး များေသာအပငး

များမာ ေအာကပါ အတငး ြဖစသည [2]။

core အေြခခ အချကအလက ပစများ၊ multi-dimensional array Mat င အြခား

အပငးများ အတကပါ လအပေသာ အေြခခ လပေဆာငချက များ (core func-

tionalities) ပါဝငသည ကျစလစသည အေြခခ ကျေသာ အပငး ြဖစသည။

imgproc ပပ များက ပထက ြပ ြပငေသာ ဖယတာ (filter) များ၊ ပ အရယ အစား၊

အြမင ေြပာငးြခငး များ၊ အေရာင ေြပာငးြခငး များ၊ histogramအစ သညတ

ပါဝငေသာ ပရပြပ စပြခငး (image processing) အပငး ြဖစသည။

video ဗဒယ များက ခြခမးသးသပ၍ေရလျားမက ခနမနး ြခငးများ၊ ေနာကခ ြမငကငး

က ဖယေဖျာက ြခငးများ၊အရာ ဝတ များေနာက ေြခရာခ ြခငး များတ ပါဝငသည

Page 13: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၁.၃. OPENCV က LINUX တင တပဆငြခငး ၃

အပငး ြဖစသည။

calib3d ကငမရာ ချနညြခငး (camera calibration)၊ object pose ခနမနး ြခငး၊

stereo correspondence algorithms၊ သးဘက ြမငကငး ြပန တညေဆာက

ြခငး (3D reconstruction) တ ပါဝင သည။

features2d ပများ အဓကအသငအြပင (salient feature) များက ာြခငး င de-

scriptor matcher များ ပါဝငသည။

objdetect သတမတ ထားေသာ အရာ ဝတ များက ာြခငး (ဥပမာ မျက ာ (face

detection)၊ မျကလး၊ မတခက၊ လ၊ ကား၊ စသည များ)။

highgui း ငးသည UI (user interface) လပေဆာငမ များအတက အလယတက

သး ငေသာ interface ြဖစသည။

Video I/O ဗဒယ များ ဖမးယ ြခငး၊ င video codecs များ ပါဝင သည။

gpu OpenCV module များ အတက GPU accelerated algorithm များ ပါဝင

သည။

အြခားအပငး များလညး ေသးသည။လက OpenCVကတညေဆာကထားပမာ

fully re-enterable ြဖစ သြဖင function တစခ က မတည ေသာ thread များမ

ပ ငတ သး င သည။

၁.၃ OpenCV က Linux တင တပဆငြခငး

ေအာကပါအဆင များက Ubuntu 16.04 LTSတငOpenCV-3.2.0အားသး၍စမး ကည

ထားသည [3]။ အြခား ဗား ငး များ အတကလညး အဆငေြပ ငသည။

ပထမအဆငအေန င ေအာကပါ packages များ စကထတင ရနလအပသည။

1. GCC 4.4.x or later

Page 14: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၄ အခနး ၁. မတဆက

2. CMake 2.6 or higher

3. Git

4. GTK+2.x or higher, including headers (libgtk2.0-dev)

5. pkg-config

6. Python 2.6 or later and Numpy 1.5 or later with developer packages

(python-dev, python-numpy)

7. ffmpeg or libav development packages: libavcodec-dev, libavformat-

dev, libswscale-dev

8. (optional) libtbb2 libtbb-dev

9. (optional) libdc1394 2.x

10. (optional) libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev, libdc1394-

22-dev

ထ packages များအား စကထသ ထညသငး လပါက Synaptic Manager သး၍

ေသာ လညးေကာငး၊ terminalinal တင ေအာက စာရငး ၁.၁ ပါ command များ

က ပ၍ ေသာ လညးေကာငး ထည င သည။

1 sudo apt−get i n s t a l l bui ld−e s s e n t i a l

2 sudo apt−get i n s t a l l cmake g i t l i bg t k2 .0−dev pkg−conf ig

l ibavcodec−dev l ibav format−dev l i b swsca l e−dev

3 sudo apt−get i n s t a l l python−dev python−numpy l ib tbb2 l ib tbb−dev

l ib jpeg−dev l ibpng−dev l i b t i f f −dev l i b j a s pe r−dev l ibdc1394

−22−dev

စာရငး ၁.၁: OpenCV အတက လအပေသာ packages များ ရယြခငး။

Page 15: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၁.၃. OPENCV က LINUX တင တပဆငြခငး ၅

လက ေနာကဆးထက OpenCVအေြခကျ ဗာ ငးက OpenCV for Linux/Mac

(http://opencv.org/downloads.html)တငယ ငသည။ Homeတင opencvဆသည

folder ဖ၍သမးလကမည။ထ zip ဖငအား ArchiveManagerသး၍ extractလပ ငသည။

ဤေနရာတင သးလကသည ဗား ငးအတက ရလာသည folder မာ opencv-3.2.0

ြဖစသြဖင ထ ေနရာသ သား၍ release ဆသည folder တစခ ဖနတးကာ ဖငများ

ထတ၍ သမးဆညးရန ေအာကပါ စာရငး ၁.၂ command များ ကမည။

1 cd ~/opencv / opencv−3.2 .0

2 mkdir r e l ea se

3 cd r e l ea se

4 cmake −D CMAKE_BUILD_TYPE=RELEASE −D CMAKE_INSTALL_PREFIX=/usr /

l o c a l . .

စာရငး ၁.၂: OpenCV က build လပြခငး။

ေခတ ေစာငဆငး ပးသည အခါ ေအာကပါ စာရငး ၁.၃ အတငး install လပမည။

1 make

2 sudo make i n s t a l l

စာရငး ၁.၃: OpenCV က install လပြခငး။

၁.၃.၁ OpenCV က GCC ၊ CMake တ ြဖင အသးြပ ြခငး

OpenCVကသးရနအလယဆး နညးမာ CMake ြဖင သးြခငး ြဖစသည [4]။ CMake

င မရငး း ပါကCMake tutorial (https://cmake.org/cmake-tutorial/)တငသား

ေရာက ေလလာ ငသည။

ပထမ ေြခလမး အေန င ပတစပက ဖတ၍ ြပသည း ငးသည နမနာ ေလးအား

စမးသပ ကညမည။ ထ အတက thiri.jpg ဆသည ဓာတပက home folder တင

ထားလက မည။ထေနာက ေအာကပါ DisplayImage.cpp (စာရငး ၁.၄)ဆသည ပ ဂရမ

Page 16: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၆ အခနး ၁. မတဆက

ေလးအား ဖနတး လကမည။ ပးသည အခါ DisplayImage ဟသည folder တစခ

ဖ၍ ထထ တင သမးဆညး လကမည။

1 #include <stdio.h>

2 #include <opencv2/opencv.hpp>

3 using namespace cv;

4 int main(int argc, char** argv )

5 {

6 Mat image;

7 image = imread( "/home/yan/thiri.jpg", 1 );

8 if ( !image.data ) {

9 printf("No image data \n");

10 return -1;

11 }

12 namedWindow("Display Image", WINDOW_AUTOSIZE );

13 imshow("Display Image", image);

14 waitKey(0);

15 return 0;

16 }

စာရငး ၁.၄: ပ တစပ က ဖတ၍ ြပသည DisplayImage ပ ဂရမ။

ဤေနရာ တင thiri.jpg အတက path မာ ”/home/yan/thiri.jpg” ြဖစ ပး သငပ

သည folder ၊ username တ င ကကညသည path က အစားထး ရမည။ imread

သည လမးေကာငး ေပးလကသည ပဖငက ဖတသည။ ဒတယ argument ြဖစသည

1 မာ ကာလာပ ဖတမည ဟဆလြခငး ြဖစသည။ 0 ဆပါကအြဖ အမညး ေြပာငး၍

ဖတမည။ ပက ဖတ၍ မရ ပါက message ကြပ၍ ထကသားမည ြဖစ ပး၊ ဖတ၍

ေအာငြမင ပါက imshowကသး၍ ပကထတြပမည ြဖစသည။တဖန CMakeLists.txt

ဆသည ဖငက ေအာကပါ စာရငး ၁.၅ အတငး ဖနတးမည။

1 cmake_minimum_required ( VERSION 2 . 8 )

2 pro j e c t ( DisplayImage )

3 f ind_package ( OpenCV REQUIRED )

Page 17: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၁.၃. OPENCV က LINUX တင တပဆငြခငး ၇

4 add_executable ( DisplayImage DisplayImage . cpp )

5 t a r g e t _ l i n k _ l i b r a r i e s ( DisplayImage $ { OpenCV_LIBS } )

စာရငး ၁.၅: CMakeLists.txt

ဤတင လချငသည ပ ဂရမ က ေအာကပါ စာရငး ၁.၆ command များအား

terminal တင ကြခငးြဖင ထတလပ ရ င၊ run ကည င သည။

1 cd DisplayImage

2 cmake .

3 make

4 . / DisplayImage

စာရငး ၁.၆: DisplayImage က build ၍ run ြခငး။

Run လကသည အခါ ေအာကပါ ပ ၁.၁ အတငး ရ မည။

ပ ၁.၁: DisplayImage ပ ဂရမ ၏ ရလာဒ က terminal င ယ တ ြပထား သည။

၁.၃.၂ OpenCV က Qt ြဖင အသးြပ ြခငး

အသး များေသာ IDE တစခ ြဖစသည Qt င OpenCV က အသး ြပ ြခငး အေကာငး

ေဆးေ း မည။ ေအာကပါ အဆင များက Ubuntu 16.04 LTS x64 တင Qt 5.8.0

Page 18: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၈ အခနး ၁. မတဆက

င OpenCV-3.2.0 အား သး၍ စမး ကည ထားသည။ Qt က ရယ၍ တပဆငရန

ေအာကပါ စာရငး ၁.၇ command များက terminal တင က ငသည။

1 wget http : / / download . qt . io / o f f i c i a l _ r e l e a s e s / qt / 5 . 7 / 5 . 7 . 0 / qt−

opensource−l i nux−x64 −5 . 7 . 0 . run

2 chmod +x qt−opensource−l i nux−x64 −5 . 7 . 0 . run

3 . / qt−opensource−l i nux−x64 −5 . 7 . 0 . run

စာရငး ၁.၇: Qt က Linux တင တပဆင ြခငး။

ထေနာက အြခား လအပေသာ g++ ၊ font configuration ၊ OpenGL များ ရယ

ရန ေအာကပါ စာရငး ၁.၈ အတငး လပေဆာင ငသည။

1 sudo apt−get i n s t a l l bui ld−e s s e n t i a l

2 sudo apt−get i n s t a l l l i b f on t con f i g1

3 sudo apt−get i n s t a l l mesa−common−dev

4 sudo apt−get i n s t a l l l i bg lu1−mesa−dev −y

စာရငး ၁.၈: Qt အတက အြခား လအပေသာ packages များရယ ြခငး။

တပဆင ပးပါက း ငးေသာOpenCV နမနာတစခက စမးသပရနQtက ဖငမည။

New Project က ပ၍ Non-Qt Project င Plain C++ Application က choose

မည (ပ ၁.၂)။

Project Location အတက DisplayImageQt စသြဖင အမညေပး၊ folder ဖ၍

ေရးချယ မည။ Build Systemတင qmakeအတငးထားမည။ Kit Selectionတငလညး

Desktop Qt 5.8.0 GCC 64bit အတငး ထား င သည။ Next ထပ ပ ၍ Project

Managementတင Noneအတငး ထားမည။ထေနာက Project ေအာကမ Sources

main.cpp တင ေအာကပါ စာရငး ၁.၉ ပ ဂရမ အတငး ေရးမည။

1 #include <stdio.h>

2 #include <opencv2/opencv.hpp>

3 using namespace cv;

4 int main(int argc, char** argv )

Page 19: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၁.၃. OPENCV က LINUX တင တပဆငြခငး ၉

ပ ၁.၂: Qt တင new project တစခက ဖနတးြခငး။

5 {

6 Mat image,bw_img;

7 image = imread( "/home/yan/thiri.jpg", 1 );

8 if ( !image.data ) {

9 printf("No image data \n");

10 return -1;

11 }

12 namedWindow("Original Image", WINDOW_AUTOSIZE );

13 imshow("Original Image", image);

14 cvtColor(image, bw_img, COLOR_BGR2GRAY);

15 namedWindow("BW Image", WINDOW_AUTOSIZE );

16 imshow("BW Image", bw_img);

17 waitKey(0);

18 return 0;

19 }

စာရငး ၁.၉: ပ တစပက ဖတြပ၍ အြဖ အမညး ေြပာငးေပးေသာ ပ ဂရမ။

Page 20: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၁၀ အခနး ၁. မတဆက

ဤ ပ ဂရမ တင ပက ဖတ၍ ရသည အခါ cvtColor က သး၍ အြဖ အမညး ပ

ြဖစေအာင ေြပာငးသည။တဖနDisplayImageQt.proဟသည ဖငက ဖင၍ ေအာကပါ

စာရငး ၁.၁၀ အတငး ြဖစေအာင ထပြဖည မည။

1 TEMPLATE = app

2 CONFIG += console c++11

3 CONFIG −= app_bundle

4 CONFIG −= qt

5 SOURCES += main . cpp

6 INCLUDEPATH += / usr / l o c a l / inc lude / opencv

7 L IBS += −L / usr / l o c a l / l i b −lopencv_core −lopencv_highgui −

lopencv_imgproc −lopencv_imgcodecs

စာရငး ၁.၁၀: DisplayImageQt.pro

ပးေနာက ပ ဂရမ အား run ကညပါက ပ ၁.၃ အတငး သရ၏ မရငး င အြဖ

အမညး ပများ လပစာ ေပထက လာမည။

ပ ၁.၃: ပ ဂရမမ ထကေပလာသည သရ၏ မရငးပ င အြဖ အမညး ပများ။

Page 21: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၁.၄. OPENCV က WINDOWS တင တပဆငြခငး ၁၁

၁.၄ OpenCV က Windows တင တပဆငြခငး

Windows အတကမ pre-built လပ ပး ြဖစေသာ လက ေနာကဆးထက OpenCV

အေြခကျ ဗာ ငးကသးမည။ ၄ငးအား OpenCV forWindows (https://sourceforge

.net/projects/opencvlibrary/files/opencv-win/) တင ယ ငသည။ ရ လာေသာ

opencv-3.2.0-vc14.exeအားဤနမနာအတက C:\opencv ေအာကတင opencv320

အေန င extract လပသည။

IDE အတက Visual Studio 2015 က Visual Studio 2015 (https://www.

visualstudio.com/downloads/) မ ရယ၍ installလပမည။ ေအာကပါအဆင များက

Windows 10 64 bit တင Visual Studio 2015 င OpenCV-3.2.0 အား သး၍

စမးကည ထားသည။ အြခား ဗား ငးများ အတကလညး ဆငတ ယးမား နညးလမး

များသာ ြဖစသည [5]။

64 bit windows င Visual Studio 2015အတက enviroment variableတစခ

အေန င OPENCV_DIRကသတမတ မည။ထအတက Commandwindowက ad-

ministrator အေန င run ရန start menuက right click ပ၍ command prompt

(admin) က ေရး ပး လျင ေအာကပါ စာရငး ၁.၁၁ အတငး ကထည ငသည။

1 setx −m OPENCV_DIR C : \ opencv \ opencv320 \ bu i ld \ x64 \ vc14

စာရငး ၁.၁၁: OPENCV_DIR က သတမတ ြခငး။

DLL များ သးသည အခါ bin folder သည ေနရာက system path တင ထညရန

အတက Rapid Environment Editorအစ သည utilityတကသး၍ေသာလညးေကာငး၊

This PC(My Computer) > Properties > Advanced System Settings > Ad-

vanced Tab > Environment variables > Edit System Variables တင Path

က ပ ၁.၄ တင ြပထား သကသ edit လပ ပး ေသာလညးေကာငး တနညးနညး သး၍

%OPENCV_DIR%\bin က system path အေန င ထည ငသည။

ထသ install လပြခငးများ ပးစး ပါက OpenCV က အသးြပ ၍ နမနာ တစခ

စမးသပကည မည။ Visual Studio 2015 က ဖင၍ ပ ၁.၅ ကသ project အသစ

Page 22: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၁၂ အခနး ၁. မတဆက

ပ ၁.၄: Environment variable အသစထပထညြခငး။

တစခ ဖနတး မည။ Installed > Visual C++>General > Empty Projectကေရးမည။

ပ ၁.၅: Visual Studio 2015 တင project အသစ တစခ ဖနတးြခငး။

ထေနာကညာဖက Solution Explorerအတငး Source Filesကညာဖကကလစ

ပကာ Add >New Item... မတဆင ေပလာေသာ pop-up windowတင Installed

Page 23: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၁.၄. OPENCV က WINDOWS တင တပဆငြခငး ၁၃

> Visual C++ > C++ File (.cpp) က ေရးကာ main.cpp အမည င ဖင အလတ

တခက ထညမည။ အေပ Tool bar Solution Platforms တင ပ ၁.၆ ကသ x86

အစား x64 သ ေြပာငးလက မည။

ပ ၁.၆: Platform က x64 အားေရးြခငး။

OpenCV င application များ ေရးရနလအပသညအလပ စခ သည။OpenCV

library များမာ မညသည ပစ ြဖစသညက compilerအား ေြပာရန င OpenCV func-

tion များ၊ data structure များအား မညသည ေနရာတင ယရ မညက linker အား

ေြပာရန ြဖစသည။ထအတက ပ ၁.၇တင ြပထားသကသ အေပ menu bar View

> Other Windows > Property Manager ကသား၍ ဖငမည။

ပ ၁.၇: Property Manager ကဖငြခငး။

Page 24: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၁၄ အခနး ၁. မတဆက

ပးေနာကညာဖက PropertyManagerတငလက လပမည configuration ြဖစေသာ

Debug|x64တငညာဖကကလစ ပ၍ AddNewProject Property Sheet... ကေရးကာ

’OpenCV320’အမည property sheetတစခ ဖနတးမည (ပ ၁.၈)။ Property sheet

က တစကမ ဖနတး ပးပါက ေနာက Project များတင Add New အစား Add Exist-

ing Property Sheet က ေရးကာ ြပနလည အသးြပ ငသည။

ပ ၁.၈: Property Sheet ထညြခငး။

ထေနာက Property Manager အတငး OpenCV320 အမည ေပတင ညာဖက

ကလစ ပကာ Propertiesက ေရးမည။ ေပလာသည Property Pagesတင C/C++

> General > Additional Include Directories ၌

$(OPENCV_DIR)\..\..\include

ဟြဖည ပး Apply က ပမည (ပ ၁.၉)။

တဖန Linker ေအာက General > Additional Library Directories ၌ ပ ၁.၁၀

ကသ

$(OPENCV_DIR)\lib

Page 25: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၁.၄. OPENCV က WINDOWS တင တပဆငြခငး ၁၅

ပ ၁.၉: Include directory အားသတမတြခငး။

ဟ န ပးသည အြပင မညသည library ဟ သတမတရန Linker ေအာက Input

> Additional Dependencies တင သးမည library modules များ၏ အမညက

ြဖညရမည။

ပ ၁.၁၀: Library directory အား သတမတြခငး။

ဤနမနာတငသးသည OpenCV 3.2.0အတက C:/opencv/opencv320/build/

x64/vc14/libတင opencv_world320.lib င opencv_world320d.libဟ၍ library

module စခ ေတ ငသည။ Debug mode အတက d င အဆးသတ သည mod-

ule သး င ပး၊ Release mode အတက ကျနတစခ က သးရမည။ Module နာမည

နပါတ 320 မာ opencv version 3.2.0အတက ြဖစ ပး၊သးသည version ေပ မတည၍

ေြပာငးမည။

ယခ နမနာ အတက ေအာကပါ library အမည

Page 26: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၁၆ အခနး ၁. မတဆက

opencv_world320d.lib

က ထညမည (ပ ၁.၁၁)။

ပ ၁.၁၁: Library အမညအား သတမတြခငး။

OpenCVတငသးသည fopenသည Visual Studio 2015 ၌ deprecation ြဖစသား

သညက disable လပရန C/C++ > Preprocessor > Preprocessor Definitions

တင

_CRT_SECURE_NO_DEPRECATE

ဟ ြဖညမည (ပ ၁.၁၂)။

OpenCV စမး ကညရန နမနာက ေအာကပါ စာရငး ၁.၁၂ အတငး ေရး ငသည။

1 #include <stdio.h>

2 #include <opencv2/opencv.hpp>

3 using namespace cv;

4 int main(int argc, char** argv)

5 {

6 Mat image;

Page 27: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၁.၄. OPENCV က WINDOWS တင တပဆငြခငး ၁၇

ပ ၁.၁၂: Deprecation က disable လပြခငး။

7 image = imread("C:/opencv/thiri.jpg",0);

8 if (!image.data) {

9 printf("No image data \n");

10 return -1;

11 }

12 namedWindow("Display Image", WINDOW_AUTOSIZE);

13 imshow("Display Image", image);

14

15 //Create a circular mask

16 int h = image.rows;

17 int w = image.cols;

18 Mat mask(h, w, CV_8UC1, Scalar(0, 0, 0));

19 circle(mask, Point(w / 2, h / 2), h / 3, 255, -1);

20

21 //Perform bitwise 'AND' to mask out

22 Mat im2;

23 bitwise_and(image, mask, im2);

24

Page 28: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၁၈ အခနး ၁. မတဆက

25 //Manipulate pixels

26 for (int i=0; i < h; i++)

27 for (int j=0; j < w; j++)

28 if (mask.at<uchar >(i, j) == 0)

29 im2.at<uchar >(i, j) = 128;

30 namedWindow("Masked Image", WINDOW_AUTOSIZE);

31 imshow("Masked Image", im2);

32

33 waitKey(0);

34 return 0;

35 }

စာရငး ၁.၁၂: main.cpp

ဤေနရာ တင thiri ၏ ပက C:/opencv/thiri.jpg တင ထားထား ပး၊ သ သည

ေနရာ full pathက ေရးဖ လသည။ Forward slashကလကခသြဖင“/”ကသးြခငးက

ငးလငးသည။ Backslash က သးလ ပါက escape character အေန င “\\” သးရန

သတြပ ပါ။

ဤ ပ ဂရမတင လမးေကာငး ေပးထားသည ပက ဖတသည အခါ ဒတယ ar-

gument မာ 0 ြဖစသြဖင အြဖ အမညး အေန င ဖတသည။ ထေနာက Mat က

သး ပး maskဆသည ပ အလတတခကအမညးေရာင (တနဖး 0အြပည) ြဖင ဖနတး

လကသည။

ပးသည အခါ circle က သး၍ အြဖ ေရာင စကဝငး တခ mask ၏ အလယ တင

ဆလကသည။ bitwise_andကသးလကသညအခါmaskတင 0 သည pixelအားလး

0 (အမညးေရာင) ြဖစသား၍၊ mask တင အြဖ ေရာင သည ေနရာများ (အလယ

စကဝငး) တငသာ မရငးပ ကျနခမည။

ပးလင for loopကသး၍mask၏အမညးေရာင pixelတစခြခငးစ၏တနဖးက

မးခးေရာင (128) ြဖစေအာင ေြပာငးလကသည။ ရလာသည ပက imshow ငြပသည။

ရလဒက ေအာကပါ ပ ၁.၁၃ တင ြမင ငသည။

Page 29: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၁.၅. SOURCE ကဒများ ၁၉

ပ ၁.၁၃: Mask လပ၍ရသည ရလဒ။

၁.၅ Source ကဒများ

ဤအခနး ပ ဂရမများ၏ source ကဒများက ေအာကပါ ေနရာတင ေတ ငသည။

• OpenCV Simple Project Templates onGitHub - https://github.com/yan9a/

OpenCV_Projects

Page 30: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

အခနး ၂

တညရာနယတငြပ စပြခငးများ

ဤ အပငးတင 2D ပရပများ၌ အမျ းမျ းေသာ linear င non-linear ဖယတာ (fil-

ter) များအား အသးြပ ပ က ေဖာြပပါမည [6]။ ပရပတခ၌ ေသာ အစက (pixel)

တခြခငးစတငသ ေနရာအနးအနား ေသာအြခားအစကများ၏တနဖးများ င ေပါငးစပ

ေြပာငးလြခငးများ ြပလပြခငး ြဖစသြဖင တညရာနယ ဖယတာ လပြခငး (spatial

filtering) ဟေြပာ ငသည။

၂.၁ ေချာမတရနြပ ြပငြခငးများ

၂.၁.၁ boxFilter

boxFilter သည ပရပ pixel ဟေခသည အစက တခချငးအား အနး အစကတနဖး

များ င ေပါငးစပ ေရာေ ာ ပး ပရပအား ဝါးေစသည။ သ၏ ပစမာ ေအာကပါ အတငး

ြဖစသည။

void boxFilter(InputArray src, OutputArray dst, int ddepth,

Size ksize,Point anchor=Point(-1,-1), bool normalize=true,

int borderType=BORDER_DEFAULT )

ထ parameters များမာ

၂၀

Page 31: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၂.၁. ေချာမတရနြပ ြပငြခငးများ ၂၁

src: သည input image ဟေခ ေသာ မရငး input အေန င ေပးရမည ပြဖစသည။

dst: သည output အေန င ထကလာမည image ြဖစ ပး src င အရယအစား ၊

အမျ းအစား တမည။

ddepth: သညထကလာမည output image၏ depth ြဖစသည။ ( -1 ဆပါက src

၏ depth င တမည။)

ksize: သည blurring kernel size ြဖစသည။

anchor: သည anchor point ဟေခ ေသာ kernel ၏ အေြခ ေနရာြဖစသည။ De-

fault တနဖးြဖစေသာ Point(-1,-1) ဆပါက အလယတညတည တင မည။

normalize: သည kernelကသ၏area င ြပနစား ပး normalizeလပမလပသတမတသည။

borderType: သည bordermodeဟေခ ေသာ ပအနားသတ အစကများတနဖးက

တကသည အခါ မညသည extrapolate နညးသးမည ကသတမတသည။

ဤ boxFilter function ၏ smooth လပေသာ kernel မာ ေအာကပါ အတငး

ြဖစသည။

K = α

1 1 . . . 1

1 1 . . . 1... ... . . . ...

1 1 . . . 1

(၂.၁)

ဤတင

α =

1

ksize.width×ksize.height, when narmalize=true

1, otherwise(၂.၂)

ြဖစသည။

Page 32: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၂၂ အခနး ၂. တညရာနယတငြပ စပြခငးများ

၂.၁.၂ blur

Blurသည normalized box filterကသး၍ ပက ဝါးေစသည။ boxFilterက ddepth

တင src၏depthအတငးထား ပး၊ normalizeတင true ေပးသည ငထပတညသည။

Blur filter ၏ ပစမာ ေအာကပါ အတငး ြဖစသည။

void blur(InputArray src, OutputArray dst, Size ksize,

Point anchor=Point(-1,-1),

int borderType=BORDER_DEFAULT )

၂.၁.၃ GaussianBlur

GaussianBlurသည Gaussian filterကသး၍ ပက ဝါးေစသည။ညကေညာစာ ဝါးေစသြဖင

ကမးေနေသာ ပများအား ေချာမတေစြခငး၊ noise များအား ေလျာပါးေစြခငး တတင

အသးများသည။ ဤ function ၏ ပစမာ

void GaussianBlur(InputArray src, OutputArray dst, Size ksize,

double sigmaX, double sigmaY=0,

int borderType=BORDER_DEFAULT )

ြဖစသည။ Parameters များမာ ေအာကပါအတငးြဖစသည။

src: သည input image ဟေခ ေသာ မရငး input အေန င ေပးရမည ပြဖစသည။

ထပတင channel အေရအတက ကကသေလာက င ပး သးသနစ process

လပမည ြဖစသည။သေသာ depthအေန င CV_8U, CV_16U, CV_16S, CV_32F,

CV_64F များမ တစမျ းမျ းသာ သး၍ရမည။

dst: သည output အေန င ထကလာမည image ြဖစ ပး src င အရယအစား ၊

အမျ းအစား တမည။

ksize: သည Gaussian kernel size ြဖစသည။ ksize.width င ksize.height တ

မတ၍ ရေသာလညး မ ဂဏနးတနဖးများသာ ြဖစရမည။သမဟတပါကသည

ြဖစနင ပး၊ ထတနဖးများအား sigma မတကယ လမမည။

Page 33: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၂.၁. ေချာမတရနြပ ြပငြခငးများ ၂၃

sigmaX: သည Gaussian kernel ၏ X ဝင း တေလာက standard deviation

ြဖစသည။

sigmaY: သည Gaussian kernel ၏ Y ဝင း တေလာက standard deviation

ြဖစသည။သည ြဖစပါက sigmaXအတငးယမည။ စခလးသည ြဖစေနပါက

ksize.width င ksize.height မတကယ လမမည။

borderType: သည bordermodeဟေခ ေသာ ပအနားသတ အစကများတနဖးက

တကသည အခါ မညသည extrapolate နညးသးမည ကသတမတသည။

၂.၁.၄ medianBlur

Median filter က သး ပး ပက ဝါးေစလပါက medianBlur အား သး ငသည။ Gaus-

sian filter င ယ လင ပ၏ ြပတသားမက ထခကမ ပနညးသည။ Salt and Pepper

noise များအား ဖယ ားရာတင အသးတညသည။ ဤ filter ၏ပစမာ

void medianBlur(InputArray src, OutputArray dst, int ksize)

ြဖစသည။ Parameters များမာ ေအာကပါ အတငးြဖစသည။

src: သည input image ဟေခ ေသာ မရငး input အေန င ေပးရမည ပြဖစသည။

ထပတင channel အေရအတက ၁ ခ၊ ၃ ခ၊ သမဟတ ၄ ခ ငသည။ ksize ၃

သမဟတ ၅ ဆပါက depth တင CV_8U, CV_16U, CV_32F တမ တစမျ းမျ း

သာ သး၍ ရမည။ ပကးေသာ ksize များအတက CV_8U တမျ းသာ ရမည။

dst: သည output အေန င ထကလာမည image ြဖစ ပး src င အရယအစား ၊

အမျ းအစား တမည။

ksize: သည aperture linear size ြဖစ ပး ၁ထကကးေသာမဂဏနးတနဖး များသာ

ြဖစရမည။ ဥပမာ ၃, ၅, ၇, ...

ေဖာြပခေသာ smoothing filter များအား ေအာကပါ စာရငး ၂.၁တင ြပထားေသာ

ပ ဂရမက သး၍ စမး ကည ငသည။

Page 34: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၂၄ အခနး ၂. တညရာနယတငြပ စပြခငးများ

1 #include <stdio.h>

2 #include <opencv2/opencv.hpp>

3 using namespace cv;

4 int main()

5 {

6 //Read original image

7 Mat image;

8 image = imread("C:/opencv/star.jpg",0);

9 if (!image.data) {

10 printf("No image data \n");

11 return -1;

12 }

13 namedWindow("Original Image", WINDOW_AUTOSIZE);

14 imshow("Original Image", image);

15

16 //Box filter

17 Mat im_box;

18 boxFilter(image, im_box, -1, Size(7, 7), Point(-1, -1), true,

BORDER_DEFAULT);

19 namedWindow("Box filter", WINDOW_AUTOSIZE);

20 imshow("Box filter", im_box);

21

22 //Gaussian filter

23 Mat im_gaussian;

24 GaussianBlur(image, im_gaussian , Size(7, 7), 0, 0);

25 namedWindow("Gaussian filter", WINDOW_AUTOSIZE);

26 imshow("Gaussian filter", im_gaussian);

27

28 //Median filter

29 Mat im_median;

30 medianBlur(image, im_median , 7);

31 namedWindow("Median filter", WINDOW_AUTOSIZE);

Page 35: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၂.၁. ေချာမတရနြပ ြပငြခငးများ ၂၅

32 imshow("Median filter", im_median);

33 waitKey(0);

34 return 0;

35 }

စာရငး ၂.၁: Smoothing filter များ အတက နမနာ ပ ဂရမ။

ပ ဂရမ၏ ရလဒများအား ေအာကပါ ပ ၂.၁ တင ငးယ ေဖာြပထားသည။

(a) မရငးပ။ (b) box filter ၏ ရလဒ။

(c) Gaussian filter ၏ ရလဒ။ (d) median filter ၏ ရလဒ။

ပ ၂.၁: Smoothing filter များက ငးယ ေဖာြပြခငး။

Page 36: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၂၆ အခနး ၂. တညရာနယတငြပ စပြခငးများ

၂.၂ filter2D

ပတစခက kernel တစခ င convolve လပေပးသည [7]။ မမစတ ကက custom

kernel အသးြပ ၍ ရသညမာ အားသာချကြဖစသည။ ဤ filter ၍ပစမာ

void filter2D(InputArray src, OutputArray dst,

int ddepth, InputArray kernel,

Point anchor=Point(-1,-1), double delta=0,

int borderType=BORDER_DEFAULT )

ြဖစသည။ ထတင သးရမည parameters များမာ ေအာကပါအတငး ြဖစသည။

src: သည input image ဟေခ ေသာ မရငး input အေန င ေပးရမည ပြဖစသည။

dst: သည output အေန င ထကလာမည image ြဖစ ပး src င အရယအစား ၊

အမျ းအစား တမည။

ddepth: သညထကလာမည output image၏ depth ြဖစသည။ ( -1 ဆပါက src

၏ depth င တမည။) ေအာကတင ြပထားေသာ အတများ ရသည။

• src.depth() = CV_8U, ddepth = -1/CV_16S/CV_32F/CV_64F

• src.depth() = CV_16U/CV_16S, ddepth = -1/CV_32F/CV_64F

• src.depth() = CV_32F, ddepth = -1/CV_32F/CV_64F

• src.depth() = CV_64F, ddepth = -1/CV_64F

kernel: သည convolution kernel ြဖစသည။ single-channel floating pointma-

trix ြဖစသည။ မတေသာ channel များအား မတေသာ kernel သးချငပါက

ပက split() သး ပး သတသတစ ခသးရမည ြဖစသည။

anchor: သည anchor point ဟေခ ေသာ kernel ၏ အေြခ ေနရာြဖစသည။ De-

fault တနဖးြဖစေသာ Point(-1,-1) ဆပါက အလယတညတည တင မည။

Page 37: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၂.၂. FILTER2D ၂၇

delta: filter လပ၍ရသည pixel တနဖးတင ေပါငးထည ေပးမည optional value

ြဖစသည။

borderType: သည bordermodeဟေခ ေသာ ပအနားသတ အစကများတနဖးက

တကသည အခါ မညသည extrapolate နညးသးမည ကသတမတသည။

အမနတင ဤ function တကေပးသညမာ convolution မဟတပ correlation

သာ ြဖစသည။

dst(x, y) =

(kernel.cols−1)∑i=0

(kernel.rows−1)∑j=0

kernel(i, j)∗

src(x+ i− anchor.x, y + j − anchor.y) (၂.၃)

Convolutionအစစ သးလပါက kernel က flip() ဆသည လပေဆာငချက အရင

သးေပး ငသည။ filter2Dအတက နမနာ ပ ဂရမက ေအာကပါ စာရငး ၂.၂တင ေဖာြပ

ထားသည။

1 #include <stdio.h>

2 #include <opencv2/opencv.hpp>

3 using namespace cv;

4 int main()

5 {

6 //Read original image

7 Mat image;

8 image = imread("C:/opencv/grove.jpg",1);

9 //image = imread("/home/yan/grove.jpg",1);

10 if (!image.data) {

11 printf("No image data \n");

12 return -1;

13 }

14 namedWindow("Original Image", WINDOW_AUTOSIZE);

15 imshow("Original Image", image);

16

Page 38: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၂၈ အခနး ၂. တညရာနယတငြပ စပြခငးများ

17 //create kernel

18 Mat kernel;

19 int kernel_size = 9;

20 kernel = Mat::ones(kernel_size , kernel_size , CV_32F) / (float)(

kernel_size*kernel_size);

21

22 //filter2D filter

23 Mat im_filter;

24 filter2D(image, im_filter , -1, kernel, Point(-1, -1), 0,

BORDER_DEFAULT);

25 namedWindow("filter2D", WINDOW_AUTOSIZE);

26 imshow("filter2D", im_filter);

27 waitKey(0);

28 return 0;

29 }

စာရငး ၂.၂: filter2D အတက နမနာ ပ ဂရမ။

ပ ဂရမ၏ ရလဒအား ေအာကပါ ပ ၂.၂ တငမရငး င ငးယ ေဖာြပထားသည။

(a) မရငးပ။ (b) filter2D ၏ ရလဒ။

ပ ၂.၂: filter2D ၏ရလဒများက ငးယ ေဖာြပြခငး။

Page 39: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၂.၃. THRESHOLDING ၂၉

၂.၃ Thresholding

Thresholdingသညအေြခခအကျဆး၊အ း ငးဆး segmentationလပေဆာငေသာ

နညးြဖစသည။ ပတစပ အတက ပငးချမည thresholdတစခ သတမတကာထထက

ပများ၊ ပေတာကပပါကအြဖ ၊ နညးပါကအမညး စသညြဖင ပငးချလကြခငးြဖစသည။

ထအတကအသးြပ ငေသာ threshold function၏ ပစက ေအာကတင ေဖာြပထားသည

[8]။

double cv::threshold (InputArray src,

OutputArray dst,

double thresh,

double maxval,

int type

)

Parameters များမာ ေအာကပါအတငးြဖစသည။

src: သည input array ြဖစ ပး single-channel သ 8-bit သ 32-bit floating point

တစခခ ြဖစ ငသည။

dst: သည output array ြဖစ ပး src င အရယတ၊ အမျ းအစားတ ြဖစသည။

thresh: သည threshold တနဖး ြဖစသည။

maxval: သညmaximumတနဖး ြဖစသည။သတမတချက ေြပလညပါကထား မည

pixel ၏တနဖး ြဖစသည။

type: သည threshold ပငးချမည လပေဆာငမ အမျ းအစား ြဖစ ပး ေအာကပါတမ

တစခခ ြဖစ ငသည (ေနာကဆကတ ၁.၁ ကကညပါ)။

• THRESH_BINARY

• THRESH_BINARY_INV

Page 40: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၃၀ အခနး ၂. တညရာနယတငြပ စပြခငးများ

• THRESH_TRUNC

• THRESH_TOZERO

• THRESH_TOZERO_INV

• THRESH_MASK

• THRESH_OTSU

• THRESH_TRIANGLE

Thresholdလပမည ပတင ကမ နးနမ (low frequency)အလငးေရာငအေြပာငး

အလများ ပါ ပါကအထကပါ global thresholding နညး မသးခင ကမ နးနမ အပငး

များအား ဖယထတရန လမည။ သမဟတပါက ေအာကတင ေဖာြပထားသည adap-

tive thresholding ကသး င သည [9]။

void cv::adaptiveThreshold ( InputArray src,

OutputArray dst,

double maxValue,

int adaptiveMethod,

int thresholdType,

int blockSize,

double C

)

Parameters များမာ ေအာကပါအတငးြဖစသည [10]။

src: သည 8-bit single-channel image ြဖစ ငသည။

dst: သည destination image ြဖစ ပး src င အရယတ၊ အမျ းအစားတ ြဖစသည။

maxval: သည သတမတချကေြပလညပါက ထား မည pixel ၏တနဖး ြဖစသည။

adaptiveMethod: သညသးမည Adaptive thresholding algorithm ြဖစ ပး ေအာက

ပါတမ တစခခ ြဖစ ငသည။

Page 41: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၂.၃. THRESHOLDING ၃၁

• ADAPTIVE_THRESH_MEAN_C

• ADAPTIVE_THRESH_GAUSSIAN_C

thresholdType: သည threshold ပငးချမညလပေဆာငမအမျ းအစား ြဖစ ပး ေအာက

ပါတမ တစခခ ြဖစ ငသည။

• THRESH_BINARY

• THRESH_BINARY_INV

blockSize: သည pixel တစခ၏ threshold က ာသညအခါ သးမည အနးအနား

ဝနးကျင အရယအစား ြဖစ ပး 3, 5, 7, စသည တနဖး တစခခ ြဖစသည။

C: သညmeanသ weightedmean မ တေပးမညကနးေသ ြဖစသည။ ပမနအားြဖင

အေပါငးကနးြဖစေသာလညး သညသ အ တ ကနးများလညး ြဖစ ငသည။

Thresholding ြပလပသည နမနာ ဂ ဂရမ တစခ က ေအာကပါ စာရငး ၂.၃ တင

ေတ ငသည။

1 #include "opencv2/imgproc.hpp"

2 #include "opencv2/imgcodecs.hpp"

3 #include "opencv2/highgui.hpp"

4 using namespace cv;

5

6 Mat src, src_gray , dst;

7 int threshold_value = 128;

8 int threshold_type = 0;

9 int const max_BINARY_value = 255;

10 void Threshold_changed(int, void*);

11 const char* window_name = "Thresholding";

12

13 int main()

14 {

15 //src = imread("/home/yan/ka.jpg", IMREAD_COLOR);

Page 42: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၃၂ အခနး ၂. တညရာနယတငြပ စပြခငးများ

16 src = imread("c:/opencv/ka.jpg", IMREAD_COLOR);

17 if (src.empty()) { return -1;}

18

19 namedWindow("Original", WINDOW_AUTOSIZE);

20 imshow("Original",src);

21

22 cvtColor(src, src_gray , COLOR_BGR2GRAY); // Convert the image to

Gray

23 namedWindow(window_name ,WINDOW_NORMAL); // Create a window to

display results

24

25 // Create Trackbar to choose type of Threshold

26 //Type: 0= Binary , 1= Binary Inverted ,

27 // 2= Truncate , 3= To Zero, 4= To Zero Inverted ,

28 // 5= Adaptive threshold using ADAPTIVE_THRESH_GAUSSIAN_C

29 int const max_type = 5;

30 createTrackbar("Type",

31 window_name , //window for trackbar

32 &threshold_type , // value to be updated according to trackbar

33 max_type , //range

34 Threshold_changed);//function to be called everytime trackbar is

changed

35

36 // Create Trackbar to choose Threshold value

37 int const max_value = 255;

38 createTrackbar("Value",

39 window_name , &threshold_value ,

40 max_value , Threshold_changed);

41

42 Threshold_changed(0, 0); // Call the function to initialize

43

44 //loop until 'Esc' key is pressed

45 for (;;) {

Page 43: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၂.၃. THRESHOLDING ၃၃

46 char c = (char)waitKey(20);

47 if (c == 27) { break;}

48 }

49

50 //save the resulting binary image

51 imwrite("c:/opencv/ka_binary.jpg",dst);

52 return 0;

53 }

54 void Threshold_changed(int, void*)

55 {

56 if (threshold_type == 5) {

57 adaptiveThreshold(src_gray , dst, max_BINARY_value ,

58 ADAPTIVE_THRESH_GAUSSIAN_C , THRESH_BINARY , 11, 2);

59 }

60 else {

61 threshold(src_gray , dst, threshold_value ,

62 max_BINARY_value , threshold_type);

63 }

64 imshow(window_name , dst);

65 }

စာရငး ၂.၃: Thresholding နမနာ ပ ဂရမ။

ပ ဂရမ၏ ရလဒအား ေအာကပါ ပ ၂.၃ တငမရငး င ငးယ ေဖာြပထားသည။

Page 44: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၃၄ အခနး ၂. တညရာနယတငြပ စပြခငးများ

(a) မရငးပ။

(b) Binary threshold-

ing ၏ ရလဒ။

(c) Inverse binary ၏

ရလဒ။

(d) THRESH_TRUNC

၏ ရလဒ။

(e) THRESH_TO-

ZERO ၏ ရလဒ။

(f) THRESH_TO-

ZERO_INV ၏ ရလဒ။

(g) adaptive Thresh-

old ၏ ရလဒ။

ပ ၂.၃: Thresholding ရလဒများက ငးယ ေဖာြပြခငး။

Page 45: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၂.၄. ပလးေဖာလပေဆာငချကများ ၃၅

၂.၄ ပလးေဖာလပေဆာငချကများ

အေြခခတညေဆာကပစ (structuring element)တစခ၏သ ာန (shape)ကအေြခခ

၍ ပက ြပ ြပငြခငးအား ပလးေဖာလပေဆာငချကများ (morphological operation)

ဟေခ မည။ Noise အစကအေြပာကများအား ဖယ ာြခငး၊ ထဆကေနေသာ အပငး

များအား ခြခားြခငး၊ အစ ေသာ ေနရာများတင အသးြပ ကသည [6]။

Structuring elementက getStructuringElement()ကအသးြပ ၍ရယ ငသည။

Mat cv::getStructuringElement (int shape,

Size ksize, Point anchor = Point(-1,-1) )

Parameters များမာ ေအာကပါအတငးြဖစသည။

shape: သည MORPH_RECT, MORPH_CROSS, MORPH_ELLIPSE တမ တစခခ

ြဖစ ငသည။

ksize: သည structuring element ၏ အရယြဖစသည။

anchor: သည anchor pointဟေခ ေသာ element၏အေြခ ေနရာြဖစသည။ De-

fault တနဖးြဖစေသာ Point(-1,-1) ဆပါက အလယတညတည တင မည။

၂.၄.၁ တကစားြခငး (erosion)

ပသ ာနတစခ ၏ အြဖ ေရာင အပငးက ကျ သား၊ ပါးသားေအာင စားေပးသည။

void erode(InputArray src, OutputArray dst, InputArray kernel,

Point anchor=Point(-1,-1), int iterations=1,

int borderType=BORDER_CONSTANT,

const Scalar& borderValue=morphologyDefaultBorderValue() )

Page 46: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၃၆ အခနး ၂. တညရာနယတငြပ စပြခငးများ

၂.၄.၂ ေဖာငးပြခငး (dilation)

ပသ ာနတစခ ၏ အြဖ ေရာင အပငးက ပလာ၊ ြပနကားလာ ေအာင ကးေစသည။

void dilate(InputArray src, OutputArray dst, InputArray kernel,

Point anchor=Point(-1,-1), int iterations=1,

int borderType=BORDER_CONSTANT,

const Scalar& borderValue=morphologyDefaultBorderValue() )

၂.၄.၃ morphologyEx

အြခားပ၍ ပေထးေသာ morphological operation များအား သးလပါက mor-

phologyEx က သး ငသည။

void morphologyEx(InputArray src, OutputArray dst, int op,

InputArray kernel, Point anchor=Point(-1,-1),

int iterations=1, int borderType=BORDER_CONSTANT,

const Scalar& borderValue=morphologyDefaultBorderValue() )

ထတင op မာ morphological operation အမျ းအစား ြဖစ ပး ေအာကပါတမ

တစခ ြဖစ ငသည။

• MORPH_OPEN - an opening operation

• MORPH_CLOSE - a closing operation

• MORPH_GRADIENT - a morphological gradient

• MORPH_TOPHAT - “top hat”

• MORPH_BLACKHAT - “black hat”

• MORPH_HITMISS - “hit and miss”

Page 47: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၂.၄. ပလးေဖာလပေဆာငချကများ ၃၇

နမနာ ပ ဂရမ တစခက ေအာကပါ စာရငး ၂.၄ တင ေဖာြပ ထားသည။

1 #include <stdio.h>

2 #include <opencv2/opencv.hpp>

3 using namespace cv;

4 int main()

5 {

6 //Read original image

7 Mat image;

8 image = imread("C:/opencv/ka_ori.jpg", 0);

9 //image = imread("/home/yan/ka_ori.jpg", 0);

10 if (!image.data) {

11 printf("No image data \n");

12 return -1;

13 }

14 namedWindow("Original Image", WINDOW_AUTOSIZE);

15 imshow("Original Image", image);

16

17 Mat e_struc = getStructuringElement(MORPH_RECT , Size(7, 7),

Point(3, 3));

18

19 //erosion

20 Mat im_e;

21 erode(image, im_e, e_struc);

22 namedWindow("Erosion", WINDOW_AUTOSIZE);

23 imshow("Erosion", im_e);

24

25 //dilation

26 Mat im_d;

27 dilate(image, im_d, e_struc);

28 namedWindow("Dilation", WINDOW_AUTOSIZE);

29 imshow("Dilation", im_d);

30

31 //opening

Page 48: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၃၈ အခနး ၂. တညရာနယတငြပ စပြခငးများ

32 Mat im_o;

33 morphologyEx(image, im_o, MORPH_OPEN , e_struc);

34 namedWindow("Opening", WINDOW_AUTOSIZE);

35 imshow("Opening", im_o);

36

37 //closing

38 Mat im_c;

39 morphologyEx(image, im_c, MORPH_CLOSE , e_struc);

40 namedWindow("Closing", WINDOW_AUTOSIZE);

41 imshow("Closing", im_c);

42

43 //opening and closing to remove noise

44 Mat im_r;

45 morphologyEx(image, im_o, MORPH_OPEN , e_struc);

46 morphologyEx(im_o, im_r, MORPH_CLOSE , e_struc);

47 namedWindow("Remove noise", WINDOW_AUTOSIZE);

48 imshow("Remove noise", im_r);

49

50 //gradient

51 Mat g_struc = getStructuringElement(MORPH_RECT , Size(3, 3),

Point(1, 1));

52 Mat im_g;

53 morphologyEx(image, im_g, MORPH_GRADIENT , g_struc);

54 namedWindow("Gradient", WINDOW_AUTOSIZE);

55 imshow("Gradient", im_g);

56

57 waitKey(0);

58 return 0;

59 }

စာရငး ၂.၄: ပသ ာနဆငရာေြပာငးလြခငးများ အတက နမနာ ပ ဂရမ။

Page 49: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၂.၄. ပလးေဖာလပေဆာငချကများ ၃၉

ပ ဂရမ၏ ရလဒအား ေအာကပါ ပ ၂.၄ တငမရငး င ငးယ ေဖာြပထားသည။

(a) မရငးပ။

(b) Erosion (c) Dilation (d) Opening

(e) Closing (f) Removing noise (g) Gradient

ပ ၂.၄: ပလးေဖာလပေဆာငချကများ၏ ရလဒများက ငးယ ေဖာြပြခငး။ Open-

ing တင အြဖ ေရာင အစကများ ေပျာကသား သည။ Closing တင အမညး ေရာင

အစကများ ေပျာကသား သည။

Page 50: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၄၀ အခနး ၂. တညရာနယတငြပ စပြခငးများ

၂.၅ အေရာငနယေြပာငးလြခငးများ

အေရာငနယ (Color space) ေြပာငးြခငး င ပတသက၍RGBမHSVသေြပာငးသးသည

နမနာတစခက ေဆးေ းပါမည [11, 12]။ HSVသညအေရာငကအေြခခေသာ ြပ ြပငြခငး၊

ာေဖြခငး၊ မတမြခငး များအတကများစာအဆငေြပအသးဝငသည။ ပတစပ အြပာ

ေရာငအပငးများက ေရးချယ၍အစမးေရာင ေြပာငးေပးသည နမနာ ဂ ဂရမက ေအာကပါ

စာရငး ၂.၅ တငေတ ငသည။

1 //File: color.cpp

2 //Description: Selective Color Modification

3 //WebSite: http://cool-emerald.blogspot.com

4 //MIT License (https://opensource.org/licenses/MIT)

5 //Copyright (c) 2017 Yan Naing Aye

6

7 #include <stdio.h>

8 #include <opencv2/opencv.hpp>

9 using namespace cv;

10 int main(int argc, char** argv)

11 {

12 Mat image;

13 image = imread("C:/opencv/lane.jpg", 1);

14 if (!image.data) {

15 printf("No image data \n");

16 return -1;

17 }

18 namedWindow("Original Image", WINDOW_AUTOSIZE);

19 imshow("Original Image", image);

20

21 //Convert to hsv

22 Mat hsv;

23 cvtColor(image, hsv, COLOR_BGR2HSV);

24

Page 51: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၂.၅. အေရာငနယေြပာငးလြခငးများ ၄၁

25 //select pixels

26 //the range of H channel is 0-179.

27 //blue at 240 deg corresponds to 120 in H channel

28 Mat bw;

29 inRange(hsv, Scalar(80, 0, 0), Scalar(140, 255, 255), bw);

30 namedWindow("Mask", WINDOW_AUTOSIZE);

31 imshow("Mask", bw);

32

33 //Manipulate pixels

34 for (int i = 0; i < image.rows; i++)

35 for (int j = 0; j < image.cols; j++)

36 if (bw.at<uchar >(i, j) > 128)

37 hsv.at<Vec3b>(i, j)[0] = (hsv.at<Vec3b >(i, j)[0] + 120) % 180;

38

39 //Convert to bgr

40 Mat im2;

41 cvtColor(hsv, im2, COLOR_HSV2BGR);

42

43 namedWindow("Modified Image", WINDOW_AUTOSIZE);

44 imshow("Modified Image", im2);

45

46 waitKey(0);

47 return 0;

48 }

49

စာရငး ၂.၅: အေရာငေရးချယေြပာငးလြခငး။

ဤပ ဂရမတင cvtColor ကသး၍ RGB မ HSV သေြပာငးသည။ Opencv တင

Blue channelသညအရငြဖစသည။ HSV spaceတငအြပာေရာငမာ 240◦ တင ရာ

Opencv၏hue channel၏ range 0 - 180 ငအချ းချ ပါက120 ဝနးကျငြဖစသည။

ထေ ကာင inRange က သး၍ 80 - 140 အတငး အေရာငများက mask အေန င

Page 52: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၄၂ အခနး ၂. တညရာနယတငြပ စပြခငးများ

ထတလကသည။အြပာကအစမးေရာင ေြပာငးရန 240◦လညရနလအပသညအတက

pixel တစခချငးစအား 120 ေပါငးကာ အများဆး h တနဖး 180 ေကျာပါက color

space၏အစဘကမ ြပနစ ေပးရနလသည။ထပအား RGB color spaceသ ြပနေြပာငး

သည အခါ ရလာေသာ ရလဒများက ေအာကပါ ပ ၂.၅ တင ြမင ငသည။

ပ ၂.၅: မရငးပ၊ mask င အေရာငေြပာငး ပးသည ပများ။

၂.၆ Source ကဒများ

ဤအခနး ပ ဂရမများ၏ sourceကဒများက ေအာကပါ ေနရာများတင ေတ ငသည။

• Spatial Filtering onGitHub - https://github.com/yan9a/ OpenCV_Spatial

_Filtering

• Selective Color Modification on GitHub - https://github.com/yan9a/

Selective_Color_Modification

Page 53: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

အခနး ၃

ကမ နးနယတငြပ စပြခငးများ

ဤအပငးတင 2D ပရပများက ကမ နးနယ (frequency domain) တင ေဖာြပြခငး၊

ြပ စပြခငးများအေကာငး ေဆးေ းမည [13]။ ကမ နး (Frequency)ကအေြခခေသာ

ခြခမး စတြဖာ ြခငးများ၊ ြပ ြပငြခငး များသည ပရပများအား ပမ ေကာငးမန ေစြခငး၊

ပရပများအား ြပနလည တညေဆာက ြခငးများ အတက အဓက ေသာချကြဖစသည။

တညရာနယ (spatial domain) မ ကမ နးနယ သ ေြပာငးလရန Discrete Fourier

Transform (DFT)ကသး ငသည။အရယအစားM×N ေသာ ပရပတစခအတက

2 dimessional DFT င သ၏ ေြပာငးြပန (inverse) DFT တက ေအာကပါ ညမ ြခငး

များ င ေဖာြပ ငသည [14]။

F (u, v) =M−1∑x=0

N−1∑y=0

f(x, y)e−j2π(uxM

+ vyN

) (၃.၁)

f(u, v) =1

MN

M−1∑u=0

N−1∑v=0

F (x, y)ej2π(xuM

+ yvN

) (၃.၂)

ကမ နးနယ တင filtering လပသည အခါသးသည အေြခခ အဆင များအား

ေအာကပါ ပ ၃.၁ တင ေဖာြပ ထားသည။

H(u, v) ြဖငကယစားြပ ေဖာြပသည Filter များအား ကမ နးနယတငတက က

ြပလပ င ပး၊ သတ၏ အလယမတ အား origin အေန င သတမတပါက၊ origin မ

၄၃

Page 54: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၄၄ အခနး ၃. ကမ နးနယတငြပ စပြခငးများ

preprocessing

f(x,y)

Input image

DFT

F(u,v)filterH(u,v) H(u,v)F(u,v)

inverseDFT

postprocessing

g(x,y)

Filtered image

ပ ၃.၁: ကမ နးနယ တင filtering လပြခငး။

pixel တစခအထ အကာအေဝး D(u,v) အား ေအာကပါအတငး ာ ငသည။

D(u, v) =√u2 + v2 (၃.၃)

၃.၁ ကမ နးနယပယ၏ Gaussian Filter များ

Gaussian low pass filter (GLPF) ၏ cutoff frequency အား standard deviation

ငတနဖးတ σ ဟသတမတပါက၊ H(u, v) အား ေအာကပါအတငး ေဖာြပ ငသည။

H(u, v) = e−u2+v2

2σ2 (၃.၄)

ေအာကပါပ ၃.၂ တင အလယမတအနး ကမ နးနမသည အပငးတင ြပငးအားများ၍၊

ကမ နးြမငသညအပငးတင ြပငးအားေလျာသားသညက ြမင ငသည။

ထနညးတGaussian high pass filter (GHPF)ဆပါကေအာကပါအတငး ေဖာြပ

ငသည။

H(u, v) = 1− e−u2+v2

2σ2 (၃.၅)

Page 55: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၃.၂. ကမ နးနယ၏ BUTTERWORTH FILTER များ ၄၅

(a) အလငးအေမာင။ (b) အနမအြမင။

ပ ၃.၂: GLPF ၏ ပမာဏအား အလငး ြပငးအား၊ အနမ အြမင တ ြဖင ေဖာြပ ထားပ။

၃.၂ ကမ နးနယ၏ Butterworth Filter များ

Butterworth filter များ၏ ရလဒများမာ ေချာေမသြဖင သတအား maximally flat

magnitude filter များ ဟလညး ေခ ကသည။ H(u, v)၏ cutoff frequency အား

origin မ အကာအေဝး D0 ဟ သတမတပါက၊ order n ေသာ Butterworth low

pass filter (BLPF) အား ေအာကပါအတငး ေဖာြပ ငသည။

H(u, v) =1

1 +[u2+v2

D20

]n (၃.၆)

ထနညးတ Butterworth high pass filter (BHPF) ဆပါက ေအာကပါ အတငး ေဖာြပ

ငသည။

H(u, v) =1

1 +[

D20

u2+v2

]n (၃.၇)

ကမ နးနယပယတင ပတစပက ြပ ြပင ပး၊ noise ထညေပးသည နမနာတစခက

ေအာကပါ freqfilter.cpp (စာရငး ၃.၁) တင ေတ ငသည။

1 //File: freqfilter.cpp

2 //Description: filtering in frequency domain

3 //WebSite: http://cool-emerald.blogspot.com

Page 56: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၄၆ အခနး ၃. ကမ နးနယတငြပ စပြခငးများ

4 //MIT License (https://opensource.org/licenses/MIT)

5 //Copyright (c) 2017 Yan Naing Aye

6

7 #include <stdio.h>

8 #include <iostream>

9 #include <opencv2/opencv.hpp>

10 using namespace std;

11 using namespace cv;

12

13 //Create an image of complex number type (2 channels to store

14 // real part and imaginary part) from an input grayscale image

15 // with an optimal size for DFT

16 // src : single channel grayscale image input

17 // dst : two channel complex image output

18 void i2z(Mat src, Mat& dst)

19 {

20 //get optimal size for dft

21 int m = getOptimalDFTSize(src.rows);

22 int n = getOptimalDFTSize(src.cols);

23

24 //change the image to optimal size, padding 0 values at bottom

and right

25 Mat im_padded;

26 copyMakeBorder(src, im_padded , 0, m - src.rows, 0, n - src.cols,

BORDER_CONSTANT , Scalar::all(0));

27

28 //convert the image to float type, create another one filled

with zeros ,

29 //and make an array of these 2 images

30 Mat im_array[] = { Mat_<float >(im_padded), Mat::zeros(im_padded.

size(), CV_32F) };

31

32 //combine as a 2 channel image to represent a complex number

Page 57: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၃.၂. ကမ နးနယ၏ BUTTERWORTH FILTER များ ၄၇

type image

33 Mat im_complex; merge(im_array , 2, im_complex);

34

35 im_complex.copyTo(dst);//copy to destination

36 }

37

38 // convert a 2 channel complex image to a single channel

grayscale image

39 // by getting magnitude , change scale , and normalize

40 // src : two channel complex image input

41 // dst : single channel grayscale image output

42 // LogScale : change to log scale or not

43 void z2i(Mat src, Mat& dst, bool LogScale = false)

44 {

45 Mat im_tmp[2]; split(src, im_tmp);//split the complex image to 2

46 Mat im_f; magnitude(im_tmp[0], im_tmp[1], im_f);//get absolute

value

47 if (LogScale) {

48 im_f += Scalar::all(1);//make minimum 1

49 log(im_f, im_f);//log scale

50 }

51 Mat im;

52 normalize(im_f, im, 0, 255, NORM_MINMAX ,CV_8U); //normalize

53 //im = Mat_<uchar >(im_f);

54 im.copyTo(dst);//copy to destination

55 }

56

57 // rearrange the quadrants of a Fourier image

58 void fftshift(Mat src) {

59 // make number of rows or columns even

60 src = src(Rect(0, 0, src.cols & -2, src.rows & -2));

61 int cx = src.cols / 2;

62 int cy = src.rows / 2;

Page 58: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၄၈ အခနး ၃. ကမ နးနယတငြပ စပြခငးများ

63 Mat q1(src, Rect(cx, 0, cx, cy));// Top-Right

64 Mat q2(src, Rect(0, 0, cx, cy));// Top-Left

65 Mat q3(src, Rect(0, cy, cx, cy));// Bottom -Left

66 Mat q4(src, Rect(cx, cy, cx, cy));// Bottom -Right

67 Mat tmp;

68 q2.copyTo(tmp);

69 q4.copyTo(q2);

70 tmp.copyTo(q4);

71 q1.copyTo(tmp);

72 q3.copyTo(q1);

73 tmp.copyTo(q3);

74 }

75

76 //Produce Gaussian filter in frequency domain

77 // height : height of the filter

78 // width : width of the filter

79 // std : standard deviation where intensity is 60% (like

cutoff frequency )

80 // highpass: true=highpass , false=lowpass

81 Mat GaussianFilter(int height, int width, float std, bool

highpass = false)

82 {

83 Mat im_filter = Mat::ones(Size(width, height), CV_32F);

84 float u, v, t;

85 int k = 0;

86 for (long i = 0; i < height; i++)

87 for (long j = 0; j < width; j++) {

88 u = i - height / 2;

89 v = j - width / 2;

90 t = exp(-(u*u + v*v)/(2.0*std*std));

91 if (highpass) t = 1 - t;//if high pass

92 im_filter.at<float >(i, j) = t;

93 }

Page 59: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၃.၂. ကမ နးနယ၏ BUTTERWORTH FILTER များ ၄၉

94 return im_filter;

95 }

96

97 //Produce Butterworth filter in frequency domain

98 // height : height of the filter

99 // width : width of the filter

100 // cutoffFreq:cutoff frequency where intensity is 50%

101 // order : order n

102 // highpass: true=highpass , false=lowpass

103 Mat ButterworthFilter(int height, int width, float cutoffFreq ,

int order, bool highpass = false)

104 {

105 Mat im_filter = Mat::ones(Size(width, height), CV_32F);

106 float u, v, t;

107 int k = 0;

108 for (long i = 0; i < height; i++)

109 for (long j = 0; j < width; j++) {

110 u = i - height / 2;

111 v = j - width / 2;

112 t = (u*u + v*v) / (cutoffFreq*cutoffFreq);

113 if (highpass) t = 1 / t;//if high pass

114 for (long k = 1; k < order; k++) t *= t;//for order n

115 t = 1 / (1 + t);

116 im_filter.at<float>(i, j) = t;

117 }

118 return im_filter;

119 }

120

121 //Add Gaussian noise

122 // src : single channel grayscale image input

123 // dst : single channel grayscale image output

124 // mean: mean

125 // std: standard deviation

Page 60: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၅၀ အခနး ၃. ကမ နးနယတငြပ စပြခငးများ

126 void GaussianNoise(Mat src, Mat& dst,float mean, float std)

127 {

128 Mat noise = Mat(src.size(),CV_32F);

129 randn(noise, 0, 0.05);

130 Mat im;

131 normalize(src, im, 0.0, 1.0, NORM_MINMAX , CV_32F);

132 im += noise;

133 normalize(im, im, 0, 255, NORM_MINMAX ,CV_8U); //normalize

134 im.copyTo(dst);//copy to destination

135 }

136

137 int main(int argc, char** argv)

138 {

139 //Get an image

140 Mat image = imread("C:/opencv/lake.jpg", IMREAD_GRAYSCALE);

141 if (!image.data) {

142 printf("No image data \n");

143 return -1;

144 }

145 namedWindow("Original Image", WINDOW_AUTOSIZE);

146 imshow("Original Image", image);

147

148 Mat im_complex; i2z(image, im_complex);//convert to complex type

149 dft(im_complex , im_complex);//perform discrete fourier transform

150

151 //display Fourier spectrum

152 Mat im_f; z2i(im_complex , im_f, true);//convert to grayscale

153 fftshift(im_f);//shift quadrants to make the center origin

154 namedWindow("Freq domain Image", WINDOW_AUTOSIZE);

155 imshow("Freq domain Image", im_f);

156

157 //Get a filter (freq domain)

158 //Mat im_filter = ButterworthFilter(im_complex.rows, im_complex.

Page 61: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၃.၂. ကမ နးနယ၏ BUTTERWORTH FILTER များ ၅၁

cols, 50,2,true);

159 Mat im_filter = GaussianFilter(im_complex.rows, im_complex.cols,

50, false);

160 namedWindow("Filter", WINDOW_AUTOSIZE);

161 imshow("Filter", im_filter);

162

163 fftshift(im_filter);//shift quadrants for matching

164 //multiply in freq domain (convolve in spatial domain)

165 Mat im_array[2]; split(im_complex , im_array);

166 im_array[0] = im_array[0].mul(im_filter);

167 im_array[1] = im_array[1].mul(im_filter);

168 merge(im_array , 2, im_complex);//combine these 2 into a complex

image

169

170 dft(im_complex , im_complex , DFT_INVERSE);//perform inverse

discrete fourier transform

171 Mat im_hp; z2i(im_complex , im_hp);//get grayscale

172 GaussianNoise(im_hp, im_hp, 0, 0.05);//add noise

173 namedWindow("Filtered Image", WINDOW_AUTOSIZE);

174 imshow("Filtered Image", im_hp);

175

176 //save the result

177 imwrite("C:/opencv/blur.jpg", im_hp);

178 waitKey(0);

179 return 0;

180 }

စာရငး ၃.၁: ကမ နးနယတင ဖယတာြခငး။

ပ ဂရမ i2zဆသည ဖန ငမာ grayscale ပရပတစခက DFT ြပလပရနအတက

complex numberအမျ းအစား ေြပာငးေပးသည။ z2i မာ complex imageက grayscale

ြပနေြပာငးေပး သည ဖန င ြဖစသည။ တက၍ ရေသာ fourier image တင သည

Page 62: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၅၂ အခနး ၃. ကမ နးနယတငြပ စပြခငးများ

ကမ နးမာ ဘယဖကအေပ ြဖစသြဖင origin အမတက အလယသ ေရရန fftshift

ဖန ငက သး ငသည။ ပ ဂရမ၏ ရလဒက ေအာကပါပ ၃.၃ တငေတ ငသည။

(a) အြဖ အမညး မေြပာငးခငမရငးပ။ (b) ဝါး၍ noise ေပါငးထညြခငး။

ပ ၃.၃: နမနာအေန င channel တစခထက ကမ နးနယတငဖယတာြခငး။

၃.၃ Wiener Filtering

ပများ ဝါးသားသညဆသညမာ နးကပ ေနေသာအစကများအချငးချငး ေပါငးစပ ေရာ

ေ ာ သားသညဟ ဆ ငသည။ ဖးကပ မြပတ၍ ဓာတပ ဝါးသား သညမာ အပါချာ

အဝနး သ ာန အနးအနား အစကများ ေရာသားြခငး ဟ ြမင ငသည။ ေရလျား၍

ဝါးသား (motion blur) သညမာ ေရလျားသည ဦးတညရာ တေလာက (များေသာ

အားြဖင ေဘးတက) အစကများ ေရာကနြခငး ဟြမင ငသည။ လကတန၍ ဝါးသား

ပါကလညး ပ အလငး အစက များ၏ အေရး အေကာငးက ကည၍ ဝါးေစသည

လငးတနပစ (point spread function) က ခနမနး ငသည။ တနညး အားြဖင မရငး

ြပတသားေသာ ပက၊ degradation function, H(u, v), ြဖင convolution လပထား

သည င တည သည။

တညရာနယ (spatial domain)တင စ းစားပါကဝါးေနေသာ ပက ြပတသားေအာင

Page 63: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၃.၃. WIENER FILTERING ၅၃

လပရနမာ ေပါငးစပ ေနေသာ အစက တနဖး များက ြပနခ ထတသည ငတသည။

နမနာ စ းစား ကညပါကေပါငးလဒကနးတစခကေတပါကထေပါငးလဒမာ မညသည

ကနးများ၏ ေပါငးလဒ ြဖစမညနညးဟ ြပန ာ ရြခငး င တသြဖင မသကနး များက

ြပနရဖ မြဖစ ငပါ။ Unsharpmaskအစ သည shapening filter များမာလညး ကမ နး

ြမငအပငးများက ြမငေပး ေယဘယျ နညးများသာ ြဖစသြဖငအမျ းမျ းေသာအြခား

ဝါးပ ဝါးနညးများ အတက ထေရာကမ မ ပါ။

ကမ နးနယ (frequency domain)တငမ convolutionလပသညမာ ေြမာကြခငး

ငညမသြဖင နဂ မရငးက ြပနလချင ပါကH(u, v) ြဖင ြပနစားလက ပင ြဖစသည။

ဝါးေနေသာပ (degraded image) ၏ DFT မာ G(u, v)၊ ဝါးေစေသာ degradation

function ၏ DFT မာ H(u, v) ဆပါက ခနမနး မရငးပ၏ DFT က ေအာကပါအတငး

inverse function အေန င ြပ ငသည။

F ∩ (u, v) =G(u, v)

H(u, v)(၃.၈)

ဤနညးမာ း ငးသလ ေသာလညး noise များ၊H(u, v)၏တကျမများတင များစာ

မတညလနး သြဖင ရလဒ မေကာငး ြခငးများ၊ ပငးေြခH(u, v)၏သညနားနး တနဖး

များတင စားလဒမာ သတမတ၍ မရ ေတာေသာ ြပဿနာ ြဖစြခငး များ သည။

Wiener Filtering မာမ statistical error က အနညးဆးြဖစေအာင ခနမနး င ပး၊

အေစာဆး င လကက အများဆး ဖယတာ တစခ ြဖစသည။ သ၏ ကမ နးနယ

ေဖာြပ ချကမာ ေအာကပါ အတငး ြဖစသည။

F (u, v) =

1

H(u, v)

|H(u, v)|2

|H(u, v)|2 + Sη(u,v)

Sf (u,v)

G(u, v) (၃.၉)

ထတင H(u, v) = degradation function ြဖစ၍၊ |H(u, v)|2 = H∗(u, v)H(u, v)

ြဖစသည။တဖနH∗(u, v)သညH(u, v)၏complex conjugate ြဖစသည။ Sη(u, v)

= |N(u, v)|2 = noise ၏ power spectrum ြဖစ၍ ၊ Sf (u, v) = |F (u, v)|2 = un-

degraded ပရပ ၏ power spectrum ြဖစသည။ အချ း Sη(u,v)

Sf (u,v)က noise to signal

ratio (NSR) ဟလညး ေခသည။

Page 64: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၅၄ အခနး ၃. ကမ နးနယတငြပ စပြခငးများ

Wiener Filtering နမနာက ေအာကပါ deblur.cpp (စာရငး ၃.၂) တင ေတ င

သည။

1 //File: deblur.cpp

2 //Description: Wiener filtering

3 //WebSite: http://cool-emerald.blogspot.com

4 //MIT License (https://opensource.org/licenses/MIT)

5 //Copyright (c) 2017 Yan Naing Aye

6 #include <stdio.h>

7 #include <iostream>

8 #include <opencv2/opencv.hpp>

9 using namespace std;

10 using namespace cv;

11

12 //Create an image of complex number type (2 channels to store

13 // real part and imaginary part) from an input grayscale image

14 // with an optimal size for DFT

15 // src : single channel grayscale image input

16 // dst : two channel complex image output

17 void i2z(Mat src, Mat& dst)

18 {

19 //get optimal size for dft

20 int m = getOptimalDFTSize(src.rows);

21 int n = getOptimalDFTSize(src.cols);

22 //change the image to optimal size, padding 0 values at bottom

and right

23 Mat im_padded;

24 copyMakeBorder(src, im_padded , 0, m - src.rows, 0, n - src.cols,

BORDER_CONSTANT , Scalar::all(0));

25 //convert the image to float type, create another one filled

with zeros ,

26 //and make an array of these 2 images

27 Mat im_array[] = { Mat_<float >(im_padded), Mat::zeros(im_padded.

Page 65: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၃.၃. WIENER FILTERING ၅၅

size(), CV_32F) };

28 //combine as a 2 channel image to represent a complex number

type image

29 Mat im_complex; merge(im_array , 2, im_complex);

30 im_complex.copyTo(dst);//copy to destination

31 }

32

33 // convert a 2 channel complex image to a single channel

grayscale image

34 // by getting magnitude , change scale , and normalize

35 // src : two channel complex image input

36 // dst : single channel grayscale image output

37 // LogScale : change to log scale or not

38 void z2i(Mat src, Mat& dst, bool LogScale = false)

39 {

40 Mat im_tmp[2]; split(src, im_tmp);//split the complex image to 2

41 Mat im_f; magnitude(im_tmp[0], im_tmp[1], im_f);//get absolute

value

42 if (LogScale) {

43 im_f += Scalar::all(1);//make minimum 1

44 log(im_f, im_f);//log scale

45 }

46 Mat im;

47 normalize(im_f, im, 0, 255, NORM_MINMAX , CV_8U); //normalize

48 im.copyTo(dst);//copy to destination

49 }

50

51 // rearrange the quadrants of a Fourier image

52 void fftshift(Mat src) {

53 // make number of rows or columns even

54 src = src(Rect(0, 0, src.cols & -2, src.rows & -2));

55 int cx = src.cols / 2;

56 int cy = src.rows / 2;

Page 66: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၅၆ အခနး ၃. ကမ နးနယတငြပ စပြခငးများ

57 Mat q1(src, Rect(cx, 0, cx, cy));// Top-Right

58 Mat q2(src, Rect(0, 0, cx, cy));// Top-Left

59 Mat q3(src, Rect(0, cy, cx, cy));// Bottom -Left

60 Mat q4(src, Rect(cx, cy, cx, cy));// Bottom -Right

61 Mat tmp;

62 q2.copyTo(tmp);

63 q4.copyTo(q2);

64 tmp.copyTo(q4);

65 q1.copyTo(tmp);

66 q3.copyTo(q1);

67 tmp.copyTo(q3);

68 }

69

70 //Produce Gaussian filter in frequency domain

71 // height : height of the filter

72 // width : width of the filter

73 // std : standard deviation where intensity is 60% (like

cutoff frequency )

74 // highpass: true=highpass , false=lowpass

75 Mat GaussianFilter(int height, int width, float std, bool

highpass = false)

76 {

77 Mat im_filter = Mat::ones(Size(width, height), CV_32F);

78 float u, v, t;

79 int k = 0;

80 for (long i = 0; i < height; i++)

81 for (long j = 0; j < width; j++) {

82 u = i - height / 2;

83 v = j - width / 2;

84 t = exp(-(u*u + v*v) / (2.0*std*std));

85 if (highpass) t = 1 - t;//if high pass

86 im_filter.at<float >(i, j) = t;

87 }

Page 67: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၃.၃. WIENER FILTERING ၅၇

88 return im_filter;

89 }

90

91 //Produce Butterworth filter in frequency domain

92 // height : height of the filter

93 // width : width of the filter

94 // cutoffFreq:cutoff frequency where intensity is 50%

95 // order : order n

96 // highpass: true=highpass , false=lowpass

97 Mat ButterworthFilter(int height, int width, float cutoffFreq ,

int order, bool highpass = false)

98 {

99 Mat im_filter = Mat::ones(Size(width, height), CV_32F);

100 float u, v, t;

101 int k = 0;

102 for (long i = 0; i < height; i++)

103 for (long j = 0; j < width; j++) {

104 u = i - height / 2;

105 v = j - width / 2;

106 t = (u*u + v*v) / (cutoffFreq*cutoffFreq);

107 if (highpass) t = 1 / t;//if high pass

108 for (long k = 1; k < order; k++) t *= t;//for order n

109 t = 1 / (1 + t);

110 im_filter.at<float>(i, j) = t;

111 }

112 return im_filter;

113 }

114

115 int main(int argc, char** argv)

116 {

117 //Get an image

118 Mat image = imread("C:/opencv/blur.jpg", IMREAD_GRAYSCALE);

119 if (!image.data) {printf("No image data \n");return -1;}

Page 68: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၅၈ အခနး ၃. ကမ နးနယတငြပ စပြခငးများ

120 namedWindow("Original Image", WINDOW_AUTOSIZE);

121 imshow("Original Image", image);

122

123 Mat im_complex; i2z(image, im_complex);//convert to complex type

124 dft(im_complex , im_complex);//perform discrete fourier transform

125 Mat im_co; im_complex.copyTo(im_co);//keep original DFT copy

126

127 //Estimate Signal power spectrum , take low freq part as signal

128 //Get a low pass filter (freq domain)

129 Mat im_filter = ButterworthFilter(im_complex.rows, im_complex.

cols, 100,2,false);

130 fftshift(im_filter);//shift quadrants for matching

131 //multiply in freq domain (convolve in spatial domain)

132 Mat im_array[2]; split(im_complex , im_array);

133 im_array[0] = im_array[0].mul(im_filter);

134 im_array[1] = im_array[1].mul(im_filter);

135 merge(im_array , 2, im_complex);//combine these 2 into a complex

image

136

137 dft(im_complex , im_complex , DFT_INVERSE);//perform inverse

discrete fourier transform

138 Mat im_signal; z2i(im_complex , im_signal);//get grayscale

139

140 //Estimate noise

141 Mat imsps = Mat_<float >(im_signal);//convert image signal to

float

142 Mat imor = Mat_<float>(image);//convert original image to float

143 Mat imnps = imor - imsps;//get noise

144

145 //Signal to noise ratio

146 imsps = imsps.mul(imsps);//get signal power spectrum

147 imnps = imnps.mul(imnps);//get noise power spectrum

148 float signalpower = sum(imsps)[0];

Page 69: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၃.၃. WIENER FILTERING ၅၉

149 float noisepower = sum(imnps)[0];

150 float snr = signalpower / noisepower;

151 printf("snr: %f \n", snr);

152

153 //Get the known degrading function

154 Mat im_df = GaussianFilter(im_complex.rows, im_complex.cols, 50,

false);

155 fftshift(im_df);//shift quadrants for matching

156

157 //Wiener filtering

158 Mat h2 = im_df.mul(im_df);//magnitude square

159 Mat dbH = (h2 / (h2 + (1 / snr)))/im_df;

160 //multiply in freq domain (convolve in spatial domain)

161 Mat im_coar[2]; split(im_co, im_coar);

162 im_coar[0] = im_coar[0].mul(dbH);

163 im_coar[1] = im_coar[1].mul(dbH);

164 merge(im_coar, 2, im_co);//combine these 2 into a complex image

165

166 //Convert the DFT result into grayscale

167 dft(im_co, im_co, DFT_INVERSE); //perform inverse discrete

fourier transform

168 Mat im_deblur; z2i(im_co, im_deblur);//get grayscale

169 namedWindow("Deblurred Image", WINDOW_AUTOSIZE);

170 imshow("Deblurred Image", im_deblur);

171

172 //save the result

173 imwrite("C:/opencv/deblur.jpg", im_deblur);

174 waitKey(0);

175 return 0;

176 }

စာရငး ၃.၂: Wiener Filtering

Page 70: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၆၀ အခနး ၃. ကမ နးနယတငြပ စပြခငးများ

ပ ဂရမ၏ ရလဒက ေအာကပါပ ၃.၄ တငေတ ငသည။

ပ ၃.၄: Noise ထ၍ ဝါးေနေသာပက Wiener filter ြဖင deblur လပ ပးသည အခါ

ရလာေသာ ရလဒ။

၃.၄ Source ကဒများ

ဤအခနး ပ ဂရမများ၏ sourceကဒများက ေအာကပါ ေနရာများတင ေတ ငသည။

• Image Filtering in Frequency Domain - https://github.com/yan9a/ OpenCV

_Frequency _Domain

• Deblurring an image using Wiener filter - https://github.com/yan9a/

OpenCV _Wiener _Filter

Page 71: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

အခနး ၄

ဗဒယြပ စပြခငး

ဤအခနးတင ဗဒယများက ဖတြခငး၊ ေရးြခငး၊ ငအချန ငတေြပးည ခြခမး၊ ာေဖြခငးများ

အေကာငးတငြပမည။ ဗဒယ ဆသညမာ ပရပများ အစအစ လက ေပါငးစပ ြပလပ

ထားသညဟဆ ငသည။ထသ ဖစညးထားသည ပရပတစခ ြခငးစက ြပကက (frame)

ဟေခ ပး၊ တစစကနအတငး ေြပာငးလသားသည ြပကက အေရအတကက ြပ နး

(frame rate) ဟေခ မည [15]။

၄.၁ ဗဒယ ဖတြခငး၊ေရးြခငး

OpenCVတင ဗဒယများက ဖမးယရနသမဟတ ဖတရန VideoCaptureဟေခသည

class ပါ သည [16]။ ဗဒယ ဖငများ ေရးသားရနအတကက မ VideoWriter Class

ကသး ငသည [17]။ စကထတငသမးထားသည ဗဒယ ဖငတစခက ဖတကာ၊ ြပကက

တစခြခငးစထတယ ပး၊လက အချနက စတဂကက ေနာကခ ငထြပကကေပထပေရး

မည။ ရလာသည ရလဒက ဗဒယဖငအေန င ြပနေရးသည နမနာတစခက ေအာကပါ

စာရငး ၄.၁ တင ေဖာြပထားသည။ ပေပတင စာသားများေရးြခငး အတက putText

[18] က သးသည။

1 #include <stdio.h>

2 #include <iostream>

၆၁

Page 72: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၆၂ အခနး ၄. ဗဒယြပ စပြခငး

3 #include <opencv2/opencv.hpp>

4 #include <string>

5 using namespace std;

6 using namespace cv;

7 std::string to_string(int i)

8 {

9 std::stringstream ss;

10 ss << i;

11 return ss.str();

12 }

13 int main(int argc, char** argv)

14 {

15 //VideoCapture cap(0);//Default camera

16 VideoCapture cap("/home/yan/sensor.mp4");//open video file

17 //VideoCapture cap("c:/opencv/sensor.mp4"); //open video file

18 if (!cap.isOpened()) {

19 printf("Video is not opened. \n");

20 return -1;

21 }

22 else {

23 printf("Video is opened. \n");

24 }

25

26 union { int v; char c[5]; } uEx;

27 uEx.v = static_cast <int>(cap.get(CV_CAP_PROP_FOURCC));

28 uEx.c[4] = '\0';

29 printf("Codec: %s \n",uEx.c);

30

31 Size S = Size((int)cap.get(CV_CAP_PROP_FRAME_WIDTH),(int)cap.get

(CV_CAP_PROP_FRAME_HEIGHT));

32 printf("Frame size: %d x %d \n",S.width,S.height);

33

34 double rate = cap.get(CV_CAP_PROP_FPS);//Frame rate

Page 73: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၄.၁. ဗဒယ ဖတြခငး၊ေရးြခငး ၆၃

35 printf("Frame rate: %f \n", rate);

36 int dperiod = 1000 / rate;

37

38 int c = cap.get(CV_CAP_PROP_FRAME_COUNT);

39 printf("Frame count: %d \n", c);

40 namedWindow("Frame", 1);

41

42 int ex = CV_FOURCC('M', 'J', 'P', 'G');

43 //int ex = CV_FOURCC('X', 'V', 'I', 'D');//https://www.xvid.com/

44 //int ex = -1;//pop up window to choose

45 //const string vpath="c:/opencv/vdowr.avi";

46 const string vpath="/home/yan/vdowr.avi";

47 VideoWriter outputVideo(vpath, ex , rate, S, true);

48 if (!outputVideo.isOpened())

49 {

50 cout << "Could not open the output video to write."<< endl;

51 waitKey(5000);

52 return -1;

53 }

54

55 long ms,p;

56 Mat frame,img;

57 string str;

58 for (int i = 0;; i++) {

59 if (!cap.read(frame)) break;

60 p = cap.get(CV_CAP_PROP_POS_FRAMES);

61 //printf("Frame: %ld \n", p);

62 ms = cap.get(CV_CAP_PROP_POS_MSEC);

63 str = to_string(ms) + " ms";

64 rectangle(frame, Point(10, 10), Point(200, 60), CV_RGB(255, 0,0)

, CV_FILLED);

65 putText(frame, str, Point(25, 45),FONT_HERSHEY_PLAIN ,2.0, CV_RGB

(0, 255, 0), 2.0);

Page 74: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၆၄ အခနး ၄. ဗဒယြပ စပြခငး

66 outputVideo << frame;

67 imshow("Frame", frame);

68 if (waitKey(dperiod) == 27) break; //if 'Esc' key is pressed

69 }

70 cap.release();

71 outputVideo.release();

72 //waitKey(5000);

73 return 0;

74 }

စာရငး ၄.၁: ဗဒယဖတြခငး၊ေရးြခငး။

၄.၂ Real-time Face Detection

ဗဒယအတငးမ မျက ာများအားအချန ငတေြပးည ာေဖြခငးက ြပလပမည။ထအတက

Cascade Classifier [19] ကသး ငသည။ နမနာ ပ ဂရမက ေအာကပါ စာရငး ၄.၂

တင ေတ ငသည။

1 #include <stdio.h>

2 #include <opencv2/opencv.hpp>

3 #include<string>

4 using namespace std;

5 using namespace cv;

6

7 String face_cascade_name = "c:/opencv/

haarcascade_frontalface_alt.xml";

8 String eyes_cascade_name = "c:/opencv/

haarcascade_eye_tree_eyeglasses.xml";

9 CascadeClassifier face_cascade;

10 CascadeClassifier eyes_cascade;

11

Page 75: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၄.၂. REAL-TIME FACE DETECTION ၆၅

12 void detectAndDisplay(Mat frame)

13 {

14 std::vector<Rect> faces;

15 Mat frame_gray;

16

17 cvtColor(frame, frame_gray , CV_BGR2GRAY);

18 equalizeHist(frame_gray , frame_gray);

19

20 //-- Detect faces

21 face_cascade.detectMultiScale(frame_gray , faces, 1.1, 2, 0 |

CV_HAAR_SCALE_IMAGE , Size(120, 120));

22

23 for (size_t i = 0; i < faces.size(); i++)

24 {

25 Point center(faces[i].x + faces[i].width*0.5, faces[i].y + faces

[i].height*0.5);

26 ellipse(frame, center, Size(faces[i].width*0.5, faces[i].height

*0.5), 0, 0, 360, Scalar(255, 0, 255), 4, 8, 0);

27

28 Mat faceROI = frame_gray(faces[i]);

29 std::vector<Rect> eyes;

30

31 //-- In each face, detect eyes

32 eyes_cascade.detectMultiScale(faceROI, eyes, 1.1, 2, 0 |

CV_HAAR_SCALE_IMAGE , Size(30, 30));

33

34 for (size_t j = 0; j < eyes.size(); j++)

35 {

36 Point center(faces[i].x + eyes[j].x + eyes[j].width*0.5, faces[i

].y + eyes[j].y + eyes[j].height*0.5);

37 int radius = cvRound((eyes[j].width + eyes[j].height)*0.25);

38 circle(frame, center, radius, Scalar(255, 0, 0), 4, 8, 0);

39 }

Page 76: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၆၆ အခနး ၄. ဗဒယြပ စပြခငး

40 }

41 //-- Show what you got

42 imshow("Frame", frame);

43 }

44

45 int main(int argc, char** argv)

46 {

47 //Load the cascades

48 if (!face_cascade.load(face_cascade_name)) { printf("--(!)Error

loading\n"); return -1; };

49 if (!eyes_cascade.load(eyes_cascade_name)) { printf("--(!)Error

loading\n"); return -1; };

50

51 VideoCapture cap(0);//Default camera

52 if (!cap.isOpened()) { printf("Video is not opened. \n"); return

-1; }

53 else { printf("Video is opened. \n"); }

54

55 union { int v; char c[5]; } uEx;

56 uEx.v = static_cast <int>(cap.get(CV_CAP_PROP_FOURCC));

57 uEx.c[4] = '\0';

58 printf("Codec: %s \n", uEx.c);

59

60 cap.set(CAP_PROP_FRAME_WIDTH , 1280);

61 cap.set(CAP_PROP_FRAME_HEIGHT , 720);

62 cap.set(CAP_PROP_FPS , 30);

63 Size S = Size((int)cap.get(CV_CAP_PROP_FRAME_WIDTH), (int)cap.

get(CV_CAP_PROP_FRAME_HEIGHT));

64 printf("Frame size: %d x %d \n", S.width, S.height);

65

66 double rate = cap.get(CV_CAP_PROP_FPS);//Frame rate

67 printf("Frame rate: %f \n", rate);

68 int dperiod = 15;

Page 77: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၄.၂. REAL-TIME FACE DETECTION ၆၇

69

70 long p = 0;

71 Mat frame, img;

72 string str;

73 for (int i = 0;; i++) {

74 if (!cap.read(frame)) break;

75 detectAndDisplay(frame);

76 if (waitKey(dperiod) == 27) break; //if 'Esc' key is pressed

77 }

78 cap.release();

79 //waitKey(5000);

80 return 0;

81 }

စာရငး ၄.၂: ဗဒယဖတြခငး၊ေရးြခငး။

ဤ ပ ဂရမ တင မျက ာက ာေဖရန “haarcascade_frontalface_alt.xml” င

မျကလး များအား ာေဖရန“haarcascade_eye_tree_eyeglasses.xml”ဆသည ဖငများ

အားသးပါမည။ထဖငများသည “C:/opencv/opencv320/sources/data/haarcascades”

သမဟတ “/home/username/opencv/data/haarcascades” ေအာကတင သည။

မျက ာ င မျကလးများအတက CascadeClassfier object စခက ေကြငာ ပး၊ load

ကသး၍ အဆပါ ဖငများအား ဖတသည။

အချန ငတေြပးည ဗဒယ ကရန VideoCapture objectက ေကြငာသည အခါ

ဖငနာမည အစား 0 ကသးသည အတက သင ကနပျ တာ တင တပဆငထားေသာ

ကငမရာက သးသည။ VideoCapture ၏ get ကသး၍ လက ဗဒယ၏ setting

များက ဖတ င ပး၊ setကသး၍လသလ ြပင ငသည။ဤပ ဂရမတင ြပကကအရယ

အစား င ြပ နးက set င ြပငလကသည။ ထေနာက ြပကက တစခြခငး ဖတ၍ de-

tectAndDisplay ဖန ငက သးကာ မျက ာ ာ၍ ဝငးြပသည။

detectAndDisplay ဖန ငတင ပရပက အြဖ အမညး ေြပာငး၍ detectMulti-

Scale ကသး၍ ာသည။ သ၏ ပစမာ ေအာကပါ အတငး ြဖစသည။

Page 78: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၆၈ အခနး ၄. ဗဒယြပ စပြခငး

void CascadeClassifier::detectMultiScale(const Mat& image,

vector<Rect>& objects, double scaleFactor=1.1,

int minNeighbors=3, int flags=0,

Size minSize=Size(), Size maxSize=Size())

ပထမ Parameters ြဖစသည image မာ ာလသည ပရပြဖစ ပး၊ ဒတယ objects

တင ာေတသည ေနရာများ၏ စတဂ များအား သမးေပးမည။ ထေနာက ာေတသည

ေနရာ င အရယများက သး၍ circle င စကဝငးများ ဆ၍ ပက imshow င ြပေပး

သည။ ေအာကပါ ပ ၄.၁ တင တချန င တေြပးည မျက ာ ာေဖြခငး င ရလာသည

ပတက ြပထားသည။

ပ ၄.၁: တချန င တေြပးည မျက ာ ာေဖြခငး။

၄.၃ Source ကဒများ

ဤအခနး ပ ဂရမများ၏ sourceကဒများက ေအာကပါ ေနရာများတင ေတ ငသည။

Page 79: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၄.၃. SOURCE ကဒများ ၆၉

• OpenCVVideo Processing - https://github.com/yan9a/OpenCV _Video

_Processing

• Real-time Face Detection - https://github.com/yan9a/Real-time _Face

_Detection

Page 80: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

အခနး ၅

ပရပခြခမးသးသပ ာေဖြခငးများ

ဤအခနးတင ပရပ များအား ခြခမးစစစြခငး၊သးသပြခငး၊ ာေဖြခငး များအား ြပလပမည။

၅.၁ Connected Component Labeling

Connected component labelingသည binary imageတစခတင ေသာဆကစပေနသည

region များက မတညသည label များတပေပးသည။ဤalgorithmသည ပရပတစခက

စေခါကသာ စစရနလသြဖင floodfill စသည နညးများ င ငးယ လျငထေရာကြမနဆနမ

များစာသာလနသည။ သ၏ ပစမာ ေအာကပါအတငးြဖစသည [20]။

int cv::connectedComponents ( InputArray image,

OutputArray labels,

int connectivity = 8,

int ltype = CV_32S

)

ဆကစပေနသည regionအေရအတက စစေပါငးN က return ြပနေပးသည။ Label

များမာ [0, N−1] ြဖစ ပး၊ ၀ မာ ေနာကခအပငးအတက label ြဖစသည။ ေနာကတစမျ းမာ

connectedComponentsWithStats ြဖစ ပး၊ဆကစပေနေသာ region များအား ာေပး

၇၀

Page 81: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၅.၁. CONNECTED COMPONENT LABELING ၇၁

သည အြပင၊ သတ၏ ဂျဩေမတ ဗဟ (centroid)၊ အကျယအဝနး (area)၊ ေနရာ

စသညတက ပါတကချက ေပးသည။ သ၏ ပစမာ ေအာကပါအတငးြဖစသည။

int cv::connectedComponentsWithStats ( InputArray image,

OutputArray labels,

OutputArray stats,

OutputArray centroids,

int connectivity = 8,

int ltype = CV_32S

)

stats က stats(label, COLUMN) ြဖင ရယ င ပး column မာ

CC_STAT_LEFT

CC_STAT_TOP

CC_STAT_WIDTH

CC_STAT_HEIGHT

CC_STAT_AREA

CC_STAT_MAX

တမ တစခခ ြဖစသည။ သတ၏ နမနာက ေအာကပါ စာရငး ၅.၁ တင ေတ ငသည။

1 #include <stdio.h>

2 #include <iostream>

3 #include <opencv2/opencv.hpp>

4

5 using namespace std;

6 using namespace cv;

7

8 int main()

9 {

10 //Read original image

Page 82: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၇၂ အခနး ၅. ပရပခြခမးသးသပ ာေဖြခငးများ

11 Mat src;

12 src = imread("C:/opencv/ka_ori.jpg", 0);

13 if (!src.data) { printf("No image data \n"); return -1; }

14

15 // scale - to make it convenient to print out and see

16 Mat ims; resize(src, ims, Size(16, 8));

17 Mat imb; threshold(ims, imb, 128, 255, CV_8U);// make binary

18

19 namedWindow("Original Image", WINDOW_AUTOSIZE);

20 imshow("Original Image", imb);

21 cout << "Original" << endl << imb << endl << endl;

22

23 //Connected components

24 Mat imr; int N=connectedComponents(imb, imr);

25 cout << "CCL" << endl << imr << endl << endl;

26 cout<<"Number of components: "<< N-1 << endl;// 0 is background

27

28 //Connected components with stats

29 Mat cc, sts, ctd; N=connectedComponentsWithStats(imb, cc, sts,

ctd, 8);

30

31 //get area column except background

32 Mat A(sts, Rect(CC_STAT_AREA , 1, 1, sts.rows - 1));

33

34 // Localizing the biggest component

35 double minVal, maxVal;

36 Point minLoc, maxLoc;

37 minMaxLoc(A, &minVal, &maxVal, &minLoc, &maxLoc);

38 printf("Max area is %lf at label %d .\n", maxVal, (maxLoc.y + 1)

);

39

40 printf("Centroid of the biggest component: [%f,%f] \n", ctd.at<

double >(maxLoc.y + 1, 0), ctd.at<double >(maxLoc.y + 1, 1));

Page 83: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၅.၁. CONNECTED COMPONENT LABELING ၇၃

41

42 waitKey(0);

43 return 0;

44 }

စာရငး ၅.၁: ဆကစပေနေသာ နယေြမ များအား ာြခငး။

ပ ၅.၁: ဆကစပေနေသာ နယေြမ များအား အစကတနဖး တစခြခငး အေန င

ေတ င ပး၊ သတ၏ label များ၊ အေရအတက၊ အကးဆး နယေြမ၏အကျယအဝနး၊

ဗဟတက ေဖာြပထားသည။

အစတင ပရပအစကတနဖး များက ကြပကာအလယအက ြပနစစ ငရနအတက၊

ေသးငယသညအရယအစား 16 x 8အြဖစ resizeကသး၍ေြပာငးလကသည။ထေနာက

binary ပ ပ ရေစရန threshold င ေြပာငး ပး မရငးပ က ြပသည။ 16 x 8 အရယ

သာြဖစသြဖငအလနေသးငယသည။ထေနာကအစကတစခ ြခငးစ၏တနဖးက cout

င ကြပသည အတက console တင ဆကစပေနေသာ အစကများက မျကစြဖင

Page 84: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၇၄ အခနး ၅. ပရပခြခမးသးသပ ာေဖြခငးများ

ြမင ငသည။

connectedComponentsကသး၍ရ လာေသာ label များက cout၏အထကတင

ြမင ငသည။ Region များ၏ အေရအတကက ေတ င ပး၊ stats ၏ area များက

ထတယသည။ ထေနာက minMaxLoc ြဖင အကးဆး နယေြမက ာကာ သ၏ cen-

troid များ ာသည။ ပ ဂရမ၏ ရလဒက ပ ၅.၁ တငေတ ငသည။

၅.၂ Template Matching

ပရပတစခတငသတမတထားေသာ ပစ နမနာ ငကကညသည ေနရာက ာေဖြခငးအား

TemplateMatchingဟေခ မည။ထသ ာေဖရနmatchTemplate [21]ကသး ငသည။

သ၏ ပစမာ ေအာကပါအတငးြဖစသည။

void cv::matchTemplate ( InputArray image,

InputArray templ,

OutputArray result,

int method,

InputArray mask = noArray()

)

Template matching methodမာ ေအာကပါတမ တစခခ ြဖစ ငသည။

TM_SQDIFF

TM_SQDIFF_NORMED

TM_CCORR

TM_CCORR_NORMED

TM_CCOEFF

TM_CCOEFF_NORMED

နမနာ ပ ဂရမက ေအာကပါ စာရငး ၅.၂ တင ေတ ငသည။

Page 85: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၅.၂. TEMPLATE MATCHING ၇၅

1 #include "opencv2/highgui/highgui.hpp"

2 #include "opencv2/imgproc/imgproc.hpp"

3 #include <iostream>

4 #include <stdio.h>

5

6 using namespace std;

7 using namespace cv;

8

9 /// Global Variables

10 Mat img; Mat templ; Mat result;

11 int match_method;

12

13 void MatchingMethod(int, void*)

14 {

15 // Source image to display with rectangle overlay

16 Mat img_display;

17 img.copyTo(img_display);

18

19 // Do the Matching and Normalize

20 matchTemplate(img, templ, result, match_method);

21 normalize(result, result, 0, 1, NORM_MINMAX);

22

23 // Localizing the best match with minMaxLoc

24 double minVal, maxVal;

25 Point minLoc, maxLoc, matchLoc;

26 minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc, Mat());

27

28 // For SQDIFF and SQDIFF_NORMED , the best matches are lower

values.

29 // For all the other methods , the higher the better

30 if (match_method == CV_TM_SQDIFF || match_method ==

CV_TM_SQDIFF_NORMED) { matchLoc = minLoc; }

Page 86: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၇၆ အခနး ၅. ပရပခြခမးသးသပ ာေဖြခငးများ

31 else { matchLoc = maxLoc; }

32

33 // Show me what you got

34 Point matchLoc2(matchLoc.x + templ.cols, matchLoc.y + templ.rows

);

35 rectangle(img_display , matchLoc , matchLoc2 , Scalar::all(0), 2,

8, 0);

36 rectangle(result, matchLoc , matchLoc2 , Scalar::all(0), 2, 8, 0);

37 imshow("Source", img_display);

38 imshow("Result", result);

39 }

40

41 int main()

42 {

43 /// Load image and template

44 img = imread("c:/opencv/stand.jpg");

45 templ = imread("c:/opencv/template.jpg");

46

47 /// Create windows

48 namedWindow("Source", CV_WINDOW_AUTOSIZE);

49 namedWindow("Result", CV_WINDOW_AUTOSIZE);

50 namedWindow("Template", CV_WINDOW_AUTOSIZE);

51 imshow("Template", templ);

52 /// Create Trackbar

53 createTrackbar("Method: ", "Source", &match_method , 5,

MatchingMethod);

54 MatchingMethod(0, 0);

55

56 waitKey(0);

57 return 0;

58 }

စာရငး ၅.၂: သတမတ ထားေသာ ပစ တစခ င ကကညေသာ ေနရာ အား ာေဖြခငး။

Page 87: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၅.၂. TEMPLATE MATCHING ၇၇

ဤ ပ ဂရမတင မရငးပ င ာေဖလသည ပစ (template) တက ဖတ ပး၊ track-

bar မ ေရးချယသည matchingmethodအတငး template ငအကကညဆး ေနရာ

က မရငးပတင ာသည။ Template matching တက၍ရသည တနဖးများက result

window တင ြပသည။

ရလဒများမာ CV_TM_SQDIFF င CV_TM_SQDIFF_NORMEDနညးများအတက

တနဖးအငယဆး မာ ကကညမ အ ဆး ေနရာ ြဖစ ပး၊ ကျနေသာ နညးများ အတကမ

တနဖး အကးဆးမာကကညမ အ ဆး ေနရာြဖစသည။ ထအတက minMaxLoc က

သးသည။အကကညဆးေနရာတင မရငးပ င ရလဒများ၌ စတဂပ ငြပသည။ ပ ဂရမ

၏ ရလဒ က ပ ၅.၂ တင ေတ ငသည။

ပ ၅.၂: Template matching လပ၍ရေသာ ပ။

Page 88: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၇၈ အခနး ၅. ပရပခြခမးသးသပ ာေဖြခငးများ

၅.၃ Harris Corner Detector

ဤ အပငးတင အသငအြပငများ ာေဖြခငး (feature detection) နမနာ အေန င

cornerHarrisကသးကာHarris-Stephensmethod င ပရပတစခ ေထာငများအား

ာေဖြခငး အေကာငး တငြပမည [22]။ cornerHarris ၏ ပစ မာ ေအာကပါ အတငး

ြဖစသည။

void cornerHarris(InputArray src, OutputArray dst,

int blockSize, int ksize, double k,

int borderType=BORDER_DEFAULT )

နမနာ ပ ဂရမက စာရငး ၅.၃ တငေဖာြပထားသည။

1 #include "opencv2/highgui/highgui.hpp"

2 #include "opencv2/imgproc/imgproc.hpp"

3 #include <iostream>

4 #include <stdio.h>

5

6 using namespace std;

7 using namespace cv;

8

9 int main()

10 {

11 /// Load image and template

12 Mat img = imread("c:/opencv/stand.jpg", 0);

13 namedWindow("Source", CV_WINDOW_AUTOSIZE);

14 imshow("Source", img);

15 // Detect Harris Corners

16 Mat cornerStrength;

17 cornerHarris(img, cornerStrength , 3, 3, 0.01);

18 normalize(cornerStrength , cornerStrength , 0, 255, NORM_MINMAX ,

CV_8U);

19 namedWindow("Corner Strength", CV_WINDOW_AUTOSIZE);

Page 89: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၅.၃. HARRIS CORNER DETECTOR ၇၉

20 imshow("Corner Strength", cornerStrength);

21 // threshold the corner strengths

22 Mat harrisCorners;

23 threshold(cornerStrength , harrisCorners , 24, 255, cv::

THRESH_BINARY);

24 namedWindow("Corners", CV_WINDOW_AUTOSIZE);

25 imshow("Corners", harrisCorners);

26 waitKey(0);

27 return 0;

28 }

စာရငး ၅.၃: ေထာငအသငအြပင များအား ာေဖြခငး။

ပ ဂရမ တင ပရပတစခ က ဖတကာ cornerHarris င ေထာင အသငအြပငများ

၏ ေတ မ ြပငးအား (corner strength) ကတကသည။ ထေနာက threshold င

ြဖတချကာ ေထာငများက ေဖာြပသည။ ပ ဂရမ၏ရလဒက ပ ၅.၃တင ေတ ငသည။

ပ ၅.၃: ေထာင အသငအြပင များက ာေဖြခငး။

Page 90: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၈၀ အခနး ၅. ပရပခြခမးသးသပ ာေဖြခငးများ

၅.၄ ြမနမာ ငင၏ဗဟ

ပသ ာနတစခ၏ geometric center က centroid, C =[CX CY

]T, ဟေခ ပး

ေအာကပါ ညမ ြခငး များြဖင ာ ငသည။

CX =

∑(x× i(x, y))∑

i(x, y)(၅.၁)

CY =

∑(y × i(x, y))∑

i(x, y)(၅.၂)

ထတင x င y မာ pixel တစခြခငးစ၏ coordinates ေနရာြဖစ ပး၊ i(x, y) မာ ထ

သကဆင ရာ pixel ၏ intensity တနဖးြဖစသည။

နမနာ အေန င ြမနမာ ငင ေြမပ၏အလယဗဟ က ာမည။ထအတက Google

Maps တင ြမနမာ ငင၏ ေြမပက screen shot ရယကာ GIMP တင edit လပ၍

အြဖ အမညး ေြပာငးလကမည (ပ ၅.၄)။ ပအတက crop ြဖတလကေသာ border

လတကျ ၊ ေလာငဂျကျ များမာ

• ေြမာကဘက ၂၈.၅၅◦

• ေတာငဘက ၉.၈၄◦

• အေ ဘက ၁၀၁.၁၇◦

• အေနာကဘက ၉၂.၁၇◦

တ ြဖစသည။ Googlemaps မာMercator projectionသးထားသြဖငညမ ြခငး (၅.၁)

င (၅.၂) တတင အစကတစခြခငး စ၏ normalized ဧရယာ မာ အေကတာ အတက

1 ဆပါက လတကျ ϕ အလက ဧရယာ မာ cos(ϕ) ြဖစသည။ ြမနမာြပည ေြမပ၏

အလယဗဟအား ာေဖသည ပ ဂရမက စာရငး ၅.၄ တငေဖာြပထားသည။

1 #include <stdio.h>

2 #include <math.h>

3 #include <opencv2/opencv.hpp>

Page 91: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၅.၄. ြမနမာ ငင၏ဗဟ ၈၁

(a) Google maps ြမနမာ ငင

ေြမပ။

(b) GIMP က သး၍

အြဖ အမညး ေြပာငး ပးပ။

ပ ၅.၄: ြမနမာ ငင ေြမပအား Google maps မရယလကေသာ မရငး င၊ GIMP

ကသး၍ အစနး များ င အတ crop လပ၊ အြဖ အမညး ေြပာငးထားပ။

Page 92: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၈၂ အခနး ၅. ပရပခြခမးသးသပ ာေဖြခငးများ

4 #include <iostream>

5 using namespace std;

6 using namespace cv;

7 int main()

8 {

9 Mat image;

10 image = imread("C:/opencv/MyanmarMap6.PNG", IMREAD_GRAYSCALE);

11 if (!image.data) { printf("No image data \n"); return -1; }

12 namedWindow("Display Image", WINDOW_AUTOSIZE);

13 imshow("Display Image", image);

14

15 double latNorth = 28.55;

16 double latSouth = 9.84;

17 double logEast = 101.17;

18 double logWest = 92.17;

19

20 double sxi = 0, syi = 0;//for image

21 double slat = 0, slog = 0;//for latitude and longitude

22 double cslat = 0, cslog = 0;//with compensation for

23 // Universal Transverse Mercator (UTM) coordinate system

24 double si = 0;

25 double ilat, jlog;

26 double ci = 0;//compensated intensity

27 double sci = 0;//summation of ci

28 const double PI = 2 * acos(0.0);//get PI

29 //Manipulate pixels

30 long h = image.rows;

31 long w = image.cols;

32 long ithreshold = 138;

33 for (long i = 0; i < h; i++)

34 for (long j = 0; j < w; j++)

35 if (image.at<uchar >(i, j) > ithreshold) {

36 si += 1;//uniform pixel intensity

Page 93: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၅.၄. ြမနမာ ငင၏ဗဟ ၈၃

37 sxi += j;

38 syi += i;

39

40 ilat = latNorth - (latNorth - latSouth)*double(i) / double(h -

1);

41 jlog = logWest + (logEast - logWest)*double(j) / double(w - 1);

42 slog += jlog;

43 slat += ilat;

44

45 ci = cos(ilat*PI / 180.0);

46 sci += ci;

47 cslog += jlog*ci;

48 cslat += ilat*ci;

49 }

50

51 //image centroid

52 double cx = sxi / si;

53 double cy = syi / si;

54

55 //latitude and longitude centroid

56 double lat = slat / si;

57 double log = slog / si;

58

59 //compensated latitude and longitude centroid

60 double clat = cslat / sci;

61 double clog = cslog / sci;

62

63 printf("Centroid row col: [ %f , %f ] for image pixels. \n", cx,

cy);

64 printf("Centroid lat log: [ %f , %f ] \n", lat, log);

65 printf("Centroid lat log: [ %f , %f ] after compensation for

Mercator projection.\n", clat, clog);

66

Page 94: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၈၄ အခနး ၅. ပရပခြခမးသးသပ ာေဖြခငးများ

67 waitKey(0);

68 return 0;

69 }

စာရငး ၅.၄: ြမနမာြပည ေြမပ၏ အလယဗဟအား ာေဖြခငး။

ပ ဂရမမ တကေပးေသာ ြမနမာ ငင၏ အလယဗဟမာ Mercator projection အား

ထည စ းစား ပါက လတကျ ၂၀.၈၆ င ေလာငဂျကျ ၉၆.၄၈ တ ြဖစသည။ Google

mapsတင 20.86,96.48ဟ ာပါကေအာကပါ ပ ၅.၅အတငး ဗဟေနရာအား ေတ င

သည။

ပ ၅.၅: ြမနမာြပည ေြမပ၏ အလယဗဟ။

Page 95: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၅.၅. SOURCE ကဒများ ၈၅

၅.၅ Source ကဒများ

ဤအခနး ပ ဂရမများ၏ sourceကဒများက ေအာကပါ ေနရာများတင ေတ ငသည။

• Connected Component Labeling - https://github.com/yan9a/Connected

_Component _Labeling

• Template Matching - https://github.com/yan9a/Template _Matching

• Harris Corner Detector - https://github.com/yan9a/Harris _Corner _De-

tector

• Centroid ofMyanmar - https://github.com/yan9a/Myanmar _Centroid

Page 96: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

Appendix A

ေနာကဆကတ ငးလငးချက

၁.၁ ThresholdTypes

ThresholdTypesတစခစအတကသချာညမ ြခငး ြဖင ေဖာြပချက များက ေအာကပါ

ဇယား ၁.၁ ေတ ငသည။

၈၆

Page 97: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၁.၁. THRESHOLDTYPES ၈၇

ဇယား ၁.၁: Threshold အမျ းအစားများ၏ ညမ ြခငးများ။

THRESH_BINARY dst(x, y) =

maxval, if src(x, y) > thresh

0, otherwise

THRESH_BINARY_INV dst(x, y) =

0, if src(x, y) > thresh

maxval, otherwise

THRESH_TRUNC dst(x, y) =

thresh, if src(x, y) > thresh

src(x, y), otherwise

THRESH_TOZERO dst(x, y) =

src(x, y), if src(x, y) > thresh

0, otherwise

THRESH_TOZERO_INV dst(x, y) =

0, if src(x, y) > thresh

src(x, y), otherwise

THRESH_MASK

THRESH_OTSU flag ြဖစပါတယ။ Otsu algorithm ကသး ပး

optimal threshold တနဖးက ေရးဖပါ။

THRESH_TRIANGLE flag ြဖစပါတယ။ Triangle algorithm ကသး ပး

optimal threshold တနဖးက ေရးဖပါ။

Page 98: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

အကးအကားများ

[1] OpenCV, “Open source computer vision,” (http://opencv.org/).

[2] OpenCV, “Introduction to opencv,” (http://docs.opencv.org/3.2.0/d1/dfb/

intro.html).

[3] OpenCV, “Installation in linux,” (http://docs.opencv.org/2.4/doc/tutorials/

introduction/linux_install/linux_install.html).

[4] OpenCV, “Using opencv with gcc and cmake,” (http://

docs.opencv.org/2.4/doc/tutorials/introduction/linux_gcc_cmake/

linux_gcc_cmake.html).

[5] OpenCV, “Installation in windows,” (http://docs.opencv.org/2.4/doc/

tutorials/introduction/windows_install/windows_install.html).

[6] OpenCV, “Image filtering,” (http://docs.opencv.org/3.2.0/d4/d86/

group__imgproc__filter.html).

[7] OpenCV, “Making your own linear filters,” (http://docs.opencv.org/

2.4/doc/tutorials/imgproc/imgtrans/filter_2d/filter_2d.html).

[8] OpenCV, “Basic thresholding operations,” (http://docs.opencv.org

/3.2.0/db/d8e/tutorial_threshold.html).

၈၈

Page 99: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

အကးအကားများ ၈၉

[9] OpenCV, “Image thresholding,” (http://docs.opencv.org/3.2.0/d7/d4d/

tutorial_py_thresholding.html).

[10] OpenCV, “adaptivethreshold,” http://docs.opencv.org/3.2.0/d7/d1b/

group__imgproc__misc.html#ga72b913f352e4a1b1b397736707afcde3).

[11] G. B. Garcia, O. D. Suarez, J. L. E. Aranda, J. S. Tercero, I. S. Gracia, and

N. V. Enano, Learning Image Processing with OpenCV. Packt Publish-

ing Ltd., first ed., mar 2015.

[12] Cool-Emerald, “Selective color modification,” http://coolemerald

.blogspot.sg/2014/08/selective-color-modification.html).

[13] OpenCV, “Discrete fourier transform,” (http://docs.opencv.org/

3.1.0/d8/d01/tutorial_discrete_fourier_transform.html).

[14] R. Gonzalez, R. Woods, and S. Eddins, Digital Image Processing Using

MATLAB. Pearson Prentice Hall, 2004.

[15] R. Laganiere, OpenCV Computer Vision Application Programming

Cookbook. Packt Publishing, 2nd ed., 2014.

[16] OpenCV, “Videocapture class reference,” (http://docs.opencv.org/

3.2.0/d8/dfe/classcv_1_1VideoCapture.html).

[17] OpenCV, “Videowriter class reference,” (http://docs.opencv.org/

trunk/dd/d9e/classcv_1_1VideoWriter.html).

[18] OpenCV, “puttext: Draws a text string,” (http://docs.opencv.org/ 3.0-

beta/modules/imgproc/doc/drawing_functions.html#puttext).

[19] OpenCV, “Cascade classifier,” (http://docs.opencv.org/ 2.4/doc/tuto-

rials/objdetect/cascade_classifier/cascade_classifier.html).

Page 100: Yan Naing Aye - Report · PDF fileသင်စက်အတွက်အ ... 3 sudo apt get install python dev python numpy libtbb2 libtbb dev libjpeg dev libpng dev libtiff dev libjasper

၉၀ အကးအကားများ

[20] OpenCV, “Connected component labeling,” (http://docs.opencv.org/

3.2.0/d3/dc0/group__imgproc__shape.html).

[21] OpenCV, “Template matching,” (http://docs.opencv.org/2.4/doc/tut

orials/imgproc/histograms/template_matching/template_matching.html).

[22] OpenCV, “Harris corner detector,” (http://docs.opencv.org/2.4/doc/

tutorials/features2d/trackingmotion/harris_detector/harris_detector.html).