13
1 | Page การประมวลผลภาพด้วยโปรแกรม MATLAB MATLAB เป็นโปรแกรมคอมพิวเตอร์ที่ถูกออกแบบมาเพื่อจัดการกับข้อมูลที่เป็นเมทริกซ์ จึงมีชื่อย่อมาจาก MATrix LABoratory เป็นโปรแกรมที่เหมาะสาหรับการพัฒนาอัลกอริทึมทางวิทยาศาสตร์และวิศวกรรม โปรแกรมมีคุณสมบัติของ การคานวณ การแสดงข้อมูลทางด้านกราฟิกส์แบบที่ทาให้เห็นภาพได้หรือวิสชวลไลเซชัน(Visualization) และการจาลอง (Simulations)การทางานของระบบต่างๆ โดยเฉพาะการวิเคราะห์ข้อมูลและเครื่องมือของวิสชวลไลเซชัน ที่ถูกออกแบบให้ รองรับข้อมูลที่เป็นเมทริกซ์พร้อมกับตัวดาเนินการต่างๆ นอกจากนี้โปรแกรม MATLAB ยังมีฟังก์ชันสาเร็จรูปหรือฟังก์ชันบิวล์ ตอิน(Built-in function)ทางคณิตศาสตร์ให้เรียกใช้มากมาย ทาให้เราสามารถเขียนโปรแกรมและชุดคาสั่งที่เป็นสคริปต์ได้ ง่าย สาหรับการประยุกต์ใช้งานต่างๆ จะมีเป็นกล่องเครื่องมือหรือทูลบ็อก(Toolboxes) ซึ่งเป็นฟังก์ชันพิเศษที่เขียนขึ้นโดย ผู ้เชี่ยวชาญของแต่ละสาขา อย่างในการประมวลผลภาพดิจิตอลจะเกี่ยวข้องกับทูลบ็อกต่างๆ เช่น Images(การประมวลผล ภาพ), Imaq(Image acquisition: การนาเข้าข้อมูลภาพ), Signal(การประมวลผลสัญญาณ), Comm(Communication: การสื่อสาร), Stats(Statistics: สถิติ ), Fuzzy(ฟัซซีเซต), Nnet(Neural networks: โครงข่ายประสาทเทียม) และ Wavelet (เวฟเล็ต) เป็นต้น ข้อมูลภาพดิจิตอล เป็นเซตของค่าตัวเลขที่แทนระดับความเข้มของสัญญาณที่เก็บอยู ่ในรูปของเมทริกซ์ เนื่องจาก โปรแกรม MATLAB รองรับข้อมูลพื ้นฐานเป็นอะเรย์หลายมิติ รวมถึงเมทริกซ์และตัวดาเนินการต่างๆ ทาให ้มีความเหมาะสมทีจะใช้โปรแกรมนี ้ในการประมวลผลภาพ และมีกล่องเครื่องมือที่ช่วยให้การประมวลผลภาพทาได้สะดวกขึ ้น ทั้งในส่วนของการ ประมวลผลภาพและการนาเข้าข้อมูลภาพ ซึ่งกล่องเครื่องมือเหล่านี้จะมีฟังก์ชันพิเศษที่จาเป็นสาหรับการประมวลผลภาพ เช่น เรขาคณิต พีชคณิต ตรรก รวมไปถึงการแปลงข้อมูลภาพ นอกจากนี ้ทูลบ็อกยังรองรับข ้อมูลภาพได้ทั ้งภาพขาวดา ภาพเกรย์ส เกล และภาพสี เมื่อประมวลผลโปรแกรม หน้าตาโปรแกรมของแต่ละเวอร์ชันมีความแตกต่างกัน แต่จะมีส่วนหลักๆดังปรากฏดังรูปที1 ซึ่งมีองค์ประกอบที่สาคัญในหน้าต่างการใช้งานในแต่ละส่วนดังนี 1. เมนูบาร์ (Menu Bar) เป็นเมนูคาสั่งหลักที่ใช้ในการจัดการหน้าต่างของโปรแกรม 2. Workspace เป็นหน้าต่างแสดงสถานะของตัวแปรที่ใช้งาน พื ้นที่หน่วยความจา และขนาดตัวแปร 3. Command History เป็นหน้าต่างที่ใช้เก็บคาสั่งที่ใช้งานย้อนหลัง สามารถใช้คาสั่งที่อยู ่ในวินโดว์นี้โดย การดับเบิลคลิก 4. Command Windows เป็นหน้าต่างที่ใช้เรียกคาสั่งโดยการพิมพ์คาสั่งที่ต้องการประมวลผล

การประมวลผลภาพด้วยโปรแกรม MATLABstaff.cs.psu.ac.th/sathit/DigitalImage/BasicMatlab.pdf · รูปที่ 1 ลักษณะโครงสร้างโปรแกรม

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: การประมวลผลภาพด้วยโปรแกรม MATLABstaff.cs.psu.ac.th/sathit/DigitalImage/BasicMatlab.pdf · รูปที่ 1 ลักษณะโครงสร้างโปรแกรม

1 | P a g e

การประมวลผลภาพด้วยโปรแกรม MATLAB

MATLAB เป็นโปรแกรมคอมพิวเตอร์ท่ีถกูออกแบบมาเพ่ือจดัการกบัข้อมลูท่ีเป็นเมทริกซ์ จงึมีช่ือยอ่มาจาก MATrix

LABoratory เป็นโปรแกรมที่เหมาะส าหรับการพฒันาอลักอริทมึทางวิทยาศาสตร์และวิศวกรรม โปรแกรมมีคณุสมบตัิของการค านวณ การแสดงข้อมลูทางด้านกราฟิกส์แบบที่ท าให้เหน็ภาพได้หรือวิสชวลไลเซชนั(Visualization) และการจ าลอง(Simulations)การท างานของระบบตา่งๆ โดยเฉพาะการวิเคราะห์ข้อมลูและเคร่ืองมือของวิสชวลไลเซชนั ท่ีถกูออกแบบให้รองรับข้อมลูท่ีเป็นเมทริกซ์พร้อมกบัตวัด าเนินการตา่งๆ นอกจากนีโ้ปรแกรม MATLAB ยงัมีฟังก์ชนัส าเร็จรูปหรือฟังก์ชนับิวล์ตอิน(Built-in function)ทางคณิตศาสตร์ให้เรียกใช้มากมาย ท าให้เราสามารถเขียนโปรแกรมและชดุค าสัง่ท่ีเป็นสคริปต์ได้ง่าย ส าหรับการประยกุต์ใช้งานตา่งๆ จะมีเป็นกลอ่งเคร่ืองมือหรือทลูบอ็ก(Toolboxes) ซึง่เป็นฟังก์ชนัพิเศษที่เขียนขึน้โดยผู้ เช่ียวชาญของแตล่ะสาขา อย่างในการประมวลผลภาพดิจิตอลจะเก่ียวข้องกบัทลูบอ็กตา่งๆ เช่น Images(การประมวลผลภาพ), Imaq(Image acquisition: การน าเข้าข้อมลูภาพ), Signal(การประมวลผลสญัญาณ), Comm(Communication:

การสื่อสาร), Stats(Statistics: สถิติ), Fuzzy(ฟัซซีเซต), Nnet(Neural networks: โครงข่ายประสาทเทียม) และ Wavelet (เวฟเลต็) เป็นต้น

ข้อมลูภาพดิจิตอล เป็นเซตของคา่ตวัเลขท่ีแทนระดบัความเข้มของสญัญาณท่ีเก็บอยูใ่นรูปของเมทริกซ์ เน่ืองจากโปรแกรม MATLAB รองรับข้อมลูพืน้ฐานเป็นอะเรย์หลายมิติ รวมถงึเมทริกซ์และตวัด าเนินการตา่งๆ ท าให้มีความเหมาะสมท่ีจะใช้โปรแกรมนีใ้นการประมวลผลภาพ และมีกลอ่งเคร่ืองมือท่ีช่วยให้การประมวลผลภาพท าได้สะดวกขึน้ ทัง้ในสว่นของการประมวลผลภาพและการน าเข้าข้อมลูภาพ ซึง่กลอ่งเคร่ืองมือเหลา่นีจ้ะมีฟังก์ชนัพิเศษท่ีจ าเป็นส าหรับการประมวลผลภาพ เช่น เรขาคณิต พีชคณิต ตรรก รวมไปถงึการแปลงข้อมลูภาพ นอกจากนีท้ลูบอ็กยงัรองรับข้อมลูภาพได้ทัง้ภาพขาวด า ภาพเกรย์สเกล และภาพสี

เม่ือประมวลผลโปรแกรม หน้าตาโปรแกรมของแตล่ะเวอร์ชนัมีความแตกตา่งกนั แตจ่ะมีสว่นหลกัๆดงัปรากฏดงัรูปท่ี 1 ซึง่มีองค์ประกอบที่ส าคญัในหน้าตา่งการใช้งานในแตล่ะสว่นดงันี ้

1. เมนบูาร์(Menu Bar) เป็นเมนคู าสัง่หลกัท่ีใช้ในการจดัการหน้าตา่งของโปรแกรม

2. Workspace เป็นหน้าตา่งแสดงสถานะของตวัแปรท่ีใช้งาน พืน้ท่ีหน่วยความจ า และขนาดตวัแปร 3. Command History เป็นหน้าตา่งท่ีใช้เก็บค าสัง่ท่ีใช้งานย้อนหลงั สามารถใช้ค าสัง่ท่ีอยูใ่นวินโดว์นีโ้ดยการดบัเบิลคลกิ

4. Command Windows เป็นหน้าตา่งท่ีใช้เรียกค าสัง่โดยการพิมพ์ค าสัง่ท่ีต้องการประมวลผล

Page 2: การประมวลผลภาพด้วยโปรแกรม MATLABstaff.cs.psu.ac.th/sathit/DigitalImage/BasicMatlab.pdf · รูปที่ 1 ลักษณะโครงสร้างโปรแกรม

2 | P a g e

รูปท่ี 1 ลกัษณะโครงสร้างโปรแกรม MATLAB 6.5 พร้อมใช้งาน

พืน้ฐานการใช้งานเบือ้งต้น

รูปแบบการใช้งานท่ีง่ายท่ีสดุของ MATLAB คือใช้เหมือนกบัเคร่ืองคิดเลข เช่นเม่ือต้องการหาผลคณูของ 5 กบั 20 ก็พิมพ์ค าสัง่ลงในวินโดว์ค าสัง่

>>5*20 ans =

100

เม่ือ ans (Answer) เป็นตวัแปรเก็บผลลพัธ์ แตถ้่าเราต้องการเก็บผลคณูนีใ้นตวัแปรอื่น เช่นต้องการเก็บในตวัแปร x ก็ท าได้โดย

>>x = 5*20 x = 100

ตอนนีต้วัแปร x มีคา่เทา่กบั 100 ถ้าเราพิมพ์ค าสัง่ y = x*2 คอมพิวเตอร์ก็จะเอาคา่ท่ีเก็บอยู่ในตวัแปร x มาคณูกบั 2 แล้วก าหนดคา่ให้กบั y นัน่คือ

>>y=x*2 y = 200

จากการใช้งานแบบง่ายๆ พบวา่ เราสามารถเก็บคา่ท่ีป้อนเข้าไปในตวัแปร และสามารถท่ีจะค านวณได้ในรูปแบบที่เป็นสมการ ซึง่เป็นนิพจน์ของการค านวณและการก าหนดคา่

1. ตัวแปรและนิพนจ์

Page 3: การประมวลผลภาพด้วยโปรแกรม MATLABstaff.cs.psu.ac.th/sathit/DigitalImage/BasicMatlab.pdf · รูปที่ 1 ลักษณะโครงสร้างโปรแกรม

3 | P a g e

ตวัแปร (variables) ใน MATLAB เป็นตวัแปรที่ใช้ส าหรับเก็บข้อมลูท่ีเป็นอะเรย์ N มิติ ซึง่แบง่เป็นคลาสของข้อมลูท่ีประกอบด้วย ตวัแปรชนิดตรรก (Logic) ตวัเลข (Numeric) ตวัอกัษร(char) ช่ือฟังก์ชนั(Function handle) และตวัแปรท่ีใช้เก็บข้อมลูต่างชนิดกนั(Heterogeneous container) ประกอบด้วยตวัแปรโครงสร้าง (Structures) และ เซลล์ (Cells)

ตวัแปรชนิดตา่งๆ เหลา่นีไ้ด้แสดงไว้ในรูปท่ี 2 โดยค าท่ีล้อมรอบด้วยวงรีเป็นชนิดของข้อมลู

รูปท่ี 2 โครงสร้างรูปแบบของตวัแปรท่ีประกาศในโปรแกรม

ตวัแปรใน MATLAB ถ้าไมมี่การก าหนดชนิดจะถกูก าหนดให้เป็นเลขทศนิยมชนิด double เช่นเม่ือเราค านวณคา่ 22*3 ก็จะได้ผลลพัธ์เป็นเลขทศนิยมเท่ากบั 66 แตถ้่าต้องการใช้เป็นตวัอกัษร จะต้องก าหนดชนิดข้อมลู เช่น

>>char(66) ans = B

จากค าสัง่ char(66) เป็นการแปลงคา่ 66 ซึง่เป็นเลขฐานสบิให้เป็นตวัอกัษร โดยมีชนิดข้อมลูคือ char เป็นตวัก าหนด ซึง่คา่ 66 หรือในเลขฐานสองขนาดแปดบิตคือ 01000010 ในรหสัแอสกี(ASCII1) ตรงกบัตวัอกัษร B

ในกรณีท่ีต้องการก าหนดเป็นตวัแปรสตริง (string) สามารถก าหนดข้อความได้ดงันี ้

>>s = ‘image processing’ s = image processing

ตวัแปร s ท่ีใช้เก็บข้อความ image processing เป็นตวัแปรอะเรย์ของตวัอกัษร เราสามารถหาขนาดของอะเรย์ได้โดยใช้ค าสัง่ size ดงันี ้

>>size(s) ans = 1 16

1 ASCII (American Standard Code for Information Interchange) เป็นรหสัเลขฐานสองขนาดแปดบิต ท่ีใชเ้ป็นรหสัตวัอกัษรและรหสัควบคุม(Control character)

Page 4: การประมวลผลภาพด้วยโปรแกรม MATLABstaff.cs.psu.ac.th/sathit/DigitalImage/BasicMatlab.pdf · รูปที่ 1 ลักษณะโครงสร้างโปรแกรม

4 | P a g e

ขนาดของอะเรย์ s คือ คือมีขนาดหนึง่แถวสิบหกคอลมัน์ แตต่วัแปรอะเรย์ของตวัอกัษรสว่นใหญ่เราต้องการทราบความยาวของอะเรย์ นอกจาก size ยงัมีอีกฟังก์ชนัหนึง่ท่ีใช้หาความยาวของอะเรย์คือฟังก์ชนั length มีรูปแบบการใช้ดงันี ้

>>length(s) ans = 16

เราสามารถเข้าถงึตวัอกัษรในแตล่ะต าแหน่งของอะเรย์ด้วยดชันี โดยคา่ดชันีของอะเรย์ใน MATLAB จะเร่ิมจาก 1 ดงันัน้ s(1)

ก็คือ i สว่นต าแหน่ง s(3) คือ a จะเหน็วา่ค าสัง่ใน MATLAB ถ้าเราไมก่ าหนดค่าให้ ก็จะมีตวัแปร ans ปรากฏในสว่นของการแสดงผลเสมอ ถ้าไมต้่องการให้ ans ปรากฏ เราสามารถใช้ disp (Display) ซึง่เป็นค าสัง่ใช้แสดงคา่ เช่น

>>disp(s(3)) a

จากอะเรย์ของตวัอกัษร ถ้าเราต้องการทราบวา่ตวัอกัษรใน s มีรหสัแอสกีของเลขฐานสบิเป็นค่าใดบ้าง ก็สามารถดไูด้ด้วยการแปลงข้อมลูเป็น double หรือจ านวนเต็มแปดบิตแบบไมมี่เคร่ืองหมายหรือ uint8 ดงันี ้

>>uint8(s) ans = Columns 1 through 16 105 109 97 103 101 32 112 114 111 99 101 115 115 105 110 103

เราสามารถตรวจสอบรหสัแอสกีเหลา่นีไ้ด้โดยการแปลงกลบัไปเป็นตวัอกัษร เช่น

>>disp(char(105)) i >>disp(char([105 109 97 103 101 32 112 114 111 99 101 115 115 105 110 103])) image processing

ส าหรับข้อมลูภาพโดยทัว่ไปเป็นชนิดเลขจ านวนเตม็ และจะเก็บเป็นชนิดแปดบิตไมมี่เคร่ืองหมาย(Unsigned

integer) คือ uint8 เม่ือต้องการให้ตวัแปรเก็บข้อมลูชนิดอ่ืนท่ีไมใ่ช่ชนิด double จะต้องระบชุนิดข้อมลู ส าหรับรายละเอียดของการก าหนดตวัแปรจะได้อธิบายในหวัข้อตอ่ไป

นิพจน์(Expression) รูปแบบของนิพจ์ทางคณิตศาสตร์ท่ีใช้ในโปรแกรมมีลกัษณะเป็นการก าหนดช่ือตวัแปรแล้วคัน่ด้วยเคร่ืองหมายเทา่กบั “=” หรือเคร่ืองหมายก าหนดคา่ (Assign to) ตามด้วยตวัแปร ฟังก์ชนั หรือคา่คงท่ี นัน่คือ variable = expression เช่น A=B+2 ซึง่เป็นการก าหนดคา่ ด้วยคา่จากตวัแปร B บวกด้วย 2 แล้วเก็บคา่ของผลลพัธ์ท่ีค านวณได้ไว้ในตวัแปร A หรือจากการก าหนดคา่ในตวัอยา่งท่ีผ่านมาคือ

>>s = ‘image processing’

สงัเกตวา่ตวัแปรใน MATLAB เราไมต้่องประกาศและระบชุนิดของข้อมลูให้กบัตวัแปร เพียงแตก่ าหนดช่ือตวัแปรตามด้วยข้อมลูท่ีเราก าหนดคา่ ตวัแปรที่อยูท่างซ้ายของเคร่ืองหมายเทา่กบัก็จะมีชนิดเดียวกบัข้อมลูท่ีก าหนดให้ท่ีอยูท่างขวาของเคร่ืองหมายเทา่กบั ดงันัน้ s จงึมีชนิดเป็นอะเรย์ของตวัอกัษร

หลกัการตัง้ช่ือตวัแปรจะคล้ายกบัภาษาระดบัสงูอ่ืนๆ เช่น ภาษาซี ปาสคาล เป็นต้น คือขึน้ต้นด้วยตวัอกัษร ตามด้วยตวัเลขหรือตวัอกัษร ตวัพิมพ์เลก็กบัตวัพิมพ์ใหญ่ถือเป็นเป็นคนละตวัแปรกนั เช่น A กบั a ถือวา่เป็นคนละตวัแปรกนั การอ้างถืงหรือการเรียงใช้ตวัแปรจะต้องถกูก าหนดไว้ก่อนการเรียกใช้

2 พืน้ฐานค าส่ังการจัดการ workspace

Page 5: การประมวลผลภาพด้วยโปรแกรม MATLABstaff.cs.psu.ac.th/sathit/DigitalImage/BasicMatlab.pdf · รูปที่ 1 ลักษณะโครงสร้างโปรแกรม

5 | P a g e

who ให้แสดงตวัแปรท่ีประกาศในหน่วยความจ า whos ให้แสดงตวัแปรท่ีประกาศพร้อมแสดงรูปแบบตวัแปรพร้อมขนาดหน่วยความจ าท่ีใช้ไป

clear ลบตวัแปรจากหน่วยความจ า load น าตวัแปรจากดิสก์สูห่น่วยความจ า save เก็บตวัแปรจากหน่วยความจ าสูด่ิสก์

quit ออกจากโปรแกรม MATLAB

ตัวอย่างการเรียกใช้งานค าส่ังทลีะบรรทดั

>> a=1; b='digital image processing'; c=pi; >> who Your variables are: a b c >> whos Name Size Bytes Class Attributes a 11 8 double array b 124 48 char array c 11 8 double array Grand total is 17 elements using 46 bytes >> save number a b c >>clear a b >>whos Name Size Bytes Class c 1x1 8 double array Grand total is 1 element using 8 bytes >>load number >>who Your variables are: a b c >>quit

3 เมทริกซ์และเวกเตอร์

ตวัแปรที่ใช้เก็บเมทริกซ์และเวกเตอร์ใน MATLAB ท าได้โดยการสร้างตวัแปรอะเรย์ ถ้าเป็นอะเรย์หนึง่มิติก็จะใช้เก็บข้อมลูท่ีเป็นเวกเตอร์ สว่นอะเรย์สองมิติใช้เก็บข้อมลูท่ีอยูใ่นรูปของเมทริกซ์ เคร่ืองหมายคอมมา่ (,) ใช้คัน่สมาชิกแตล่ะตวัของแตล่ะคอลมัน์หรืออาจจะเว้นวรรค การเว้นวรรคมากหรือน้อยไม่มีผลตอ่การก าหนดสมาชิกของอะเรย์ ส าหรับเคร่ืองหมายเซมิโคลอน (Semicolon ;) เป็นตวัแบง่สมาชิกแตล่ะแถว สมาชิกของอะเรย์จะถกูก าหนดอยูใ่นวงเลบ็เหลี่ยม [ ]

หน้าท่ีของเคร่ืองหมายเซมิโคลอนอีกอยา่งหนึง่คือ ใช้บอกการสิน้สดุค าสัง่เพ่ือไมใ่ห้มีการแสดงผลออกมาท่ีจอภาพ เพราะนิพจน์หรือค าสัง่ใดๆท่ีมีผลลพัธ์ถ้าไมจ่บด้วยเซมิโคลอน เม่ือค าสัง่ถกูประมวลผล ผลลพัธ์จะถกูสง่ไปเก็บที่ตวัแปรทางซ้ายของเคร่ืองหมายเทา่กบั แล้วแสดงผลไปท่ี command window

Page 6: การประมวลผลภาพด้วยโปรแกรม MATLABstaff.cs.psu.ac.th/sathit/DigitalImage/BasicMatlab.pdf · รูปที่ 1 ลักษณะโครงสร้างโปรแกรม

6 | P a g e

ตวัอยา่งในการก าหนดเมทริกซ์ 1 2 3

4 5 6

7 8 9

a

>> a = [1 2 3;4 5 6;7 8 9];

หรือจะใช้คอมม่าคัน่สมาชิกแตล่ะตวั >> a = [1, 2, 3;4, 5, 6;7, 8, 9];

ตวัอยา่งการป้อนเวกเตอร์ 1 2 3 4 5 6 7 8 9 10b สามารถก าหนดได้หลายแบบ เช่น >>b=[1,2,3,4,5,6,7,8,9,10]; %หรือ

>>b=[1 2 3 4 5 6 7 8 9 10]; %หรือ

>>b=[1:10]; %รูปแบบใช้ได้เฉพาะกรณีท่ีมีการเพิ่มคา่ท่ีละหนึง่เสมอ หรือ

>>b=[1:1:10]; %รูปแบบคือ [คา่เร่ิมต้น : เพิ่มท่ีละ : คา่สดุท้าย]

การก าหนดเวกเตอร์ b ของสองค าสัง่สดุท้ายเป็นกรณีเฉพาะ เม่ือสมาชิกของเวกเตอร์มีคา่เร่ิมต้น แล้วสมาชิกตวัตอ่ๆไปได้จากการเพิ่มค่าครัง้ละเทา่ๆกนั จงึก าหนดคา่ด้วยรูปแบบของ MATLAB คือ j : i : k เม่ือ j คือคา่เร่ิมต้น i เป็นขนาดของการเพิ่มคา่ และ k เป็นคา่สดุท้าย เช่นในค าสัง่สดุท้าย 1:1:10 จะเหน็วา่ j=1, i=1, และ k=10 ความหมายของการก าหนดคา่แบบนีคื้อ [j, j+i, j+2i, …, j+mi ] ซึง่คา่สดุท้ายคือ j+mi มีคา่เทา่กบั k ตวัด าเนินการโคลอนจะอธิบายอีกครัง้ในเร่ืองการเข้าถงึสมาชิกของอะเรย์

การป้อนเวคเตอร์แบบคอลมัน์

1

2

3

4

c

>> c = [1; 2; 3; 4]; %หรือ

>> c = [ 2 3 4]’; %ป้อนเป็นเวกเตอร์ แล้วใช้ตวัด าเนินการทรานสโพสเพ่ือท าให้เป็นคอลมัน์เวกเตอร์

ตัวด าเนินการเมทริกซ์

เมทริกซ์สามารถบวกลบคณูและหารได้ตามกฎการด าเนินการของเมทริกซ์ ใน MATLAB ประกอบด้วยตวัด าเนินการบวก (+) การลบ (-) และการคณู (*) การหาร(/) การยกก าลงั (^) ทรานสโพส (’) มีตวัอยา่งค าสัง่ดงัตอ่ไปนี ้

>>D=a’ %การทรานสโพสเมทริกซ์

>>E=a+D; H=a-D; %การบวกลบเมทริกซ์

>>F=2*E %การคณูเมทริกซ์

>>G=E^2 %การยกก าลงัเมทริกซ์ ซึง่มีคา่เทา่กบั G = E*E >>E=a/D %การหารเมทริกซ์ หรือ E=a*inv(D)

จากตวัอยา่งตวัด าเนินการเมทริกซ์ เม่ือเคร่ืองหมายเปอร์เซน็ต์ % ท่ีปรากฏตอ่ท้ายค าสัง่ทกุตวัอยา่ง เป็นเคร่ืองหมายไว้ใส่ค าอธิบายค าสัง่ (Comment) ข้อความท่ีอยู่ตอ่จากเคร่ืองหมายนีจ้ะไมถ่กูประมวลผล คือตวัแปรภาษาจะข้ามข้อความของสว่นนี ้

Page 7: การประมวลผลภาพด้วยโปรแกรม MATLABstaff.cs.psu.ac.th/sathit/DigitalImage/BasicMatlab.pdf · รูปที่ 1 ลักษณะโครงสร้างโปรแกรม

7 | P a g e

จากตวัอยา่งค าสัง่แรก D=a’ ตวัแปร a จะต้องถกูก าหนดไว้ก่อน ซึง่ในกรณีนี ้a = [1 2 3;4 5 6;7 8 9]; ผลจากค าสัง่ทรานสโพสจะได้เมทริกซ์ D ดงันี ้

1 2 3 1 4 7

4 5 6 2 5 6

7 8 9 3 6 9

T

D

นอกจากตวัด าเนินการทรานสโพส (’) แล้วยงัสามารถเรียกใช้ฟังก์ชนั transpose ได้เช่นกนั ค าสัง่ท่ีใช้แทนกนัได้คือ D=transpose(a)

ตวัอยา่งตอ่มา E=a+D; และ H=a-D; ในบรรทดันีมี้อยู่สองค าสัง่ คือการบวกและลบเมทริกซ์ โดยล าดบั เม่ือ a

และ D ถกูก าหนดไว้แล้วในตวัอยา่งก่อนหน้านี ้ ทัง้นีก้ารน าตวัแปรที่เป็นเมทริกซ์มาบวกลบกนัจะต้องเป็นไปตามกฎการบวกเมทริกซ์ คือตวัโอเพอร์แรน(Operands) ของตวัด าเนินการจะต้องมีขนาดเทา่กนั นอกจากนีใ้น MATLAB ยงัมีกฏการแปลงข้อมลู นัน่คือข้อมลูท่ีตา่งๆชนิดกนั เช่น ถ้า a เป็นชนิด double แต ่D เป็นชนิด uint8 ก็ไมส่ามารถน ามาด าเนินการได้ จะต้องแปลงข้อมลูให้เป็นชนิดเดียวกนัก่อนจงึจะน ามาประมวลผลได้

ค าสัง่ตอ่ไปคือ F=2*E เป็นการคณูเมทริกซ์ด้วยค่าคงท่ี ส าหรับสองค าสัง่สดุท้ายคือ G=E^2 และ E=a/D สองค าสัง่นีถื้อวา่เป็นตวัด าเนินการคณูเมทริกซ์ทัง้คู่ เพราะ G=E^2 เมทริกซ์ E ยกก าลงัสองคือ E*E สว่น E=a/D เคร่ืองหมายหารของตวัด าเนินการเมทริกซ์ในเชิงคณิตศาสตร์ไมมี่ แตใ่นที่นี ้MATLAB จะใช้เคร่ืองหมายหารเป็น inv(D) คือสว่นกลบัหรืออินเวริสเมทริกซ์ (Inverse matrix) ของ D ซึง่ inv คือฟังก์ชนั inverse ดงันัน้ E = a*inv(D) การน าตวัแปรเมทริกซ์มาคณูกนัจะต้องเป็นไปตามกฎการคณูเมทริกซ์นัน่คือ

=

จ านวนคอลมัน์ของเมทริกซ์ A ท่ีเป็นเมทริกซ์ตวัตัง้จะต้องเทา่กบัจ านวนแถวของเมทริกซตวัคณู ในท่ีนีจ้ านวนคอลมัน์ของ A คือ r สว่นจ านวนแถวของ B เทา่กบั r เช่นกนั ท าให้เมทริกซ์ผลลพัธ์ C มีขนาด m แถว n คอลมัน์ ตามจ านวนแถวของ A และจ านวนคอลมัน์ของ B ตามล าดบั

เม่ือน าตวัเนินการเมทริกซ์มาใช้รวมกบัจดุ (.) จะมีการด าเนินการตา่งจากตวัด าเนินการเมทริกซ์ปกติ เช่น

>> K=[1 2 3]; L=[4 5 6]; >> V = K.*L V = [4 10 18]

เป็นการน าสมาชิกแตล่ะตวัของเวกเตอร์ K และ L มาคณูกนัโดยตรง ซึง่ผลลพัธ์ท่ีได้ท่ีเก็บอยูใ่นตวัแปร V คือ [4 10 18] ท่ีได้จาก [1*4, 2*5, 3*6] ตวัด าเนินการจดุสามารถใช้รวมกบัตวัด าเนินการคณู หาร และยกก าลงั ลกัษณะการด าเนินการจะเหมือนกบัการคณู คือด าเนินการกบัสมาชิกท่ีต าแหน่งเดียวกนั และแน่นอนวา่ตวัแปรที่ถกูด าเนินการจะต้องมีสมาชิกเทา่กนั ตวัด าเนินการจดุยงัสามารถใช้ร่วมกบั การหาร และ ยกก าลงั เช่น

>> V=L./K V = [4 2.5 2] >> V=L.^K V = [4 25 216]

การอ้างถงึสมาชิกของเมทริกซ์

ตวัแปรอะเรย์ท่ีเก็บข้อมลูเป็นเวกเตอร์หรือเมทริกซ์สามารถอ้างถึงได้หลายวิธีดงันี ้

Page 8: การประมวลผลภาพด้วยโปรแกรม MATLABstaff.cs.psu.ac.th/sathit/DigitalImage/BasicMatlab.pdf · รูปที่ 1 ลักษณะโครงสร้างโปรแกรม

8 | P a g e

- อ้างถงึสมาชิกแตล่ะตวัได้ด้วยดชันีบอกต าแหน่ง จะต้องอ้างถงึช่ือตวัแปรและบอกต าแหน่งในวงเลบ็เป็น (แถว, คอลมัน์) เช่น A(1,2) เป็นการเข้าถงึสมาชิกแถวท่ีหนึง่คอลมัน์ท่ีสองของเมทริกซ์ A การอ้างอิงแบบนีส้ว่นใหญ่จะใช้ในการเข้าถงึสมาชิกแตล่ะตวัด้วยการวนซ า้ในการเขียนโปรแกรม

- อ้างถงึสมาชิกได้ท่ีละหลายตวัมีสองแบบคือใช้เคร่ืองหมายโคลอน (Colon, :) และใช้เวกเตอร์บอกต าแหน่งสมาชิก

ในอะเรย์ รูปแบบในการอ้างอิงต าแหน่งตา่งๆ เช่น 1 4 7

2 5 8

3 6 9

A

การเข้าถงึสมาชิกแถวท่ีสองทกุคอลมัน์ของเมทริกซ์ A สามารถก าหนดได้ดงันี ้>> C=A(2,:)

C = 2 5 8

การเข้าถงึสมาชิกทกุแถวของคอลมัน์ท่ีหนึง่ในเมทริกซ์ A สามารถก าหนดได้ดงันี ้

>>D = A(:,1) D = 1 2

3

การเข้าถงึสมาชิกทกุตวัในเมทริกซ์ A สามารถก าหนดได้ดงันี ้

>>E = A(:);

ในที่นี ้ E จะเป็นคอลมัน์เวกเตอร์ท่ีมีคา่เป็น 1 2 3 4 5 6 7 8 9T

E จะเหน็วา่มีความแตกตา่งจากการก าหนด E = A; ซึง่จะได้ E เป็นเมทริกซ์ท่ีมีคา่เทา่กบั A และมีข้อสงัเกตจากการใช้เคร่ืองหมายโคลอนคือ ถ้าใช้ในต าแหน่งของแถว จะได้ผลลพัธ์เป็นคอลมัน์เวกเตอร์ แต่ถ้าใช้โคลอนในต าแหน่งของคอลมัน์จะได้เวกเตอร์ (Row vector)

การใช้เวกเตอร์ของดชันีเพ่ือเข้าถึงสมาชิก จะมีศกัยภาพมากในการเลือกเมทริกซ์ยอ่ย เช่น

>> S = A([1 2],[2 3]) %ในวงเลบ็เหลี่ยมคือเวกเตอร์ดชันีท่ีใช้อ้างถงึต าแหน่งในเมทริกซ์ A

S = 4 7 5 8

เป็นการอ้างถงึเมทริกซ์ยอ่ยในแตล่ะต าแหน่ง นัน่คือ = [ , , , ,

] = [4

]

1.5 จ านวนเชิงซ้อน

การค านวณจ านวนเชิงซ้อนในโปรแกรม MATLAB สามารถกระท าได้โดยตรงโดยการก าหนดตวัแปรเป็นจ านวนเชิงซ้อน โปรแกรม MATLAB เตรียมตวัแปร , 1i j ซึง่เป็นสว่นจินตภาพของจ านวนเชิงซ้อน ดงันัน้จึงควรหลีกเลี่ยงการตัง้ช่ือตวัแปรเป็นสองอกัษรนี ้ตวัอยา่งการป้อนคา่จ านวนเชิงซ้อน

>>a=1+j*2; b=3+j*4; >> a*b ans = -5.0000 +10.0000i >>a=2*exp(j*pi/4) a = 1.4142 + 1.4142i

จากตวัอยา่งการก าหนดจ านวนเชิงซ้อนใช้ตวั j แต ่MATLAB จะก าหนดและแสดงผลเป็นตวั i ส าหรับแทนสว่นจินตภาพ ดงัจะเหน็จากผลลพัธ์ของการคณูจ านวนเชิงซ้อน a*b โปรแกรม MATLAB จะแสดงผลลพัธ์เป็น ans = -5.0000 +10.0000i

Page 9: การประมวลผลภาพด้วยโปรแกรม MATLABstaff.cs.psu.ac.th/sathit/DigitalImage/BasicMatlab.pdf · รูปที่ 1 ลักษณะโครงสร้างโปรแกรม

9 | P a g e

และในค าสัง่ a=2*exp(j*pi/4) เป็นการค านวณคา่เอก็โพเน็นต์เทียลของผลคณูสว่นจินตภาพ j กบัคา่ไพน์ (pi หรือ ท่ีมีคา่เทา่กบั 22/7) MATLAB ก็แสดงค่าสว่นจินตภาพด้วยคา่ i เช่นกนั

MATLAB ยงัเตรียมฟังก์ชนัพืน้ฐานท่ีเก่ียวข้องกบัจ านวนเชิงซ้อนอีกเช่น

>>real(a) % หาสว่นจ านวนจริงของตวัแปร a

>>imag(a) % หาสว่นจ านวนจินตภาพของตวัแปร a

>>abs(a) % หาคา่ขนาดของตวัแปร a

>>angle(a) % หาคา่มมุของตวัแปร a

>>conj(a) % หาคา่คอนจเูกต(Conjugate) ของตวัแปร a

1.6 ฟังก์ชันทางคณิตศาสตร์

โปรแกรม MATLAB มีฟังก์ชนัทางคณิตศาสตร์มากมายแตจ่ะยกมาแสดงพอสงัเขปได้ดงัตอ่ไปนี ้

ฟังก์ชนัเก่ียวกบัสเกลา

ฟังก์ชนัตรีโกณมิติ sin(x), cos(x), tan(x), asin(x), acos(x), atan(x), atan2(x)

ฟังก์ชนัไฮเปอร์โบลกิ sinh(x), cosh(x),tanh(x), asinh(x), acosh(x), atanh(x)

ฟังก์ชนัเลขยกก าลงั exp(x), log(x), log10(x),

ฟังก์ชนัทัว่ไป abs(x), sign(x), rem(x), round(x), floor(x), ceil(x), sqrt(x)

ฟังก์ชนัเก่ียวกบัเวคเตอร์ max(x), min(x), length(x), mean(x), median(x), std(x), sum(x), sort(x), roots(x)

ฟังก์ชนัเก่ียวกบัการสร้างเมตริกซ์

zeros(n,m) สร้างเมตริกซ์ท่ีมีสมาชิกเป็น 0 ทัง้หมดขนาด n × m

ones(n,m) สร้างเมตริกซ์ท่ีมีสมาชิกเป็น 1 ทัง้หมดขนาด n × m

ฟังก์ชนัเก่ียวกบัเมตริกซ์ size(x), eig(x), det(x)

ซึง่รายละเอียดในการใช้ค าสัง่ท่ีกลา่วมาข้างต้นสามารถหารายละเอียดได้จากค าสัง่ help command

2 พืน้ฐานการเขียนสคริปและฟังก์ชัน

การป้อนค าสัง่ในการเรียกใช้ command line ท่ีละค าสัง่สามารถรวบรวมและสัง่ใช้งานหลายค าสัง่โดยการเขียนเป็นลกัษณะ m-file ซึง่ภายในโปรแกรม MATLAB editor เป็นตวัสร้างและแก้ไข โดยการใช้จากเมน ูซึง่เลือก file new m-file

จากเมน ูจะปรากฏ editor ดงัรูปท่ี 2

Page 10: การประมวลผลภาพด้วยโปรแกรม MATLABstaff.cs.psu.ac.th/sathit/DigitalImage/BasicMatlab.pdf · รูปที่ 1 ลักษณะโครงสร้างโปรแกรม

10 | P a g e

รูปท่ี 3 แสดง Editor ของโปรแกรม MATLAB

การเขียนสคริป

โปรแกรมของ MATLAB ถกูเรียกวา่สคริปต์(Script) การเขียนสคริปเป็นการเรียกใช้งานค าสัง่ท่ีมีลกัษณะเหมือนกบัการเขียนโปรแกรมภาษาคอมพิวเตอร์โดยทัว่ไป แล้วเก็บเป็นไฟล์ให้มีนามสกลุเป็น .m จงึมกัเรียกโปรแกรมหรือสคริปต์วา่ “m-

file” ไฟล์นีส้ามารถสัง่รันได้จาก editor ของโปรแกรม MATLAB ซึง่มีตวั debug ได้ด้วย หรือจะเรียกจาก Command line

โดยการเรียกช่ือไฟล์เป็นค าสัง่ เคร่ืองหมายเปอร์เซน็ต์ % จะใช้ในการเขียนค าอธิบายค าสัง่ (Comment) หรือตวัแปร การสร้างสคริปมีโครงสร้างค าสัง่ท่ีควบคมุทิศทางของโปรแกรมคล้ายกบัทางภาษาสงูโดยทัว่ไปในการเขียนโปรแกรม

คือ

ค าสัง่ if, elseและ elseif ใช้ในการตดัสินใจทางเลือก รูปแบบในการใช้งานคือ if <เง่ือนไขตดัสินใจ>

<ประโยค>

elseif <เง่ือนไขตดัสินใจ>

<ประโยค>

else

<ประโยค>

end

ค าสัง่ while ใช้ในวนรอบโดยมีการตรวจสอบเง่ือนไข รูปแบบในการใช้งานคือ

while <เง่ือนไขตรวจสอบ>

<ประโยค>

end

ค าสัง่ switch ใช้ในการตดัสินใจทางเลือกในกรณีท่ีมีทางเลือกมากกวา่สามรูปแบบการใช้งานคือ

switch ( ตวัแปร) <scalar or string>

Page 11: การประมวลผลภาพด้วยโปรแกรม MATLABstaff.cs.psu.ac.th/sathit/DigitalImage/BasicMatlab.pdf · รูปที่ 1 ลักษณะโครงสร้างโปรแกรม

11 | P a g e

case เง่ือนไขท่ี 1

<ประโยค> % Executes if expression is value1

case เง่ือนไขท่ี 2

<ประโยค> % Executes if expression is value2

. . otherwise

<ประโยค>% Executes if expression does not

% does not match any case

end

ค าสัง่ for ใช้ในวนรอบ รูปแบบในการใช้งานคือ

for ตวัแปร= ค่าเร่ิม:เพิ่มท่ีละ:คา่สดุท้าย <ประโยค>

end

สรุปเก่ียวกบัการเขียนสคริป คือการน าค าสัง่มาเขียนเรียงตอ่กนัแล้วเก็บอยูใ่นนามสกลุ .m ซึง่สามารถเรียกใช้งานภายหลงัท าให้สะดวกในการใช้งานซ า้ แตข้่อจ ากดัในการเรียกใช้งานได้หลายครัง้แตไ่มส่ามารถรับคา่และคืนคา่ตวัแปรได้ ถ้าต้องการรับสง่คา่ต้องเขียนในรูปแบบของฟังก์ชนัแทน การเขียนฟังก์ชัน

การเขียนฟังก์ชนัมีลกัษณะคล้ายกบัการเขียนสคริปแตส่ามารถรับสง่คา่ไปมาได้ แตใ่นการเรียกใช้งานตวัแปรท่ีใช้อยู่ในฟังก์ชนันัน้จะไมค่งอยูห่ลงัจากการเรียกใช้ฟังก์ชนัผ่านไป ซึง่รูปแบบในการเขียนเป็นฟังก์ชนัก าหนดได้ดงันี ้

function ช่ือฟังก์ชนั(อินพตุ1,อินพตุ2)

ประโยค

….

ช่ือฟังก์ชนั=คา่ท่ีจะคืนกลบั end

ตัวอย่างเรียกใช้งานสคริปและฟังก์ชัน

ตวัอยา่งในการค านวณเก่ียวกบัคา่เฉลี่ยเลขคณิตโดยการเขียนเป็นฟังก์ชนัแล้วเรียกใช้โดยการสร้างสคริปมาใช้งานดงันี ้ 1.สร้างฟังก์ชนัดงัตวัอยา่งข้างลา่งแล้ว save ช่ือ average.m

2.สร้างสคริปดงัตวัอยา่งข้างลา่งแล้ว save ช่ือ testmath.m

3.ทดสอบใช้งานโดยพิมพ์ testmath แล้วตามด้วย enter ท่ี command line

ตวัอยา่งฟังก์ชนัท่ีรับคา่เวคเตอร์แล้วคืนคา่เป็นค่าเฉลี่ยเลขคณิต average.m

function y = average(x)

Page 12: การประมวลผลภาพด้วยโปรแกรม MATLABstaff.cs.psu.ac.th/sathit/DigitalImage/BasicMatlab.pdf · รูปที่ 1 ลักษณะโครงสร้างโปรแกรม

12 | P a g e

% AVERAGE Mean of vector elements.

% AVERAGE(X), where X is a vector, is the mean of vector elements.

% Nonvector input results in an error.

[m,n] = size(x);

if (~((m == 1) | (n == 1)) | (m == 1 & n == 1)) error('Input must be a vector') end y = sum(x)/length(x); % Actual computation

ตวัอยา่งสคริปการเรียกใช้ฟังก์ชนั testmath.m

z = 1:99; average(z)

พืน้ฐานค าส่ังเก่ียวกับกราฟ

3.1 Plot เป็นค าสัง่ท่ีใช้ในการวาดกราฟในระนาบ XY ซึง่รูปแบบในการใช้งานมีสามแบบดงันี ้

plot(ข้อมลูแกนนอน,ข้อมลูแกนตัง้)

plot(ข้อมลูแกนตัง้,ข้อมลูแกนนอน,รูปแบบของเส้นกราฟ)

plot(ข้อมลูแกนตัง้1,ข้อมลูแกนนอน1,รูปแบบของเส้นกราฟ1,ข้อมลูแกนตัง้2,ข้อมลูแกนนอน2,รูปแบบของเส้นกราฟ2,…)

ข้อก าหนดรูปแบบของเสน้กราฟ

สี ลกัษณะมาร์ค ลกัษณะเส้น b blue . point - solid g green o circle : dotted r red x x-mark -. dashdot c cyan + plus -- dashed m magenta * star y yellow s square k black d diamond v triangle (down) ^ triangle (up) < triangle (left) > triangle (right) p pentagram h hexagram

ตวัอยา่งการเรียกใช้งานในการพลอ็ตกราฟ

>>X=[0:1:10];Y=[0:1:10]; >>plot(X,Y,'c+:') >>plot(X,Y,'bd') >>plot(X,Y,'y-',X,Y,'go')

ผลการใช้ค าสัง่ในการพลอ็ตกราฟข้างต้น

Page 13: การประมวลผลภาพด้วยโปรแกรม MATLABstaff.cs.psu.ac.th/sathit/DigitalImage/BasicMatlab.pdf · รูปที่ 1 ลักษณะโครงสร้างโปรแกรม

13 | P a g e

รูปท่ี 4 การพลอ็ตกราฟในรูปแบบลกัษณะตา่ง ๆ Axis เป็นค าสัง่ในการก าหนดขนาดเก่ียวกบัแกนตัง้และแกนนอนท่ีปรากฏในกราฟ ซึง่รูปแบบในการใช้งานรูปแบบดงันี ้

AXIS ([XMIN XMAX YMIN YMAX]) การก าหนดแนวแกนตัง้และแกนนอน

V = AXIS เป็นค าสัง่อา่นค่าแนวแกนตัง้และแกนนอน AXIS AUTO ก าหนดแกนแบบอตัโนมตัิ AXIS EQUAL ก าหนดแกนทัง้สองให้เทา่กนั

AXIS OFF ไมใ่ห้แสดงแกนแนวตัง้และแนวนอน

AXIS ON ให้แสดงแนวแกนตัง้และแนวแกนนอน Subplot

เป็นค าสัง่ในการแบง่รูปยอ่ยในหน้าตา่งเดียวกนัให้มี n×m รูปยอ่ยและโฟกสัไปท่ีรูปยอ่ยท่ี p ซึง่รูปแบบค าสัง่ดงันี ้

SUBPLOT(n,m,p) Lable

xlable(‘ข้อความท่ีต้องการให้ปรากฏบนแกน x’) ylable(‘ข้อความท่ีต้องการให้ปรากฏบนแกน y’) title(‘ข้อความท่ีต้องการให้ปรากฏช่ือกราฟ’) hold on และ hold off

hold on เป็นค าสัง่ในการโฟกสักราฟรูปท่ีต้องการไว้เม่ือมีค าสัง่เก่ียวกบักราฟจะกระท าที่กราฟรูปเดิมจนกระทัง้ใช้ค าสัง่ hold

off เม่ือกระท ากบักราฟจะกระท ากบักราฟรูปใหม่