การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม...

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

Upload: know2pro

Post on 29-Jul-2015

253 views

Category:

Documents


3 download

DESCRIPTION

การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP2 Basic Pixel and Image Component

TRANSCRIPT

Page 1: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP2 Basic Pixel and Image Component

 

 

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

Page 2: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP2 Basic Pixel and Image Component

 หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง)  13 Chapter 2 Basic Pixel Processing and Image Component 

 

 

  ในบทนี้จะประยุกตใชโปรแกรม Image Processing ที่ไดสรางขึ้นในบทที่ผานมา ซ่ึงที่ผานมานั้นไดทําการสรางตนแบบโปรแกรมใหสามารถแสดงภาพอิมเมจตนแบบที่อานขอมูลโดยตรงจากฮารดดิสก และนําขอมูลภาพมาแสดงผลในวิว (View) ของวินโดว ในตัวอยางตอไปนี้จะศึกษาในเรื่องขององคประกอบสีของภาพ (Color Component) การกลับสีของภาพ (Invert) และการทําภาพสีขาว-ดํา (Gray Scale) ซึ่งเปนพื้นฐานของการประมวลผลภาพดิจิตอล โดยจะมีการสรางอัลกอริทึม(Algorithm) ตางๆเพิ่มเติมลงในคลาสที่ไดเตรียมไวในบทที่ผานมาแลว ดังนั้นรายละเอียดการเขียนโปรแกรมและขั้นตอนตางๆ จะศึกษากันดังตอไปนี้ เปดโปรเจ็ค Image Processing ดวย Microsoft Visual C++.NET 2003 เพื่อทําการเพิ่มรายละเอียดของคลาส CMyAlgorithm และเพิ่มรายละเอียดของเมนู ใหมีความสามารถในการแยกสวนประกอบสีของภาพ การกลับสีภาพ และการทําภาพสีขาว-ดํา โดยมีขั้นตอนดังนี้ ขั้นตอนที่ 1 การเพิ่มฟงกชันลงในคลาส 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: void RedComponent public void GreenComponent public void BlueComponent public void Invert public void GrayColorScale public 1.4 เลือก Finish เมื่อเสร็จสิ้นขั้นตอน

Page 3: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP2 Basic Pixel and Image Component

 หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง)  14 Chapter 2 Basic Pixel Processing and Image Component  ภาพที่ 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++ EP2 Basic Pixel and Image Component

 หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง)  15 Chapter 2 Basic Pixel Processing and Image Component  ภาพที่ 6 การเพิ่มรายละเอียดเมนู ขั้นตอนที่ 3 การเชื่อมโยงเมสเสจใหกับเมนู (Menu) การกําหนดฟงกชันใหสามารถเรียกใชดวยเมนูตางๆที่เราสรางขึ้นนั้นจะเรียกวา แม็พเมสเสจ ในบทนี้จําเปนตองเชื่อมโยงฟงกชันจํานวน 5 ฟงกชันดังตารางที่ 2 ตารางที่ 2 กําหนด Member function Menu Message map Member function Invert Color COMMAND OnImagetoolInvertcolor Gray Scale COMMAND OnImagetoolGrayscale Red Component COMMAND OnImagetoolRedcomponent Green Component COMMAND OnImagetoolGreencomponent Blue Component COMMAND OnImagetoolBluecomponent สําหรับการแม็พเมสเสจ มีขั้นตอนดังนี้ คล๊ิกขวาที่เมนูยอยจะปรากฏ pop-up เมนู ใหเลือกรายการ Add Event Handler จะปรากฏไดอะล็อก Add Event Handler Wizard ดังภาพที่ 8 ชอง Messages type เลือกที่เมสเสจ COMMAND ชอง Class list เลือกคลาส CImageProcessingView ฟงกชัน Function handler name: ปรกติวิซารดจะตั้งชื่อฟงกชันใหอัตโนมัติ คล๊ิกปุม Add and Event เพื่อเพิ่มฟงกชัน คลาสวิซารดจะทําการเพิ่มฟงกชันใหอัตโนมัติ ใหทําการเพิ่มฟงกชันดังตารางที่ 2 ทั้งหมด รายเอียดเมนูดังนี ้1. Invert Color แสดงการกลับสีภาพกับภาพตนฉบับ 2. Gray Scale แสดงสีภาพขาวดํา 3. Red Component แสดงสวนประกอบสีแดงของภาพ 4. Green Component แสดงสวนประกอบสีเขียวของภาพ 5. Blue Component แสดงสวนประกอบสีน้ําเงินของภาพ ภาพที่ 7 Pop-up รายการ Add Event Handler  ภาพที่ 8 แสดง Event Handler Wizard 

Page 5: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP2 Basic Pixel and Image Component

 หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง)  16 Chapter 2 Basic Pixel Processing and Image Component  เมื่อทําการแมพ็เมสเสจใหกบัเมนูทั้งหมดแลว ผูใชงานก็จะสามารถเรยีกใชฟงกชันตางๆผานทางเมนูได ในขั้นตอนตอไปจะเพิ่มโคดโปรแกรมลงในฟงกชันตางเพื่อใหทํางานตามที่ตองการ ขั้นตอนที่ 4 การเพิ่มโคดโปรแกรมลงในคลาส CMyAlgorithm ในการเพิ่มโคดโปรแกรมลงในฟงกชันตางๆของคลาส CMyAlgorithm จําเปนอยางยิ่งที่จะตองเขาใจทฤษฏีพื้นฐานของกระบวนการตางๆ กอนจะนํามาเขียนเปนอัลกอริทึม ซ่ึงจะมีสมการทางคณิตศาสตรเขามาเกี่ยวของ ดังนั้นผูเขียนขออธิบายหลักการเบื้องตนควบคูกับการเพิ่มโคดโปรแกรมเพื่อใหสามารถประยุกตใชงานไดดังนี้ • การแปลงขอมูลภาพเปนระดับขาวดํา CMyAlgorithm::GrayColorScale(void) จากอัลกอริทึมของฟงกชัน GrayColorScale เร่ิมจากตรวจสอบอิมเมจตองไมเปนชนิดอินเด็กซ และขอมูลภาพตองมีความลึก 24 บิต แลวทําการอานความกวาง ความสูงของภาพ เพื่อใชในการกําหนดลูปการอานขอมูลคาแมสีแดง สีเขียว สีน้ําเงิน มาเก็บในตัวแปร r, g, b และคํานวณหาคาเฉลี่ยของแมสีทั้งหมด โดยใชสูตรแปลงคาสีเปนขาวดํา คือ ( )Gray Color 0.299R 0.587G 0.114B= + + ตอไปใหนําคาเฉลี่ยที่ไดแทนลงในตําแหนงพิกเซลเดิม โดยใชพอยนเตอรเปนตัวช้ี ณ ระดับความกวางสูงสุดลบดวย 1 และระดับความกวางลบดวย 1 การคํานวณในลูป(for) จะลดคาความสูงทีละหนึ่งแถว จนกระทั่งมีคาเทากับศูนย และลดความกวางลงทีละหนึ่งคอลัมน จนกระทั่งเปนศูนย กระบวนการแปลงภาพสีเปนขาวดําก็จะกระทําครบทุกๆพิกเซลของภาพ void CMyAlgorithm::GrayColorScale(void) {  if (!IsIndexed())   {   if(GetBPP()>=24)   {     int maxHigh = GetHeight(), maxWidth = GetWidth();     BYTE r,g,b,avg;     BYTE *p;     for (int x=maxWidth‐1; x >‐1; x‐‐)       {       for (int y=maxHigh‐1; y >‐1; y‐‐)       {         p = (BYTE*)GetPixelAddress(x, y);         r = p[2];         g = p[1];         b = p[0];          avg = (BYTE)(r*0.299 + g*0.587 + b*0.114);     *p++ = avg;         *p++ =  avg;         *p      =  avg;       }     }   }  }   } 

Page 6: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP2 Basic Pixel and Image Component

 หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง)  17 Chapter 2 Basic Pixel Processing and Image Component • การกลับสีภาพ CMyAlgorithm::Invert(void)  

 

 

 

 

 

 

   จากอัลกอริทึมของฟงกชันกลับสีภาพเริ่มจากตรวจสอบขอมูลภาพตองไมเปนชนิดอินเด็กซ และขอมูลภาพตองมีความละเอียด 24 บิต แลวทําการอานความกวาง ความสูงของภาพ เพื่อใชในการกําหนดลูปการอานขอมูล จากนั้นหาขอมูลที่พอยนเตอรช้ีไปยังพิกเซลแรกสุดของภาพ ณ ตําแหนง 0, 0 x y= = แลวทําการกลับสีภาพ (Invert) บันทึกแทนคาเดิมในหนวยความจํา จากนั้นทําการวนลูป (for) ไปเรื่อยๆโดยการเพิ่มคา x และ y ทีละหนึ่งคา จนกระทั่งทําการกลับสีภาพครบทุกพิกเซลของภาพ • การหาสวนประกอบสีแดง CMyAlgorithm::RedComponent(void) สมการแปลงภาพแบบ Negative : เมื่อ o คือเอาตพุต และ i คืออินพุต จะไดความสัมพันธนี ้ 

255255255

o i

o i

o i

R RG GB B

= −= −= −เมื่อคา Input เปลี่ยนแปลง คา Output void CMyAlgorithm::Invert(void) {  if (!IsIndexed())   {   int maxHigh = GetHeight(), maxWidth = GetWidth();   BYTE *p;    if (GetBPP() >= 24)   {     for (int y=0; y<maxHigh; y++)     {           for  (int x=0; x<maxWidth; x++)           {       p = (BYTE*)GetPixelAddress(x, y);       p[2] = 255‐p[2];       p[1] = 255‐p[1];       p[0] = 255‐p[0];            }     }   }  } } 

 

void CMyAlgorithm::RedComponent(void) {  if (!IsIndexed())   {   int maxHigh = GetHeight(), maxWidth = GetWidth();   BYTE *p;    if (GetBPP() >= 24)   {     for (int y=0; y<maxHigh; y++)     {       for  (int x=0; x<maxWidth; x++)        {         p = (BYTE*)GetPixelAddress(x, y);                       //p[2] = p[2];         p[1] = p[2];         p[0] = p[2];       }     }   }  } } 

 

Page 7: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP2 Basic Pixel and Image Component

 หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง)  18 Chapter 2 Basic Pixel Processing and Image Component • การหาสวนประกอบสีเขียว CMyAlgorithm::GreenComponent(void) • การหาสวนประกอบสีน้ําเงิน CMyAlgorithm::BlueComponent(void)  

 

 

 

 

 

 

 

 

  จากอัลกอริทึมของฟงกชัน RedComponent, GreenComponent, BlueComponent เร่ิมจากตรวจสอบขอมูลภาพตองไมเปนชนิดอินเด็กซ และขอมูลภาพตองมีความละเอียด 24 บิต จากนั้นทําการอานความกวางและความสูงของภาพ เพื่อใชในการกําหนดลูปการอานขอมูลภาพ จากนั้นหาขอมูลที่พอยนเตอรช้ีไปยังพิกเซลแรกสุดของภาพ ณ ตําแหนง x 0, y 0 = = และทําการคํานวณหาสวนประกอบสีตางๆจนครบทุกพิกเซลของภาพแลวบันทึกคาที่คํานวณไดลงหนวยความจําเดิม ก็จะไดขอมูลของสวนประกอบสีของภาพ void CMyAlgorithm::GreenComponent(void) {  if (!IsIndexed())   {   int maxHigh = GetHeight(), maxWidth = GetWidth();   BYTE *p;    if (GetBPP() >= 24)   {     for (int y=0; y<maxHigh; y++)     {       for  (int x=0; x<maxWidth; x++)        {         p = (BYTE*)GetPixelAddress(x, y);                            p[2] = p[1];                        //p[1] = p[1];          p[0] = p[1];       }     }   }  } } 

 

void CMyAlgorithm::BlueComponent(void) {  if (!IsIndexed())   {   int maxHigh = GetHeight(), maxWidth = GetWidth();   BYTE *p;    if (GetBPP() >= 24)   {     for (int y=0; y<maxHigh; y++)     {       for  (int x=0; x<maxWidth; x++)        {         p = (BYTE*)GetPixelAddress(x, y);                            p[2] = p[0];         p[1] = p[0];                        //p[0] = p[0];       }     }   }  } } 

 

Page 8: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP2 Basic Pixel and Image Component

 หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง)  19 Chapter 2 Basic Pixel Processing and Image Component ในการคํานวณหาสวนประกอบสีตางๆของภาพจะใชสมการสีขาวดํา Gray Scale เพื่อทําใหสามารถแสดงสวนประกอบสีแดง สีเขียว และสีน้ําเงิน ในระดับขอมูลที่เปนขาวดําเทานั้น แสดงสมการไดดังนี้ สมการ 1 ( )3

Gray Scale R G B= + + (1) คํานวณคา Gray Scale เฉพาะสวนประกอบสีแดง(R) โดยแทนคา G = R , B = R ลงในสมการที่1 จะได สวนประกอบสีแดง 1 ( )3

R R R= + + 33R R= = ดังนั้น การหาคาสวนประกอบสีแดงก็คือ กําหนด R=R, G=R , B=R การหาคาสวนประกอบสีเขียวก็คือ กําหนด R=G, G=G , B=G การหาคาสวนประกอบสีน้ําเงินก็คือ กําหนด R=B, G=B , B=B ขั้นตอนที่ 5 การเพิ่มโคดโปรแกรมลงในคลาส CImageProcessingView ในสวนของคลาสวิวจะทําหนาที่แสดงขอมูลภาพบนจอภาพบนหนาจอคอมพิวเตอร โดยแสดงภาพเทากับภาพตนฉบับ ฟงกชันหลักในการแสดงขอมูลภาพจะใชฟงกชัน GetDocument เพื่ออานขอมูลจากคลาสด็อกคิวเมนต จากนั้นคลาสวิวก็จะทําการวาดภาพออกทางจอภาพดวยฟงกชัน OnDraw นอกจากนั้นคลาสวิวจะทําหนาที่สงขอมูลไปยังคลาส CMyAlgorithm เพื่อทําการประมวลผลภาพตอไป ดังนั้นในสวนนี้ของคลาสวิวจะมีการเพิ่มขอมูลลงในฟงกชันตางๆที่ไดทําการแม็พเมสเสจในขั้นตอนที่ 3 แลว ใหเพิ่มโคดโปรแกรมลงในฟงกชันดังนี้ • เพิ่มโคด CImageProcessingView::OnImagetoolInvertcolor() ดังนี ้ ฟงกชันของการแสดง Invert ภาพ เร่ิมดวยการ GetDocument เพื่อเก็บคาพอยนเตอรของคลาสด็อกคิวเมนต มาเก็บไวในตัวแบบ *pDoc จะใชตัวแปรนี้ช้ีไปยังฟงกชัน GetImage เพื่ออานขอมูลภาพเขามาเก็บไวใน *pImage และทําการตรวจสอบคาของตัวแปรแบบพอยนเตอรตองไมมีคาเปนศูนย แสดงวาในขณะนี้void CImageProcessingView::OnImagetoolInvertcolor() 

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

Page 9: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP2 Basic Pixel and Image Component

 หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง)  20 Chapter 2 Basic Pixel Processing and Image Component ตัวแปร *pImage มีขอมูลในหนวยความจํา แลวใชพอยนเตอรช้ีไปยังฟงกชัน Invert เพื่อทําการประมวลผลภาพ เมื่อคํานวณคาเสร็จสิ้น ใหทําการเรียกฟงกชัน UpdateAllViews เพื่อใหวิวแสดงคาปจจุบันออกทางจอภาพ จึงทําใหมองเห็นภาพใหมที่ผานกระบวนการประมวลผลภาพ ในทํานองเดียวกัน ฟงกชันตางๆตอไปนี้ ก็มีลําดับการทํางานเหมือนกันทุกประการกับที่ไดอธิบายผานมาแลว ตางกันก็เพียงการสงคาพอยเตอรใหคลาส CMyAlgorithm เพื่อทําการประมวลผลภาพในฟงกชันที่ตองการ ใหทําการเพิ่มโคดโปรแกรมลงในฟงกชันดังนี้ • เพิ่มโคด CImageProcessingView::OnImagetoolGrayscale() ดังนี ้ • เพิ่มโคด CImageProcessingView::OnImagetoolRedcomponent() ดังนี้ • เพิ่มโคด CImageProcessingView::OnImagetoolGreencomponent() ดังนี้ void CImageProcessingView::OnImagetoolGrayscale() {   CImageProcessingDoc* pDoc = GetDocument();   ASSERT_VALID(pDoc);    CMyAlgorithm* pImage = pDoc‐>GetImage();   if(pImage == NULL) return;      pImage‐>GrayColorScale();   pDoc‐>UpdateAllViews(NULL); } 

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

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

Page 10: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP2 Basic Pixel and Image Component

 หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง)  21 Chapter 2 Basic Pixel Processing and Image Component • เพิ่มโคด CImageProcessingView::OnImagetoolBluecomponent()ดังนี้ เมื่อทําการแกไขโคดโปรแกรมเสร็จทุกขั้นตอน ใหเลือกบันทึกทั้งหมด(Save all) จากนั้นทําการคอมไฟลโปรแกรมดวยเมนู Build ImageProcessing ถาไมมีขอผิดพลาด ก็จะสามารถรัน(Run) โปรแกรมได ขั้นตอนที่ 6 ทดสอบผลการทํางานของโปรแกรม การทํางานงานของโปรแกรมเริ่มตนดวยการเลือกภาพที่ตองการเปดเขามาในโปรแกรม ImageProcessing ในบทนี้ทดสอบดวยภาพบิตแมพที่มีนามสกุลไฟล .JPEG จํานวนทั้งหมด 5 ภาพ ซ่ึงขอมูลในแตละภาพมีคุณสมบัติเหมือนกันทุกประการ เพื่อที่จะแสดงใหเห็นถึงการเปลี่ยนแปลงของภาพเมื่อผานกระบวนการประมวลผลภาพดวยอัลกอริทึมที่สรางขึ้น ขั้นตอนการทดสอบมีดังนี้ • เลือกรัน(Run) โปรแกรมจะปรากกฎหนาตางของโปรแกรม ImageProcessing ใหทําการเปดไฟลภาพ จะปรากฏไดอะล็อกสําหรับเปดไฟลภาพ ใหเลือกภาพที่ตองการ ดังภาพที่ 9 ภาพที่ 9 หนาตางโปรแกรม Image Processing void CImageProcessingView::OnImagetoolBluecomponent() {   CImageProcessingDoc* pDoc = GetDocument();   ASSERT_VALID(pDoc);    CMyAlgorithm * pImage = pDoc‐>GetImage();   if (pImage == NULL) return;    pImage‐>BlueComponent();   pDoc‐>UpdateAllViews(NULL); } 

Page 11: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP2 Basic Pixel and Image Component

 หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง)  22 Chapter 2 Basic Pixel Processing and Image Component • เมื่อเปดไฟลภาพที่ตองการแลว โปรแกรมจะแสดงขอมลูภาพตนฉบับดังภาพที่ 10 ภาพที่ 10 ภาพตนฉบับ(ที่ยังไมผานการประมวลผลภาพ) • เมื่อเลือกเมนู Image Tool > Invert จะไดผลการการกลับสีภาพดังภาพที ่11 ภาพที่ 11 ผลของการกลับสีภาพ (Invert) • เมื่อเลือก Image Tool > Gray Color จะไดผลของการแปลงภาพสีเปนภาพสีขาว-ดํา ดงัภาพที่ 12 ภาพที่ 12 ภาพสีขาว-ดํา (Gray Scale)

Page 12: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP2 Basic Pixel and Image Component

 หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง)  23 Chapter 2 Basic Pixel Processing and Image Component • เมื่อเลือก Image Tool > RedComponent ไดผลของภาพที่เปนสวนประกอบสีแดง ในระดับสีขาว-ดํา ภาพที่ 13 ภาพแสดงสวนประกอบสีแดง • เมื่อเลือก Image Tool >GreenComponent ไดผลของภาพที่เปนสวนประกอบสีเขียว ในระดบัสีขาว-ดํา ภาพที่ 14 ภาพแสดงสวนประกอบสีเขียว • เมื่อเลือก Image Tool >BlueComponent ไดผลของภาพที่เปนสวนประกอบสีน้ําเงนิ ในระดบัสีขาว-ดํา ภาพที่ 15 ภาพแสดงสวนประกอบสีน้ําเงนิ

Page 13: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP2 Basic Pixel and Image Component

 หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง)  24 Chapter 2 Basic Pixel Processing and Image Component • การแสดงภาพแบบหลายๆววิพรอมกัน เพือ่แสดงใหเห็นความแตกตางของกระบวนการประมวลผลภาพในแตละคําสั่งไดชัดเจนมากยิ่งขึ้น แสดงดงัภาพที่ 16  

 

 

 

 ภาพที่ 16 การเปดภาพแบบหลายววิ ภาพตนฉบับ ภาพขาว-ดํา กลับสีภาพ ภาพตนฉบับ สวนประกอบสีเขียว สวนประกอบสีน้ําเงิน สวนประกอบสีแดง

Page 14: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP2 Basic Pixel and Image Component

 หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง)  25 Chapter 2 Basic Pixel Processing and Image Component สรุป การสรางโปรแกรมในบทนี้ทุกทานไดศึกษาถึงกระบวนการประมวลผลภาพเบื้องตน ดวยทักษะการเขียนโปรแกรมดวย Microsoft Visual C++.NET 2003 แสดงใหเห็นถึงรายละเอียดในการสรางอัลกอริทึมสําหรับใชในการประมวลผลภาพ ไมวาจะเปนการกลับสีภาพ การทําภาพใหเปนภาพสีขาว-ดํา รวมถึงการแยกสวนประกอบของสีภาพตางๆ ซ่ึงอัลกอริทึมตางๆที่ผานมานี้เปนพื้นฐานสําคัญมากในการศึกษากระบวนการประมวลผลภาพในเรื่องตอๆไป  

Page 15: การประมวลผลภาพด้วยดิจิทัลด้วยโปรแกรม Visual C++ EP2 Basic Pixel and Image Component

 หลักสูตร Machine Vision วิทยากรโดย ผศ.ดร.พูลศักดิ์ โกษียาภรณ และณัฐพล จะสูงเนิน (เรียบเรียง)  26 Chapter 2 Basic Pixel Processing and Image Component 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 ทางผูจัดทําขอขอบพระคุณทุกทานที่กลาวถึงในขอมูลอางอิง ที่ไดจัดทําขอมูลที่มีความรูที่ดีและเปนประโยชนตอการเรียนรู ขอผลบุญทางความรูทั้งหมดอุทิศแดพอแม ครูอาจารย และเจากรรมนายเวรของขาพเจา เทอญฯ