10
Introduction to Digital Image Processing and Machine Vision Programming Project and Source code: Chapter6_LowPass and HighPass Filtering กฎของการใชเอกสารและโคดโปรแกรมเผยแพร คือหามทําซ้ําเพื่อการคาใดๆทั้งสิ้น ดวยจิตคารวะ จากผูเรียบเรียง

การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP6 Low Pass and High Pass Filtering

Embed Size (px)

DESCRIPTION

การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP6 Low Pass and High Pass Filtering

Citation preview

Page 1: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP6 Low Pass and High Pass Filtering

 Introduction to Digital Image Processing and Machine Vision Programming    Project and Source code: Chapter6_Low‐Pass and High‐Pass Filtering    กฎของการใชเอกสารและโคดโปรแกรมเผยแพร คือหามทําซ้ําเพ่ือการคาใดๆทั้งส้ิน ดวยจิตคารวะ จากผูเรียบเรียง    

Page 2: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP6 Low Pass and High Pass Filtering

  หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง)  65 Chapter 6 การกรองขอมูลภาพ (Low‐Pass and High‐Pass Filtering)  

 

  การกรองขอมูลภาพ (Image Filtering) คือการนําขอมูลภาพผานตัวกรองสัญญาณเพื่อใหไดผลลัพธของภาพใหมออกมา ภาพผลลัพธที่ไดจะมีคุณสมบัติที่แตกตางจากภาพเริ่มตน โดยวัตถุประสงคหลักของการกรองขอมูลภาพคือ การปรับคุณภาพ (Enhancement) หรือการลดทอน (Attenuation) คุณสมบัติบางประการของภาพ เพื่อใหไดภาพที่มีคุณสมบัติตามที่ตองการ การกรองขอมูลภาพคือการประมวลผลภาพอยางหนึ่งที่จําเปน เนื่องจากในการใชงานจริงทางดานการประมวลผลภาพนั้น ภาพที่ไดมามักจะมีสัญญาณรบกวน หรือสัญญาณที่ไมพึงประสงคอ่ืนๆ ปะปนอยูดวย ดังนั้นการกรองขอมูลภาพสามารถปรับปรุงใหภาพมีคุณสมบัติที่ดีขึ้น เชนการกรองความถี่ต่ําผาน (Low-pass Filtering) การกรองความถี่สูงผาน (High-pass Filtering) การประมวลผลภาพในเรื่อง การกรองขอมูลภาพ (Image Filtering) จะใชโปรเจ็ค ImageProcessing ซ่ึงตอเนื่องจากบทที่ผานมานั้นไดเตรียมความสามารถพื้นฐานตางๆของโปรแกรมแลว ดังนั้นสามารถแกไขหรือเพิ่มโคดโปรแกรมในสวนของการกรองขอมูลภาพลงในคลาส CMyAlgorithm และเพิ่มรายละเอียดของเมนูใหมีความสามารถเรียกใชคําสั่งการกรองขอมูลภาพแบบตางๆได โดยมีขั้นตอนดังนี้ ขั้นตอนที่ 1 การเพิ่มฟงกชนัในคลาส CMyAlgorithm การประมวลผลภาพดิจิทัลดวยโปรแกรม Poolsak Koseeyaporn,Ph.D , Mr.Nattaphol  Jasungnuen

[email protected]  (089‐474‐942‐6) King Mongkut’s University of Technology North Bangkok 1.1 เปดหนาตาง Class View แสดงรายละเอียดคลาสทั้งหมดของโปรเจ็ค 1.2 เลือกคลาส CMyAlgorithm คลิ๊กขวา เลือกการ Add Function จะปรากฏไดอะล็อกดังภาพที่ 2 1.3 เพิ่มฟงกชันตางๆดังตารางที่ 1 ลงในไดอะล็อกดังภาพที่ 2 ตารางที1่ ฟงกชันตางๆที่เพิ่มลงในคลาส Return type: Function name: Access: Parameter: void LowPassFilter public - void HighPassFilter public - 1.4 เลือก Finish เมื่อเสร็จสิ้นขั้นตอน ภาพที ่1 การเพิ่มฟงกชันลงในคลาส CMyAlgorithm

Page 3: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP6 Low Pass and High Pass Filtering

  หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง)  66 Chapter 6 การกรองขอมูลภาพ (Low‐Pass and High‐Pass Filtering)  ภาพที่ 2 ไดอะล็อกการเพิ่มชื่อฟงกชัน ภาพที่ 3 แสดงรายละเอียดฟงกชัน เมื่อทําการเพิ่มฟงกชันเสร็จสิ้นแลว ในสวนของ Tap Class View จะแสดงรายละเอียดของฟงกชันที่เพิ่มเขามาดังภาพที่ 3 ผูเขียนโปรแกรมสามารถใชเมาทคล๊ิกที่ช่ือฟงกช่ันตางๆใน Class View เพื่อแกไขหรือเพิ่มโคดโปรแกรมภายในฟงกชันได ขั้นตอนที่ 2 การเพิ่มรายละเอียดของเมนู (Menu) ภาพที่ 4 แสดง Resource View ภาพที่ 5 การ Insert New เมนู การเพิ่มเมนูเปนการสรางสวนติดตอกับผูใชงาน เพื่อใหผูใชงานสามารถเลือกใชเมนูการทํางานไดตามตองการ การเพิ่มเมนูมีขั้นตอนดังนี้ 2.1 เลือก Tap Resource View แสดงรายละเอียดเมนูดังภาพที่ 4 2.2 ดับเบิ้ลคล๊ิกเลือก IDR_ImageProcessingTYPE จะปรากฏเมนูดังภาพที่ 5 2.3 คล๊ิกขวาบนเมนูบารเพิ่มรายละเอียดของเมนูทั้งหมดดังภาพที่ 6

Page 4: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP6 Low Pass and High Pass Filtering

  หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง)  67 Chapter 6 การกรองขอมูลภาพ (Low‐Pass and High‐Pass Filtering)  ภาพที่ 6 แสดงรายละเอียดของเมนู ขั้นตอนที่ 3 การเชื่อมโยงเมสเสจใหกับเมนู (Menu) การกําหนดฟงกชันใหสามารถเรียกใชดวยเมนูตางๆที่เราสรางขึ้นนั้นจะเรียกวา แม็พเมสเสจ ในบทนี้จําเปนตองแม็พฟงกชันจํานวน 2 ฟงกชันดังตารางที่ 2 ตารางที่ 2 กําหนด Member function Menu Message map Member function Low Pass COMMAND OnFilterLowpass High Pass COMMAND OnFilterHighpass สําหรับการแม็พเมสเสจ มีขั้นตอนดังนี้ คล๊ิกขวาที่เมนูยอยจะปรากฏ pop-up เมนู ใหเลือกรายการ Add Event Handler จะปรากฏไดอะล็อก Add Event Handler Wizard ดังภาพที่ 8 ชอง Messages type เลือกที่เมสเสจ COMMAND ชอง Class list เลือกคลาส CImageProcessingView ฟงกชัน Function handler name: ปรกติวิซารดจะตั้งชื่อฟงกชันใหอัตโนมัติ คล๊ิกปุม Add and Event เพื่อเพิ่มฟงกชัน คลาสวิซารดจะทําการเพิ่มฟงกชันใหอัตโนมัติ ใหทําการเพิ่มฟงกชันดังตารางที่ 2 ทั้งหมด รายเอียดเมนูดังนี้ 1. Low Pass แสดงภาพแบบความถี่ตํ่าผาน 2. High Pass แสดงภาพแบบความถี่สูงผาน

Page 5: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP6 Low Pass and High Pass Filtering

  หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง)  68 Chapter 6 การกรองขอมูลภาพ (Low‐Pass and High‐Pass Filtering)  ภาพที ่7 Pop-up รายการ Add Event Handler ภาพที ่8 แสดง Event Handler Wizard  เมื่อทําการแมพ็เมสเสจใหกบัเมนูทั้งหมดแลว ผูใชงานก็จะสามารถเรยีกใชฟงกชันตางๆที่ผานทางเมนูได ในขั้นตอนตอไปจะเพิ่มโคดโปรแกรมลงในฟงกชันตางๆเพื่อใหทํางานตามทีต่องการ ขั้นตอนที่ 4 การเพิ่มโคดโปรแกรมลงในคลาส CMyAlgorithm ในการเพิ่มโคดโปรแกรมลงในฟงกชันตางๆของคลาส CMyAlgorithm ประกอบดวยฟงกชัน LowPassFilter และ HighPassFilter มหีนาที่เก็บโครงสรางขอมูลของ Kernel ที่เปนเมทริกซ 3x3 สงคาใหกับฟงกชัน AreaConvolution เพื่อทําการหาคาเฉลี่ยบริเวณรอบๆจุดพิกเซลหรือการทํา Mask Coefficient ตามที่ไดอธิบายการทํางานในบทที่ผานมาแลว ตอไปใหทําการเพิ่มโคดโปรแกรมดังนี้ • การกรองขอมูลภาพดวย LowPassFilter ดังนี้ • การกรองขอมูลภาพดวย HighPassFilter ดังนี้ void CMyAlgorithm::LowPassFilter(void) 

{   double kernel[3][3]={  {1/16.0 ,    1/8.0 ,    1/16.0},         {1/8.0  ,      1/4.0 ,     1/8.0},         {1/16.0 ,    1/8.0 ,       1/16.0}  };   AreaConvolution(kernel, 0); } 

void CMyAlgorithm::HighPassFilter(void) {   double kernel[3][3]={  {0 , ‐1,  0},          {‐1,  9, ‐1},         {0 , ‐1,  0}        };   AreaConvolution(kernel, 0); } 

Page 6: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP6 Low Pass and High Pass Filtering

  หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง)  69 Chapter 6 การกรองขอมูลภาพ (Low‐Pass and High‐Pass Filtering) ขั้นตอนที่ 5 การเพิ่มโคดโปรแกรมลงในคลาส CImageProcessingView ในสวนของคลาสวิวทําหนาที่แสดงขอมูลภาพบนหนาจอคอมพิวเตอร โดยแสดงภาพที่ผานการประมวลผลภาพที่มีขนาดเทากับภาพตนฉบับ ฟงกชันหลักในการแสดงขอมูลภาพจะใชฟงกชัน GetDocument เพื่ออานขอมูลจากคลาสด็อกคิวเมนต จากนั้นคลาสวิวก็จะทําการวาดภาพออกทางจอภาพดวยฟงกชัน OnDraw นอกจากนั้นคลาสวิวจะทําหนาที่สงขอมูลไปยังคลาส CMyAlgorithm เพื่อทําการประมวลผลการกรองขอมูลภาพคือ Low-Pass Filter และ High-Pass Filter โดยมีการเพิ่มขอมูลลงในฟงกชันตางๆที่ไดแม็พเมสเสจในขั้นตอนที่ 3 เรียบรอยแลว ใหทําการเพิ่มโคดโปรแกรมลงในฟงกชันตางๆดังนี้ • เพิ่มโคด CImageProcessingView::OnFilterLowpass() ดังนี้ • เพิ่มโคด CImageProcessingView::OnFilterHighpass() ดังนี้ เมื่อทําการแกไขโคดโปรแกรมเสร็จทุกขั้นตอน ใหเลือกบันทึกทั้งหมด(Save all) และคอมไฟลโปรแกรมดวยเมนู Build ImageProcessing ถาไมมีขอผิดพลาด ก็จะสามารถรัน (Run) โปรแกรมได ขั้นตอนที่ 6 ทดสอบผลการทํางานของโปรแกรม การทํางานของโปรแกรมเริ่มตนดวยการเลือกภาพบิตแมพที่ตองการ เปดเขามายังโปรแกรม ImageProcessing ในบทนี้ทดสอบดวยภาพบิตแมพซึ่งขอมูลในแตละภาพมีคุณสมบัติเหมือนกันทุกประการ เพื่อที่จะแสดงใหเห็นถึงการเปลี่ยนแปลงของภาพเมื่อผานกระบวนการกรองขอมูลภาพดวยอัลกอริทึมแบบLow-Pass และ High-Pass Filtering มีขั้นตอนการทดสอบดังนี้ • เลือกรัน(Run) โปรแกรมจะแสดงหนาตางของโปรแกรม ImageProcessing ใหทําการเปดไฟลขอมูล ภาพบิตแมพ จะปรากฏไดอะล็อกสําหรับเปดไฟลภาพ เลือกภาพที่ตองการ ดังภาพที่ 9 void CImageProcessingView::OnFilterLowpass() 

{   CImageProcessingDoc* pDoc = GetDocument();   ASSERT_VALID(pDoc);    CMyAlgorithm* pImage = pDoc‐>GetImage();   if(pImage == NULL) return;   pImage‐>LowPassFilter();   pDoc‐>UpdateAllViews(NULL); } 

void CImageProcessingView::OnFilterHighpass() {   CImageProcessingDoc* pDoc = GetDocument();   ASSERT_VALID(pDoc);    CMyAlgorithm* pImage = pDoc‐>GetImage();   if(pImage == NULL) return;   pImage‐>HighPassFilter();   pDoc‐>UpdateAllViews(NULL); } 

Page 7: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP6 Low Pass and High Pass Filtering

  หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง)  70 Chapter 6 การกรองขอมูลภาพ (Low‐Pass and High‐Pass Filtering)  ภาพที่ 9 หนาตางโปรแกรม Image Processing • ทําการเปดภาพตนฉบับจํานวน 2 ภาพ จากนั้นเลือกเมนู Filter > Low Pass ผลที่ไดจากการทํา Low-Pass Filter จะทําใหภาพมีความคมชดัลดลง ดังภาพที่ 10 ภาพที ่10 การกรองขอมูลภาพดวย Low-Pass Filtering

Page 8: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP6 Low Pass and High Pass Filtering

  หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง)  71 Chapter 6 การกรองขอมูลภาพ (Low‐Pass and High‐Pass Filtering) • ทําการเปดภาพตนฉบับใหมจํานวน 2 ภาพ จากนัน้เลือกเมนู Filter > Low Pass ผลที่ไดจากการทาํ Low-Pass Filter แสดงดังภาพที่ 11 ภาพที่ 11 การกรองขอมูลภาพดวย Low-Pass Filtering • ทําการเปดภาพตนฉบับจํานวน 2 ภาพ จากนั้นเลือกเมนู Filter > High Pass ผลที่ไดจากการทํา High-Pass Filter จะทําใหภาพมีความคมชดัมากขึ้น ดังภาพที่ 12 ภาพที ่12 การกรองขอมูลภาพดวย High-Pass Filtering High‐Pass Filter 

Page 9: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP6 Low Pass and High Pass Filtering

  หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง)  72 Chapter 6 การกรองขอมูลภาพ (Low‐Pass and High‐Pass Filtering) สรุป การสรางโปรแกรมประมวลผลภาพดิจิทัลในบทนี้ทุกทานไดศึกษาถึงกระบวนการประมวลผลภาพเบื้องตนในการสรางอัลกอริทึมสวนของการกรองขอมูลภาพ (Image Filtering) โดยวัตถุประสงคหลักของการกรองขอมูลภาพเพื่อตองการปรับคุณภาพ (Enhancement) หรือการลดทอน (Attenuation) คุณสมบัติบางประการของภาพ เพื่อใหไดภาพที่มีคุณสมบัติตามที่ตองการนั่นเอง ซ่ึงการกรองขอมูลภาพเปนการประมวลผลภาพอยางหนึ่งที่จําเปน เนื่องจากในการใชงานจริงทางดานการประมวลผลภาพนั้น ภาพที่ไดมักจะมีสัญญาณรบกวนหรือสัญญาณอื่นๆที่ไมพึงประสงคตอการประมวลผลภาพปะปนอยูดวย ดังนั้นการกรองขอมูลภาพจะสามารถใชปรับปรุงใหภาพมีคุณสมบัติที่ดีขึ้นโดยการใชคุณสมบัติของตัวกรองความถี่ต่ําผาน (Low-pass) และตัวกรองความถี่สูงผาน (High-pass)

Page 10: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP6 Low Pass and High Pass Filtering

  หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง)  73 Chapter 6 การกรองขอมูลภาพ (Low‐Pass and High‐Pass Filtering)  หนังสือ 1. หนังสือ Digital Image Processing using MATLAB ผูแตง Rafael C.Gonzalez, Richard E. Woods, Steven L. Eddins ISBN 0-13-008519-7 (อางอิงการใช Kernal แบบตางๆ)

2. หนังสือ คูมือการเขียนโปรแกรมวินโดวดวย Visual C++.NET ผูแตง ยทุธนา ลีลาศวัฒนกุล (ใหเครดิตคนเขยีนตําราเลมนี้ครับ) (อางอิงตวัอยาง Source Code และการใชคลาส CImage) 3. หนังสือ Professional MFC with Visual C++ 5 ผูแตง Mike Blaszczak ISBN 1-861000-14-6 4. หนังสือ Visual C++ and MFC Programming ผูแตง นิรุธ อํานวยศลิป ISBN 974-93262-6-1 5. หนังสือ The Image Processing Handbook,3rd edition ,CRC Press, Boca Raton,FL

อินเทอเน็ต 1. www.codeproject.com ตัวอยางโปรแกรม Digital Image และ MFC 2. www.codeguru.com ตัวอยางโปรแกรม Digital Image และ MFC 3. ตัวอยาง Source Code และการใชคลาส cImage จากตัวอยางโปรแกรม cxImage ที่มา http://sourceforge.net/projects/cximage 4. http://www.stanford.edu/class/ee368/handouts.html ขอมูลทั่วไป 5. http://klimt.iwr.uni-heidelberg.de/mip/people/fhamprecht/fhamprecht.php3 ขอมูลทั่วไป 6. http://www.fesb.hr/khoros/dipcourse/dip/ ขอมูลทั่วไป 7. ขอมูล OpenCV Library - http://www.intel.com/technology/computing/opencv/ - http://opencvlibrary.sourceforge.net/ - OpenCV Reference manual 8. อางอิงการใชงาน Port I/O Driver สําหรับพอรตขนาน - http://www.driverlinx.com/DownLoad/DlPortIO.htm ทางผูจัดทําขอขอบพระคุณทุกทานที่กลาวถึงในขอมูลอางอิง ที่ไดจัดทําขอมูลที่มีความรูที่ดีและเปนประโยชนตอการเรียนรู ขอผลบุญทางความรูทั้งหมดอุทิศแดพอแม ครูอาจารย และเจากรรมนายเวรของขาพเจา เทอญฯ