13
Introduction to Digital Image Processing and Machine Vision Programming Chapter 1 Creating the Multiple View Project Project and Source code: Chapter1_Creating_MultipleView_Project (สามารถขอโคดโปรแกรมไดที่อีเมลล [email protected]) กฎของการใชเอกสารและโคดโปรแกรมเผยแพร คือหามทําซ้ําเพื่อการคาใดๆทั้งสิ้น ดวยจิตคารวะ จากผูเรียบเรียง

การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP1 Creating the Multiple View Project

Embed Size (px)

DESCRIPTION

การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP1 Creating the Multiple View Project

Citation preview

Page 1: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP1 Creating the Multiple View Project

 Introduction to Digital Image Processing and Machine Vision Programming  Chapter 1 Creating the Multiple View Project    Project and Source code: Chapter1_Creating_MultipleView_Project  (สามารถขอโคดโปรแกรมไดที่อีเมลล [email protected])   กฎของการใชเอกสารและโคดโปรแกรมเผยแพร คือหามทําซ้ําเพ่ือการคาใดๆทั้งส้ิน ดวยจิตคารวะ จากผูเรียบเรียง    

Page 2: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP1 Creating the Multiple View Project

  หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง) 2 Chapter 1 การสรางโปรแกรมประมวลผลภาพแบบวิว (Multiple View Document) 

 

 

  การประมวลผลภาพดิจิทัล (Digital Image Processing) เปนกระบวนการที่เกี่ยวของกับการแปลงขอมูลภาพใหอยูในรูปแบบขอมูลดิจิทัล (Digital format) ซ่ึงสามารถที่จะนําเอาขอมูลนี้ผานกระบวนการตางๆดวยโปรแกรมคอมพิวเตอรได ภาพดิจิทัลซ่ึงเปนภาพที่ประกอบดวยจุดภาพเล็กๆจํานวนมากเรียกวา พิกเซล (Pixel) โดยจะใชตัวเลขแทนคาของระดับสีหรือระดับความสวางของในแตละพิกเซล ซ่ึงสามารถที่จะปรับแตงเพื่อแสดงผลภาพตามตองการได ดังนั้นภาพดิจิทัลจึงมีขอดีตรงที่ สามารถนํามาประมวลผลและปรับปรุงคุณภาพของขอมูลดวยกระบวนการตางๆดวยคอมพิวเตอรได ลักษณะและความหมายของพิกเซล (Pixel) ในโลกของภาพกราฟกที่ใชในงานคอมพิวเตอร หนงย พิกเซล ถือเปนหนวยยอยที่เล็กที่สุดของรูปภาพ ซ่ึงเปนจุดเล็กๆที่รวมกันทําใหเกิดเปนภาพ ภาพหนึ่งจะประกอบดวยจํานวนพิกเซลหรือจุดมากมาย ซ่ึงในแตละภาพที่สรางขึ้นจะมีความหนาแนนของจุดหรือพิกเซลเหลานี้ที่แตกตางกันไป ความหนาแนนของจุดนี้เปนตัวบอกถึงความละเอียดของภาพ โดยมีหนวยเปน PPI (Pixel Per Inch) คือ จํานวนจุดตอนิ้ว ซ่ึงพิกเซลมีความสําคัญตอการสรางภาพของคอมพิวเตอรมาก เพราะทุกสวนของภาพกราฟก เชน จุด เสน แบบลายและสีของภาพนั้นเริ่มจากพิกเซลทั้งสิ้น เมื่อเราขยายภาพก็จะเห็นเปนภาพจุด โดยปกติแลวภาพที่มีความละเอียดสูงหรือคุณภาพดีควรจะมีคาความละเอียด 300 X 300 PPI ขึ้นไป ยิ่งคา PPI สูงขึ้นเทาไร ภาพก็จะมีความละเอียดคมชัดมากขึ้นเทานั้น ในทํานองเดียวกันจุดหรือพิกเซลแตละจุดก็จะแสดงคุณสมบัติทางสีใหแกภาพดวย โดยแตละจุดจะเปนตัวสรางสีประกอบรวมกันเปนภาพ ซ่ึงอาจมีขนาดความเขมและสีที่แตกตางกันได ทําใหเกิดเปนภาพที่มีสีสันตางๆ ยกตัวอยางการแสดงผลของอุปกรณแสดงผล (Output devices) ไมวาจะเปนเครื่องพิมพแบบ Dot matrix หรือแบบ Laser รวมทั้งจอภาพ จะเปนการแสดงผลแบบ Raster devices นั่นคือ อาศัยการรวมกันของ Pixel แสดงออกมาเปนภาพ ภาพบติแมพ (Bitmap) บิตแมพ (Bitmap) เปนภาพแปรผันตามความละเอียดแบบ (Resolution dependent) ประกอบขึ้นดวยจุดสีตางๆ ที่มีจํานวนคงที่ตายตัวตามการสรางภาพ ซ่ึงมีความละเอียดของภาพแตกตางกันไป หากขยายภาพบิตแมพ ก็จะพบวามีลักษณะเปนตารางเล็กๆซึ่งในแตละบิตคือ สวนหนึ่งของขอมูลคอมพิวเตอร เนื่องจากภาพบิตแมพมีคาเซลจํานวนคงที่จึงทําใหมีขอจํากัดในเรื่องการขยายขนาดภาพ การเปลี่ยนขนาดการประมวลผลภาพดิจิทัลดวยโปรแกรม

Poolsak Koseeyaporn,Ph.D , Mr.Nattaphol  [email protected]  (089‐474‐942‐6) 

King Mongkut’s University of Technology North Bangkok 

Page 3: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP1 Creating the Multiple View Project

  หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง) 3 Chapter 1 การสรางโปรแกรมประมวลผลภาพแบบวิว (Multiple View Document) ภาพสามารถทําโดยเพิ่มหรือลดจํานวนพิกเซลจากที่มีอยูเดิม เมื่อขยายภาพใหใหญขึ้น ความละเอียดของภาพจึงลดลง และถาเพิ่มคาความละเอียดมากขึ้นก็จะทําใหไฟลมีขนาดใหญและเปลืองเนื้อที่หนวยความจํามากขึ้นตามไปดวย ภาพท่ีขยายขึ้นจะมองเห็นเปนตารางสี่เหล่ียมเรียงตอกัน ไฟลภาพชนิดบิตแมพในระบบวินโดวสคือ ไฟลที่มีนามสกุล .BMP , .PCX , .TIF, .GIF, .JPG, .MSP และ .PCD เปนตน ในบทนี้จะเปนการอธิบายเกี่ยวกับการสรางโปรเจ็คใหมสําหรับการประมวลผลภาพดิจิทัลดวยโปรแกรม Microsoft Visual C++ แบบ Multiple Document โดยเราสามารถเปดภาพดิจิทัลพรอมๆกันไดหลายภาพ ซ่ึงสามารถแสดงใหเห็นถึงการเปลี่ยนแปลงของภาพจากกระบวนการประมวลผลภาพดิจิทัลในแตละขั้นตอนไดชัดเจนมากยิ่งขึ้น การสรางโปรแกรมประมวลผลภาพดิจิทัลแบบ Multiple Documents การสรางโปรแกรมแบบ Multiple Document เพื่อใชสําหรับการประมวลผลภาพดิจิทัลนั้น มีวิธีการโดยที่เราจะตองกําหนดความสามารถอยางคราวๆของโปรแกรมกอน โดยในโปรเจ็คนี้เราตองการใหโปรแกรมมีลักษณะเบื้องตนดังตอไปนี้ 1. สามารถเปดภาพดิจิทัลที่มีนามสกุลไฟลตางๆดังภาพที่ 1 ดังนี้  

 

 

 

 

 

  2. โปรแกรมสามารถเปดภาพดิจิทัลที่ตองการไดหลายๆภาพ พรอมกัน โดยกระบวนการตางๆของการกระทําตอไฟลภาพดิจิทัลอานขอมูลตรงจากฮารดดิสก มาเก็บไวในหนวยความจําของโปรแกรม โดยเราจะใชฟงกชันของคลาส CImage ที่มีอยูใน Microsoft Visual C++.NET 2003 (และนี่ก็คือเหตุผลหนึ่งที่เราจําเปนตองใช Visual C++.NET 2003 ) 3. การเปดภาพดิจิทัลที่มีขนาดใหญกวาวิว(View) ของวินโดว โปรแกรมจะตองสามารถแสดงภาพแบบ Scroll View ไดอัตโนมัติ ภาพที่ 1 ภาพดิจิทัลชนิดตางๆดังนี้ BMP, JPEG, GIFF, TIFF และ PNG

Page 4: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP1 Creating the Multiple View Project

  หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง) 4 Chapter 1 การสรางโปรแกรมประมวลผลภาพแบบวิว (Multiple View Document) ในหัวขอที่ผานมาเราไดกําหนดลักษณะอยางคราวๆของโปรแกรมที่สรางขึ้นแบบ Multiple Document ตอไปนี้ก็จะเปนการแสดงวิธีการและขั้นตอนในการใช Microsoft Visual C++.NET 2003 สําหรับสรางโปรแกรมประมวลผลภาพดิจิทัล โดยมีรายละเอียดดังนี้ ขั้นตอนที่ 1 สรางโปรแกรมประมวลผลภาพดิจิทัลดวย MFC Application Wizard เปดโปรแกรม Visual C++.NET 2003 โดยดับเบิ้ลคลิกที่ไอคอน ทําการสรางโปรเจ็คใหมดวย MFC Application พิมพช่ือโปรเจ็คเปน ImageProcessing ดังภาพที่ 2 ภาพที่ 2 สรางโปรเจ็คใหมดวย MFC Application 1.1 เลือก Tap “Application Type” แบบ Multi Document และเลือกการสนับสนุน Document/View Architecture support ดังภาพที่ 3 ภาพที่ 3 การกําหนด Application Type

Page 5: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP1 Creating the Multiple View Project

  หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง) 5 Chapter 1 การสรางโปรแกรมประมวลผลภาพแบบวิว (Multiple View Document) 1.2 เลือก Tap “Advanced Feature” ทําการยกเลิกการสนับสนุน ActiveX Control ดังภาพที่ 4 ภาพที่ 4 การกําหนด Advanced Features 1.3 เลือก Tap “Generated Classes” โดยใหเลือกในชอง Generated Classes: กําหนดใหคลาส CImagePrcoessingView สืบทอดคลาสมาจาก CScrollView และกด Finish ดังภาพที่ 5 ภาพที่ 5 การสืบทอดคลาสจาก CScrollView จากการกําหนดคาตางๆในขัน้ตอนที่ผานมา Microsoft Visual C++.net 2003 จะสรางโคดตนแบบใหกับโปรเจ็ค ซ่ึงประกอบดวยคลาสตางๆสําหรับการแสดงผล(View) และการจดัการเอกสาร(Document) เมื่อเราเลือกเมนู Build > Build ImageProcessing และรัน(Run) โปรแกรมไดผลดังภาพที่ 6

Page 6: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP1 Creating the Multiple View Project

  หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง) 6 Chapter 1 การสรางโปรแกรมประมวลผลภาพแบบวิว (Multiple View Document)  ภาพที่ 6 ผลของโปรแกรมแบบ Multiple Document ดวย MFC Application Wizard ขั้นตอนที่ 2 เพิ่มคลาส CMyAlgorithm การสรางคลาส CMyAlgorithm สืบทอดจากคลาส CImage ซ่ึงมีความสามารถเปดไฟลชนิดบิตแมพ และจะใชคุณสมบัติตางๆของคลาสสําหรับการประมวลภาพดิจิทัล การสรางคลาสใหมโดยการใช Wizard ของ Visual C++.net เพิ่มลงในโปรเจ็ค ImageProcessing มีขั้นตอนดังนี้ 2.1 เปดโปรเจ็ค ImageProcessing เลือก Tap Class View 2.2 คลิกขวาที่ ImageProcessing คลิก Add > Add Class ดังภาพที่ 7 ปรากฏไดอะล็อก Add Class 2.3 เลือกคลาสตนแบบ Generic C++ Class คลิกปุม Open ดังภาพ หฟ ภาพที่ 7 แสดงการเพิ่มคลาส CMyAlgorithm เลือก Add Class เลือก Generic C++ Class

Page 7: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP1 Creating the Multiple View Project

  หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง) 7 Chapter 1 การสรางโปรแกรมประมวลผลภาพแบบวิว (Multiple View Document) 2.4 กําหนดชื่อคลาส CMyAlgorithm ในชอง “Class name:” และกําหนด “Base class:” สืบทอดคลาสจาก CImage โดยกําหนดการเขาถึงขอมูล(Access) เปนแบบ public ดังภาพที่ 8 ภาพที่ 8 การเพิ่มคลาส CMyAlgorithm ขั้นตอนที่ 3 เพิ่มโคดโปรแกรมลงในคลาส CImageProcessingApp การเพิ่มโคดโปรแกรมในสวนนี้จะทําหนาที่เชื่อมโยงขอมูลของคลาส CMyAlgorithm เขากับโปรเจ็ค ImageProcessing โดยเลือกที่ Tap Class View และเปดไฟล ImageProcessing.h เพิ่มโคดโปรแกรมดังภาพที่ 9 ภาพที่ 9 การเพิ่มโคดโปรแกรมลงในคลาส CImageProcessingApp ในขั้นตอนตอไปใหยกเลิกคําสั่งสําหรับการเปดเอกสารใหมอัตโนมัติ ในขณะที่มีการเปดโปรแกรมขึ้นมา โปรแกรมที่ออกแบบขึ้นมานั้นจะตองสามารถเปดภาพดิจิทัลชนิดบิตแมพดังภาพที่ 1 ได โดยจะตองเขียนคําสั่งเพื่อสรางไดอะล็อกขึ้นมา ดังนั้นในขณะที่โปรแกรมเริ่มทํางานจะไมมีการเปดเอกสารใดๆทั้งสิ้น ใหทําการยกเลิกคําสั่ง ParseCommandLine และ ProcessShellCommand ในฟงกชัน InitInstance( ) ดังนี้ //Header file //MyAlgorithm.h #pragma once #include "atlimage.h" class CMyAlgorithm : public CImage { public:   CMyAlgorithm(void);   ~CMyAlgorithm(void); }; 

//Implement file //MyAlgorithm.cpp #include "StdAfx.h" #include ".\myalgorithm.h" CMyAlgorithm::CMyAlgorithm(void) { } CMyAlgorithm::~CMyAlgorithm(void) { } 

Header file  Implement file

// ImageProcessing.h #pragma once #ifndef __AFXWIN_H__      #error include 'stdafx.h' before including this file for PCH #endif  #include "resource.h"           // main symbols #include "MyAlgorithm.h"   //เพิ่มโคดสวนนี้ลงในโปรแกรม  // CImageProcessingApp: // See ImageProcessing.cpp for the implementation of this class class CImageProcessingApp : public CWinApp { private: …………………

ผลจากการสรางคลาส CMyAlgorithm

Page 8: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP1 Creating the Multiple View Project

  หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง) 8 Chapter 1 การสรางโปรแกรมประมวลผลภาพแบบวิว (Multiple View Document)  ทําการเพิ่มตัวแปร m_nFilterIndex และฟงกชัน GetFilterIndex เพื่อเปดอานชื่อ Path ของไฟลรูปภาพ รวมถึงการเก็บคานามสกุลไฟลตางๆ สําหรับสงขอมูลใหกับคลาสด็อกคิวเมนตใหสามารถอานและเปดไฟลอิมเมจได การเปดไฟลภาพมาแสดงในวิว(View) ทําไดโดยการเขียนโปรแกรมเรียกไดอะล็อกดวยฟงกชัน OnFileOpen( ) ใหเพิ่มโคดโปรแกรมดังนี้ // ImageProcessing.cpp …………………….. BEGIN_MESSAGE_MAP(CImageProcessingApp, CWinApp)   ON_COMMAND(ID_APP_ABOUT, OnAppAbout)   ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)   //ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)//ยกเลิดคําสั่งการเปดไดอะล็อก   ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)   ON_COMMAND(ID_FILE_OPEN, OnFileOpen) END_MESSAGE_MAP() …………………  BOOL CImageProcessingApp::InitInstance() {   ……………………   // create main MDI Frame window   CMainFrame* pMainFrame = new CMainFrame;   if (!pMainFrame || !pMainFrame‐>LoadFrame(IDR_MAINFRAME))     return FALSE;   m_pMainWnd = pMainFrame;    

/*    CCommandLineInfo cmdInfo;   ParseCommandLine(cmdInfo);   // Dispatch commands specified on the command line.  Will return FALSE if   // app was launched with /RegServer, /Register, /Unregserver or /Unregister.   if (!ProcessShellCommand(cmdInfo))     return FALSE;   */    // The main window has been initialized, so show and update it   pMainFrame‐>ShowWindow(m_nCmdShow);   pMainFrame‐>UpdateWindow();   return TRUE; } 

ยกเลิกคําสั่งการเปดเอกสารใหม //ImageProcessing.cpp ………………. class CImageProcessingApp : public CWinApp { private: 

int m_nFilterIndex;  // เพิ่มตัวแปร m_nFilterIndex public:   CImageProcessingApp(); // Overrides public:   virtual BOOL InitInstance(); // Implementation   afx_msg void OnAppAbout();   DECLARE_MESSAGE_MAP()   afx_msg void OnFileOpen();  // คําส่ังแมพฟงกชั่นสําหรับเปดไดอะลอ็ก   int GetFilterIndex(void);        // เพิ่มฟงกชัน GetFilterIndex }; 

Page 9: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP1 Creating the Multiple View Project

  หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง) 9 Chapter 1 การสรางโปรแกรมประมวลผลภาพแบบวิว (Multiple View Document) การสรางไดอะล็อกสําหรับเปดไฟลภาพชนิดบิตแมพ เราตองหาคาสตริงที่ใชสําหรับกรองนามสกุลไฟลภาพ (Filter String) โดยใชฟงกชัน GetExporterFilterString และจะมีการตรวจสอบความผิดพลาดของการฟลเตอรสตริง ดังนั้นถาการเปดไฟลไมสําเร็จ จะมีไดอะล็อกแสดงถึงความผิดพลาดที่เกิดขึ้น สําหรับในกรณีที่ฟงกชัน GetExporterFilterString ทํางานสําเร็จ จะนําเอาขอมูลที่ผานการฟลเตอรสตริงกําหนดคาใหกับคอนสตรัคเตอรของคลาส CFileDialog จึงจะสามารถเรียกไดอะล็อก OpenFile ใหแสดงออกมาไดโดยใชคําสั่ง DoModal ดังนั้นเมื่อมีการเลือกนามสกุลไฟลที่ File of Type ก็จะเก็บคาใหกับตัวแปร m_nFilterIndex และเรียกฟงกชัน OpenDocumentFile สงคา Path ของไฟลภาพที่เราเลือกไปยังคลาส CImageProcessingDoc เพื่อทําการอานไฟล โดยใหเราเพิ่มโคดโปรแกรมดังนี้ ขั้นตอนที่ 4 เพิ่มโคดโปรแกรมลงในคลาส CImageProcessingDoc การทํางานของคลาส CImageProcessingDoc จะมีหนาที่อานไฟลภาพดิจิทัล แลวเก็บขอมูลภาพลงในออปเจ็กต CMyAlgorithm โดยมีการสงผานขอมูลกับฟงกชัน OnOpenDocument ซ่ึงเปนเวอรชวลฟงกช่ัน เมื่อคลาส CImageProcessingDoc เก็บขอมูลภาพแลว คลาสวิว (View) ก็สามารถนําขอมูลภาพมากระทํากระบวนการอิมเมจดิจิทัลตอไปได สามารถเพิ่มโคดโปรแกรมการสงขอมูลภาพดังนี้ //ImageProcessing.cpp ………………………… int CImageProcessingApp::GetFilterIndex(void) {   return m_nFilterIndex; }  void CImageProcessingApp::OnFileOpen() {   CImage image;   CString strFilter;   CSimpleArray<GUID> arrayGuidTypes;   HRESULT hResult = image.GetExporterFilterString(strFilter,arrayGuidTypes);   if (FAILED(hResult))    {     CString strError;     strError.Format("เกิดขอผิดพลาดในการฟลเตอรภาพ ");     ::AfxMessageBox(strError);     return;   }    CFileDialog dlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST, strFilter);   if(dlg.DoModal() != IDOK)      return;   m_nFilterIndex = dlg.m_ofn.nFilterIndex;   OpenDocumentFile(dlg.GetFileName()); } 

Page 10: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP1 Creating the Multiple View Project

  หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง) 10 Chapter 1 การสรางโปรแกรมประมวลผลภาพแบบวิว (Multiple View Document) 4.1 เพิ่มโคดโปรแกรมลงในไฟล ImageProcessingDoc.h ดังนี้ 4.2 เพิ่มโคดโปรแกรมสําหรับกําหนดคาเริ่มตนใหคอนสตรัคเตอรของคลาสด็อกคิวเมนตลงในไฟล ImageProcessingDoc.cpp ดังนี้ 4.3 เพิ่มฟงกชัน OnOpenDocument และเพิ่มโคดโปรแกรมดังนี ้ ฟงกชัน OnOpenDocument จะทํางานหลังจากมีการเรียก OnFileOpen สําหรับสงชื่อ Path ของไฟลอิมเมจ ในกระบวนการนี้เร่ิมดวยการสรางออปเจ็คตใหมคือ m_image ซ่ึงจะทําการเรียกฟงกชัน Load เพื่ออานขอมูลภาพเขามาในออปเจ็คต m_image ในกรณีที่สามารถอานไฟลอิมเมจไดฟงกชันจะคืนคาจริง ถาอานขอมูลภาพไมสําเร็จจะคืนคาเท็จและแสดงขอความผิดพลาด //ImageProcessingDoc.h ………. class CImageProcessingDoc : public CDocument { protected:   CMyAlgorithm *m_image; public:   CMyAlgorithm * GetImage(void)//inline function    {     return m_image;   } 

virtual BOOL OnOpenDocument(LPCTSTR lpszPathName); 

void SetPImage(CMyAlgorithm* image); ……………. 

CImageProcessingDoc::CImageProcessingDoc() {   // TODO: add one‐time construction code here   m_image = NULL; } 

 BOOL CImageProcessingDoc::OnOpenDocument(LPCTSTR lpszPathName) { 

if (!CDocument::OnOpenDocument(lpszPathName))     return FALSE;   // TODO:  Add your specialized creation code here   HRESULT hResult;   m_image = new CMyAlgorithm;   hResult = m_image‐>Load(lpszPathName);   if (FAILED(hResult))    {     CString strError;     strError.Format("ไมสามารถอานไฟลภาพได");     ::AfxMessageBox(strError);     return FALSE;   }   return TRUE; }

Page 11: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP1 Creating the Multiple View Project

  หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง) 11 Chapter 1 การสรางโปรแกรมประมวลผลภาพแบบวิว (Multiple View Document) 4.4 เพิ่มฟงกชัน SetPImage ซ่ึงจะใชในการกําหนดคาออปเจก็ตของภาพดิจทิัล ดังนี้ ขั้นตอนที่ 5 เพิ่มโคดโปรแกรมลงในคลาส View ในการทํางานของคลาสวิว(View) จะมหีนาที่ติดตอกับผูใชงานหรือเปนสวนของการแสดงผลใหเห็นกระบวนการตางๆของการประมวลผลภาพ ใหทําการเพิ่มโคดโปรแกรมในคลาสวิว เพื่อแสดงภาพ ดังนี้ ฟงกชัน OnDraw จะถูกเรียกทุกครั้งที่มีการวาดภาพบนวิว ไมวาจะเปนการเปดดูภาพบิตแมพ หรือเมื่อโปรแกรมทําการประมวลผลภาพเสร็จสิ้นก็จะมีการวาดภาพลงในวิวเสมอ การทํางานของฟงกชันนี้เร่ิมตนดวยการอานขอมูลจากคลาสด็อกคิวเมนต โดยใชฟงกชัน GetImage ซ่ึงจะคืนคาพอยนเตอรที่ช้ีขอมูลของคลาส CMyAlgorithm แลวเก็บขอมูลในตัวแปร *pImage ตอไปจะมีการประกาศตัวแปรสําหรับการปรับขนาดของวิวสวนลูก(ChildView) ประกาศตัวแปร rect สําหรับเก็บขนาดของพื้นที่ไคลเอนต หรือเก็บพื้นที่ของขนาดภาพที่อานเขามา ประกาศตัวแปร rect1 ใชเก็บพื้นที่ไคเอนตโดยใชฟงกชัน GetClientRect ในโปรแกรมเรากําหนดใหพื้นที่มีการขยายไดตามขนาดของภาพตนแบบที่อานเขา ดังนั้นพื้นที่ดานหลังภาพในสวนที่เหลือจะใชฟงกชัน FillSolidRect เคลียรพื้นที่หนาจอกอนทําการวาดภาพลงที่วิว การวาดภาพลงในพื้นที่วิวจะใชฟงกชัน StretchBlt โดยจะกําหนดขนาดเทากับภาพตนฉบับ void CImageProcessingDoc::SetPImage(CMyAlgorithm* image) {   m_image = image; } 

void CImageProcessingView::OnDraw(CDC* pDC) {   CImageProcessingDoc* pDoc = GetDocument();   ASSERT_VALID(pDoc);   if (!pDoc)     return;  

// TODO: add draw code for native data here   CMyAlgorithm * pImage = pDoc‐>GetImage();   if (pImage == NULL)     return;    CSize  sizeTotal;   CRect  rect, rect1;    rect.top = rect.left = 0;   GetClientRect(&rect1);         sizeTotal.cx =  pImage‐>GetWidth();   sizeTotal.cy =  pImage‐>GetHeight();   rect.right  = max(sizeTotal.cx, rect1.right);      

rect.bottom = max(sizeTotal.cy, rect1.bottom);   pDC‐>FillSolidRect(rect, RGB(128,128,128));    pImage‐>StretchBlt(pDC‐>m_hDC,0,0, sizeTotal.cx, sizeTotal.cy, SRCCOPY);      SetScrollSizes(MM_TEXT, sizeTotal);      } 

Page 12: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP1 Creating the Multiple View Project

  หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง) 12 Chapter 1 การสรางโปรแกรมประมวลผลภาพแบบวิว (Multiple View Document) ขั้นตอนที่ 6 ทดสอบผลการทํางานของโปรแกรม เมื่อทําการเพิ่มโคดโปรแกรมครบทุกขั้นตอน ใหบันทึกไฟลทั้งหมด(Save all) และทําการคอมไฟลโปรแกรมดวยคําสั่ง Build ImageProcessing ที่เมนู ถาหากไมมีขอผิดพลาดประการใดก็จะสามารถรัน โปรแกรมได การทดสอบผลของโปรแกรมแสดงดังตอไปนี้ • เมื่อมีการรัน (Run) โปรแกรมจะแสดงหนาตางโปรแกรม ImageProcessing เมื่อเลือกที่ File Open จะแสดงไดอะล็อกเปดไฟลภาพที่ตองการ ดังภาพที ่10 ภาพที่ 10 ไดอะล็อกสําหรับการเปดไฟลภาพ • เมื่อทําการเลือกเปดไฟลภาพที่ตองการ โปรแกรมจะทําการวาดภาพลงในววิ ดังภาพที่ 11 ภาพที่ 11 โปรแกรมเปดและแสดงภาพแบบหลายววิ ไดอะล็อกเปดไฟลภาพ แสดงภาพที่ 1 แสดงภาพที่ 2

Page 13: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP1 Creating the Multiple View Project

  หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง) 13 Chapter 1 การสรางโปรแกรมประมวลผลภาพแบบวิว (Multiple View Document) ]k หนังสือ 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 ทางผูจัดทําขอขอบพระคุณทกุทานที่กลาวถึงในขอมูลอางอิง ที่ไดจัดทาํขอมูลที่มีความรูที่ดีและเปนประโยชนตอการเรยีนรู ขอผลบุญทางความรูทั้งหมดอุทิศแดพอแม ครูอาจารย และเจากรรมนายเวรของขาพเจา เทอญฯ