You are on page 1of 47

1

บทที่ 1
บทนํา

1.1 ที่มาและความสําคัญของโครงการ
การตรวจเลือดเปนขั้นตอนที่สําคัญขั้นตอนหนึ่งในการตรวจรางกายและวินิจฉัยโรค ในปจจุบันการ
วินิจฉัยโรคทางการแพทยสวนใหญจะใชการตรวจนับจํานวนเม็ดเลือด และตรวจหาเซลลเม็ดเลือดที่
ผิดปกติ เชน การวินิจฉัยโรคไขมาลาเรีย มะเร็งเม็ดเลือดขาวและโรคโลหิตจาง โดยอาศัยเครื่องมือทาง
การแพทย เครื่องมือตรวจนับที่นิยมใชในปจจุบันใชหลักการของ Laser light scatter, Electrical
impedance, Light scatter / absorption และ Radio frequency energy ซึ่งบางวิธีมีความแมนยําสูงและ
สามารถแยกแยะเม็ดเลือดบางชนิดได แตเครื่องมือเหลานี้มีราคาแพงและไมสามารถวิเคราะหรูปรางของ
เม็ดเลือดได ดังนั้นการตรวจวิเคราะหรูปรางของเม็ดเลือดสวนใหญจะตรวจผานสายตาของผูชํานาญการ
ดานโลหิตวิทยา ซึ่งวิธีดังกลาวนี้ไมสะดวก กินเวลาและตองอาศัยผูเชี่ยวชาญ รวมทั้งตองใชงบประมาณสูง
อุปสรรคดังกลาวทําใหการวิเคราะหตรวจนับเม็ดเลือดสามารถกระทําไดตามโรงพยาบาลในเมืองใหญๆ
เทานั้น
จากขอจํากัดที่กลาวมา โครงการโปรแกรมตรวจนับเม็ดเลือดแดง จึงไดนําเสนอแนวความคิดใหม
ในการพัฒนาระบบที่ชวยตรวจนับเซลลเม็ดเลือดแดง โดยอาศัยวิธีการประมวลผลภาพเชิงดิจิตอลเปนหลัก
ระบบที่พัฒนาขึ้นไดถูกออกแบบใหใชกับกลองจุลทรรศน ซึ่งมีประจําตามโรงพยาบาลทั่วไป ในสวนของ
Software โปรแกรมจะทําการแยกแยะชนิดและนับจํานวนเม็ดเลือดแดงไดโดยอัตโนมัติ โปรแกรมที่
ออกแบบขึ้นมานี้สามารถนําไปติดตั้งใชงานตามโรงพยาบาลทองถิ่นที่หางไกลความเจริญและขาดแคลน
ผูเชี่ยวชาญดานโลหิตวิทยา ซึ่งจะประหยัดบุคลากรและงบประมาณ และทําใหการบริการสาธารณสุข
เขาถึงชุมชนที่หางไกลได

1.2 วัตถุประสงค
เพื่อพัฒนาโปรแกรมตรวจนับเซลลเม็ดเลือดแดงและแยกแยะเซลลเม็ดเลือดแดงที่ผิดปกติโดย
อัตโนมัติโดยอาศัยการประมวลผลภาพทางดิจิตอล เพื่อนําไปใชประโยชนในทางการแพทยในการตรวจ
วินิจฉัยโรค

1.3 ขอบเขต
โครงการนีเ้ ปนการพัฒนาโปรแกรมตรวจนับเซลลเม็ดเลือดแดงอัตโนมัติโดยมีคุณลักษณะดังนี้
1. โปรแกรมสามารถเปดอานไฟลภาพถายของเม็ดเลือดหรือรับภาพโดยตรงจากกลองจุลทรรศน
2

2. โปรแกรมสามารถจําแนกเซลลเม็ดเลือดระหวางเซลลที่ปกติกับเซลลที่ผิดปกติ รวมทัง้ รายงาน


จํานวน ขนาดเม็ดเลือด และขอมูลอื่นๆได

1.4 แนวทางการดําเนินงาน
โปรแกรมนี้จะทําการนับจํานวนเม็ดเลือดแดงและแยะแยะเซลลเม็ดเลือดแดงที่ผิดปกติออกจาก
เซลลที่ปกติโดยอัตโนมัติ พรอมรายงานผลออกทางหนาจอคอมพิวเตอร เพื่อที่จะไดนําไปวิเคราะหและ
วินิจฉัยโรคในทางการแพทยตอไป ซึ่งมีแนวทางการดําเนินงานดังนี้

1.4.1 ศึกษาลักษณะทางกายภาพของเม็ดเลือด
ปกติ แ ล ว เม็ ดเลื อ ดแดงจะมี ชนิ ดเดีย ว แตจ ะมี ทั้ง เซลล เ ม็ ด เลื อ ดที่ ป กติ แ ละผิ ด ปกติ ดั ง นั้ น จึ ง
จําเปนตองศึกษารายละเอียดในเรื่องรูปราง ขนาดของเม็ดเลือดแดงทั้งแบบปกติและผิดปกติ รวมถึงศึกษา
วิธีการวิเคราะหเซลลเม็ดเลือดแดงในทางการแพทย และขั้นตอนตางๆที่จําเปนในการวิเคราะห เพื่อจะใช
เปนประโยชนในการเขียนโปรแกรมตอไป

1.4.2 ศึกษาการรับภาพถายจากกลองจุลทรรศน
เนื่องจากภาพเม็ดเลือดแดงที่ทางการแพทยใชวิเคราะหไดมาจากการสองดูดวยกลองจุลทรรศน
ดังนั้นเราจําเปนตองเขียนโปรแกรมใหสามารถรับภาพจากกลองจุลทรรศน เพื่อนําไปประมวลผลตอไป
นอกจากนี้โปรแกรมจะตองเปดอานไฟลภาพไดในกรณีที่มีไฟลภาพเม็ดเลือดแดงอยูแลวและโปรแกรมตอง
สามารถแสดงภาพบนจอคอมพิวเตอรได

1.4.3 ศึกษากระบวนการ Image Segmentation


ไฟลภาพที่ไดจากการ Capture ยังไมใชภาพที่สมบูรณนัก ดังนัน้ เราจําเปนตองแยกแยะภาพเม็ด
เลือดออกจากพื้นหลัง ภาพของเม็ดเลือดที่ไดจากการ Segmentation จะถูกเก็บไวเพื่อนําไปนับจํานวนและ
แยกแยะชนิดตอไป

1.4.4 ออกแบบพัฒนาโปรแกรมโปรแกรมจดจําชนิดเม็ดเลือดโดยใชโครงขายประสาทเทียม
(Neural network) เปนสวนสําคัญที่ใชในการจดจํารูปแบบของเม็ดเลือด
เมื่อไดภาพเม็ดเลือดตนแบบที่มีรูปรางและขนาดแตกตางกันแลว เราจะฝกให Neural network จํา
จดและแยกแยะเซลลแตละประเภท พรอมกับนับจํานวนไปดวย โปรแกรมในสวนนี้จะใชทําหนาที่วิเคราะห
แยกแยะขอมูลภาพเม็ดเลือดแดง
3

1.4.5 พัฒนาสวนรายงานผล
เมื่อไดโปรแกรมที่สามารถนับจํานวนและแยกแยะเซลลเม็ดเลือดแดงไดแลว เราจะสรางสวน
แสดงผลเพื่อใหรายงานผลขอมูลตาง ๆ ในรูปแบบที่งายตอการเขาใจของผูใช

ตารางที่ 1 แนวทางการดําเนินงาน
เดือน
กิจกรรม มิ.ย. ก.ค. ส.ค. ก.ย. ต.ค. พ.ย. ธ.ค. ม.ค.
1. ศึกษาลักษณะทางกายภาพและชนิดของ
เม็ดเลือด รูปรางเม็ดเลือดทีผ่ ิดปกติ และ
วิธีการวิเคราะหเซลลเม็ดเลือดแดงในทาง
การแพทย
2. ศึกษาระบบถายภาพจากกลองจุลทรรศน
และระบบรับภาพเขามายังคอมพิวเตอร
3. ศึกษาวิธกี ารแยกแยะภาพเม็ดเลือดแดง
โดยใชวิธี Image segmentation
4. ศึกษาอัลกอริทึมที่ใชในการนับและ
วิเคราะหรูปรางเซลลเม็ดเลือดแดง
5. ออกแบบและพัฒนาโปรแกรม
6. ทดลองใชงานโปรแกรมจริง
7. เขียนสรุปรายงาน

1.5 ประโยชนที่คาดวาจะไดรับ
ไดโปรแกรมที่ใชในการตรวจนับและวิเคราะหเซลลเม็ดเลือดแดง รวมทั้งแยกแยะเซลลเม็ดเลือด
แดงที่ผิด ปกติ โ ดยอั ต โนมั ติ ที่ สามารถนําไปติดตั้ง ใชง านจริงได ซึ่งผู ใช ง านจะเป น ผูเ ลือ กมุม มองการ
ถายภาพเองจากกลองจุลทรรศน โดยโปรแกรมจะคํานวณและรายงานผลใหอัตโนมัติ
4

บทที่ 2
งานวิจัยและทฤษฎีที่เกี่ยวของ

2.1 งานวิจัยที่เกี่ยวของ
มีงานวิจัยทีเ่ กีย่ วกับการตรวจนับและแยกแยะประเภทของเซลลเม็ดเลือด ดังนี้
2.1.1 Segmentation and classification of human blood cells โดย Daniel Elvin, E-91 , Advisor:
Anders Heyden, Gunnar Sparr.
งานวิจัยนี้ไดศึกษาการแยกแยะเซลลเม็ดเลือดขาว (White blood cell) หรือ Leukocyte ที่
ประกอบดวย 3 ขั้นตอนโดยเริ่มจากการใช Image processing จากนั้นเปนการจดจํารูปแบบเซลล
(Pattern recognition) ที่ใชอัลกอริทึม Unsupervised optimal histogram, การหาคา Thresholding, การ
ระบุตําแหนงนิวเคลียสของ Leukocyte และการตรวจหา Leukocyte cytoplasm ในขั้นตอนสุดทายเปน
การแยกแยะประเภทของเซลลที่ใชหลักการของ Artificial neural network นอกจากนี้ยังมีการประมาณ
พื้นที่และการกระจายของรูปรางของ Erythrocyte (Red blood cell) ซึ่งจะใชอัลกอริทึมการ
Segmentation อยางงายและการประมาณพื้นที่เสนรอบวง ภาพที่ใชในงานวิจัยนี้เปนภาพสไลดของเลือด
ที่สเมียรแลวถายโดยผานกลอง CCD ที่ตอกับกลองจุลทรรศนกําลังขยาย 20 เทา
วิจารณงานวิจัย
งานวิจยั นี้ไดใหแนวความคิดในการแยกแยะเซลลเม็ดเลือด ซึ่งสวนใหญจะเนนที่เม็ดเลือดขาว แต
จะสังเกตวางานวิจยั นี้ไมไดใหรายละเอียดการแยะแยะเม็ดเลือดแดงในลักษณะอืน่ เชน การระบุรูปราง
หรือขนาดเซลล ซึ่งแตกตางจากการประยุกตใชงานในโครงการโปรแกรมตรวจนับเม็ดเลือดแดงในโครงการ
นี้ที่ใชวิธีการแยะแยะเม็ดเลือดแดงโดยแบงตามขนาดและรูปรางที่ผิดปกติเขาไปดวย ในสวนการ Capture
ภาพจากสไลดเลือดที่สเมียรแลวโดยผานกลอง CCD ที่ตอกับกลองจุลทรรศนนนั้ ในงานวิจยั นี้อาศัย
Software ที่มากับกลองจุลทรรศนใหทําการ Capture และแสดงผลทางคอมพิวเตอร

2.1.2 White blood cell differential counting using neural network with system-level training โดย
Dr. Nipon Theera-Umpon , Chiang Mai University.
งานวิจัยนี้เปนเรื่องที่เกี่ยวกับการนับเซลลเม็ดเลือดขาวโดยมีการฝกใหโครงขายประสาทเทียมนับ
เม็ดเลือดขาวโดยใหเกิดความผิดพลาดนอยที่สุด โครงขายประสาทเทียมที่ใชเปน Feed forward network
และใช Back propagation ในการปรับ Weight มีการใชรูปรางขอบของแตละเซลลเปนขอมูลทําให
แยกแยะเซลลไดหลายลักษณะ ผลสรุปที่ไดจากงานวิจัยคือโครงขายประสาทเทียมสามารถนับจํานวน
เซลลเม็ดเลือดขาวไดถูกตองมากกวาการใหโครงขายประสาทเทียมแยกแยะประเภท นั่นคือประสิทธิภาพ
5

การแยกประเภทของเซลลเม็ดเลือดโดยใชโครงขายประสาทเทียมจะไมดีเทาที่ควร จุดประสงคหลักจึงเนน
ที่การนับจํานวนใหไดผลถูกตอง
วิจารณงานวิจัย
จะเห็นวางานวิจัยนี้ไมไดทดลองกับเม็ดเลือดแดง แตใชแนวคิดในการนับจํานวนและแยกแยะ
ประเภทดวยโครงขายประสาทเทียม ซึ่งเปนแนวทางที่นําศึกษาและนํามาประยุกตใชกับโครงการได สวน
ขอบกพรองของงานวิจัยคือการแยกแยะประเภทยังไมดีเทาที่ควร ซึ่งเปนปญหาที่ผูพัฒนาโครงการคิดวา
นาจะแกไขไดในโครงการนี้

2.2 ทฤษฎีหลักการและเทคนิคที่ใช
การพัฒนาโปรแกรมตรวจนับเม็ดเลือดแดงอัตโนมัติเริ่มตั้งแตการศึกษาลักษณะทางกายภาพและ
ชนิดของเม็ดเลือดแดงที่ปกติและผิดปกติ จากนัน้ จึงวิเคราะหรูปรางและขนาดของเซลลโดยอาศัยหลักการ
ของ Image processing และเทคนิคในขั้นตอนสุดทายจะเปนการจดจํารูปราง (Pattern) ของเซลลเม็ด
เลือดแดงโดยใชโครงขายประสาทเทียมเพือ่ ที่จะไดทาํ การนับและแยกแยะตอไป
2.2.1 เซลลเม็ดเลือดแดง (Blood cells)
โครงการนีจ้ ะนับจํานวนและแยกแยะชนิดเซลลเม็ดเลือดแดงที่ผิดปกติและเซลลทปี่ กติ โดยในทาง
การแพทยสวนใหญจะนิยมเอาเม็ดเลือดแดงในชวง Mature มาตรวจนับ ซึ่งลักษณะของเม็ดเลือดแดงปกติ
(Normal) จะมีขนาด 7-8 µm เมื่อยอมสีจะพบวาติดสีชมพู โดยบริเวณที่ติดสีจางตรงกลาง (Central
pallor) ไมเกิน 1/3 ของเซลล และมีรูปรางกลม
สวนเม็ดเลือดแดงที่ผิดปกติ (Abnormal) จะมีความผิดปกติในหลายลักษณะ แตในโครงการนีจ้ ะ
ทําการแยกแยะความผิดปกติในสวนของขนาด (Anisocytosis) และรูปราง (Poikilocytosis)

รูปที่ 2.1 เม็ดเลือดแดงที่ปกติ


6

โดยเซลลเม็ดเลือดแดงที่มีขนาดผิดปกติ (Anisocytosis) มี 2 ประเภท คือ


1.Microcytes มีขนาดเสนผาศูนยกลางนอยกวา 6 µm และมีการติดสีบริเวณ Central
pallor มากกวาหรือเทากับ 1/3 ของเซลล

รูปที่ 2.2 Microcytes รูปที่ 2.3 Macrocytes

2. Macrocytes ขนาดเสนผาศูนยกลางมากกวา 9 µm มีการติดสีบริเวณ Central pallor มากกวา


หรือเทากับ 1/3 ของเซลล
สวนเซลลเม็ดเลือดแดงที่ผิดปกติทางรูปราง ( Poikilocytosis ) มีอยู 10 ประเภท คือ
1. Acanthocytes เปนเซลลขนาดเล็กและมีสวนยืน่ ยาวที่ขนาดไมเทากันบริเวณรอบนอก

รูปที่ 2.4 Acanthocytes รูปที่ 2.5 Creanated

2. Creanated เปนเม็ดเลือดแดงเหี่ยว บางครั้งอาจเรียกวา Ecchinocyte ซึ่งมีลักษณะเปนหนาม


แหลมหรือหนามทูขนาดเทา ๆ กัน เรียงอยูโ ดยรอบขอบของเม็ดเลือดแดง
7

3. Elliptocytes เปนเซลลทมี่ ีขนาดไมแนนอน แตมีรูปรางยาวรีคลายแทงดินสอหรือบุหรี่

รูปที่ 2.6 Elliptocytes รูปที่ 2.7 Keratocytes

4. Keratocytes เปนเซลลที่มีขนาดเสนผาศูนยกลางนอยกวา 6 µm มีการติดสีบริเวณ Central


pallor มากกวาหรือเทากับ 1/3 ของเซลล เซลลมีรูปรางคลายพระจันทรเสี้ยว
5. Ovalocytes เปนเซลลทมี่ ีขนาดไมแนนอน รูปรางกลมรีคลายรูปไข

รูปที่ 2.8 Ovalocytes รูปที่ 2.9 Target cells

6. Target cells ขนาดเสนผาศูนยกลางนอยกวา 6 µm ติดสีชมพูตรงกลางและขอบคลายรูปเปา


เซลลมีรูปรางกลม
7. Tear drop cells เปนเซลลที่มีขนาดไมแนนอนและมีรูปรางคลายหยดน้ําตา
8

รูปที่ 2.10 Tear drop cells รูปที่ 2.11 Schistocytes

8. Schistocytes เปนเซลลขนาดเล็ก มีรูปรางไมแนนอน มีลักษณะเปนเศษเซลล


9. Spherocytes เปนเซลลขนาดเล็ก ติดสีทึบทัง้ เซลลและมีรูปรางกลม

รูปที่ 2.12 Spherocytes รูปที่ 2.13 Stomatocytes

10. Stomatocytes เปนเซลลขนาดปกติหรือใหญกวาปกติ มีการติดสีชมพูมีบริเวณสีจางตรงกลาง


คลายรูปปาก
9

2.2.2 Image segmentation


Image segmentation ใชในการแยกองคประกอบตางๆของรูปภาพออกจากพืน้ หลังและดึงเอา
ลักษณะที่สาํ คัญออกมา เปนการลดจํานวนขอมูลในรูปภาพที่ไมจาํ เปนออกไป

รูปที่ 2.14 Image segmentation

วิธีการทีน่ ิยมนํามาใชในการ Segmentation มีดังตอไปนี้


1. Intensity thresholding
เปนวิธีการแยกองคประกอบของรูปภาพโดยดูจากความเหมือนกันของ Intensity ของพิกเซล
ภายในพื้นที่
- วิธีการนี้เหมาะกับภาพที่ไมซับซอน สีของวัตถุและฉากหลังตางกันอยางชัดเจนหรือภาพที่มี
ความสวางไมเทากันทั้งภาพ แตไมสามารถใชกับภาพทีม่ ีสัญญาณรบกวน
1 f ( x, y ) > T
g ( x, y ) = 
0 f ( x, y ) < T

เมื่อ T = คา Threshold , f(x,y) คือภาพตั้งตน


- โดยทั่วไปคา Threshold เปนคาที่ผูใชเลือกขึ้น แตในกรณีที่ Histogram ของภาพมีความ
แตกตางระหวาง ความเขมของวัตถุกบั ความเขมของฉากหลังอยางชัดเจน เราสามารถใช
วิธีการ Adaptive thresholding ในการเลือกคา Threshold โดยอัตโนมัติ
2. วิธีการแบงแยกภาพโดยใช Laplacian image
เป น การใช อ นุ พั น ธ อั น ดั บ 2 ของภาพในการแยกระหว า งวั ต ถุ กั บ ฉากหลั ง โดยมี ห ลั ก การว า
เครื่องหมายของพิกเซลของวัตถุกับฉากหลังใน Laplacian image จะแตกตางกัน ดังนั้นเราสามารถใช
Zero crossing ของ Laplacian image ในการ Segment ได
Laplacian image คํานวณไดจากสูตร

∂2 P ∂2 P
∇2 P = +
∂x 2 ∂y 2
10

20

40

60

80

100

120

140

160

180

200
50 100 150 200 250

รูปที่ 2.15 Laplacian image

3. วิธีแบงแยกภาพโดยใช Gradient image


เปนวิธที ี่ใชอนุพันธอนั ดับ 1 ของภาพในการแบงแยกภาพ
- Gradient image ( |∇P| ) คํานวณไดจาก
∂P ˆ ∂P ˆ
∇P = i+ j
∂x ∂y
และ
2 2
 ∂P   ∂P 
∇P =   +  
 ∂x   ∂y 
- เนื่องจากคา |∇P| จะมีคาสูงในบริเวณขอบของวัตถุ ดังนั้นการทํา Intensity thresholding กับ
ภาพ Gradient image จะทําใหไดขอบของวัตถุดงั แสดงในรูป 2.16 และ 2.17

20 20

40 40

60 60

80 80

100 100

120 120

140 140

160 160

180 180

200 200
50 100 150 200 250 50 100 150 200 250

รูปที่ 2.16 Original image รูปที่ 2.17 Gradient image


11

4. วิธีการแบงแยกภาพโดยใชแบบจําลองการเคลื่อนที่ของอนุภาคในสนามเวคเตอร
แบบจําลองนีน้ ําเสนอโดยอาจารยนวภัค เอื้ออนันต [6] โดยมีหลักการดังนี้
กําหนดให

∂P ˆ ∂P ˆ ..........(1)
∇P = i+ j
∂x ∂y

เปนสนามเกรเดียนตของรูปภาพ สนามเวกเตอรขอบของรูปภาพ (Edge vector field)


คํานวณไดจากสูตร

) ∂P ) ∂P )
e = i− j ……..(2)
∂x ∂y
สนามเวคเตอรขอบนี้จะมีลกั ษณะเหมือนกระแสน้ําไหลวนรอบวัตถุในรูปภาพ ดังแสดงใน
รูปที่ 2.18 เมือ่ นําอนุภาคจําลองไปปลอยไวในสนามเวคเตอรขอบนี้ โดยมีสมการคํานวณตําแหนง
ของอนุภาคจําลองดังนี้
ϖ ϖ
k
p = p + α eϖ
k −1 k −1
……….(3)

r
pk −1 ตําแหนงในอดีตของอนุภาคที่เวลา k-1
r
pk คือตําแหนงปจจุบันของอนุภาคที่เวลา k
r
ek −1 คือ Edge vector field ณ ตําแหนงที่เวลา k − 1
α คือคาคงที่ α > 0
เสนทางการโคจรของอนุภาคในสนามเวคเตอรขอบ จะมีลักษณะเปนทางเดินรูปกนหอย
ดังรูปที่ 2.19 แตเมื่อเพิม่ สนามเวคเตอรแบบบีบอัด (Normal compressive vector field) ซึ่ง
คํานวณไดจาก
ϖ 1 2
n = ∇ .∇ P ……….(4)
2
เขามาในแบบจําลอง สมการการเคลื่อนทีข่ องอนุภาคจําลองจะเปน
ϖ ϖ ϖ ϖ ………..(5)
P = P +α e + β n
k k −1 k −1 k −1

สนามเวคเตอรแบบบีบอัดที่เพิ่มเขามา จะทําใหอนุภาคเคลื่อนที่ไปตามขอบของวัตถุอยาง
ถูกตอง โดยไมเกิดทางเดินรูปกนหอยดังแสดงในรูปที่ 2.21
12

รูปที่ 2.18 Edge vector field

ตําแหนงเริ่มตนของอนุภาค

รูปที่ 2.19 ทางเดินของอนุภาคในสนามเวคเตอรขอบ

r
∇P ∇2 P n
รูปที่ 2.20 สนามเวคเตอรแบบบีบอัด (Normal compressive vector field)
13

อนุภาคโคจรรอบวัตถุตาม
เสนทางเดียว

ตําแหนงเริ่มตนของอนุภาค

รูปที่ 2.21 เสนขอบที่ใชสมการที่ (5)

จากรูปที่ 2.21 จะเห็นไดวาทางเดินของอนุภาคอยูบนขอบของวัตถุอยางชัดเจน ดังนัน้ เราสามารถ


ใชเสนทางเดินของอนุภาคในแบบจําลองนี้ ในการคํานวณหาตําแหนงขอบของวัตถุ วิธีการนี้ถกู เลือกให
เปนวิธีการหลักในการแยกแยะภาพเม็ดเลือดแดงและหาขอบของเซลลเม็ดเลือดแดงในโครงการนี้

2.2.3 Artificial neural network


โครงขายประสาทเทียมที่ใชในโครงการนี้ มีหนาที่แยกแยะประเภทเม็ดตามขนาดและรูปราง ซึ่ง
รูปรางของเม็ดเลือดแดงจะมีแตกตางกัน 8 ประเภท ชนิดของโครงขายประสาทเทียมที่ใช คือ Multilayer
feedforward network โดยมีอัลกอริทึมในการปรับ Weight เปน Back propagation algorithm
1. โครงสรางและการทํางานของ Multilayer feedforward network
14

Layer N Output nodes

Layer N-1

Layer 1 Hidden nodes

Connections

Layer 0 Input nodes

N-layer network

รูปที่ 2.22 โครงสรางของ Multilayer feedforward network

หลักการทํางานของ Multilayer perceptron network คือ ในแตละ Layer ของ Hidden


layer จะมีฟง กชันสําหรับคํานวณเรียกวา Activation function เมื่อไดรับคา Input จาก Output
ของ Layer กอนหนานี้ Hidden layer มีหนาที่สําคัญคือ การแปลงขอมูลที่เขามาใน Layer นั้นๆให
เปน Linearly separable คือสามารถแยกแยะความแตกตางโดยใชระนาบระนาบเดียว กอนที่
ขอมูลจะถูกสงไปถึง Output layer ในบางครั้งอาจจําเปนตอง Hidden layer มากกวา 1 Layer ใน
การแปลงขอมูลใหอยูในรูป Linearly separable สวน Output layer จะทําหนาที่คาํ นวณ Output
ของโครงขายประสาทเทียม
Output ของแตละโหนดคํานวณไดจาก

g(w y )
( h −1) ( h −1) ( h −1) ( h −1)
+θ i
(h)
y y y w y
(h) ( h) (h) ( h) (h)
= i ,1
+ wi , 2 + wi ,3 +Λ i,m
i 1 2 3 m

g(w y )
( h −1)
+θ i
(h) (h)
= i, j j

โดยที่ y (h )

i
คือ Output ของโหนดที่ i ของ Layer h
w
(h)
i ,1
คือ Weight ที่เชื่อมตอระหวางโหนดที่ j ของ Layer h-1 กับโหนดที่ i ของ
Layer h
θ
h
i
คือ Bias ของโหนดที่ i ของ Layer h
15

g คือ Activation function ของโหนดที่ i


การคํานวณ Output จะเห็นไดวา Input ของ Network layer ปจจุบันจะมาจาก Output
ของ Network layer กอนหนานี้ ซึง่ การคํานวณลักษณะนี้ เรียกวา Feedforward network และจะ
ทําการคํานวณเชนนี้ไลไปทีละชัน้ จนถึง Output
2. Backpropagation algorithm
Multilayer perceptron network จะมีการคํานวณหา Error เพื่อตรวจสอบการเรียนรูและ
นําคา Error นี้เปนแนวทางในการปรับ Weight ใหแกวงจรขาย เพื่อใหไดคา Output ของวงจรที่
ถูกตอง โดยการคํานวณคา Error จะเริ่มคํานวณจาก Layer บนสุดกอน จึงจะสามารถคํานวณ
Error ใน Layer ถัดลงมาได จึงเรียกวิธกี ารคํานวณ Error นี้วา Backpropagation algorithm
รายละเอียดของวิธกี าร Backpropagation algorithm ดูในรายละเอียดไดจาก [7]
ให x = [ x , x ,Κ , x ] 1
= Input pattern
2 n

O = [O , O , Κ , O ] 1
= Desired output pattern
2 n

Oˆ = [Oˆ ,Oˆ ,Κ ,Oˆ ] 1


= Network output
2 n

Error ของโหนดที่ i ใน Output layer (Layer N) ของโครงขายคํานวณไดจาก

δ ˆ
(N )
i
= Oi − O
i

การปรับ Weight W ที่ Output layer (Layer N) คํานวณไดจาก


(N)
ij

( N −1)
∆W = α ⋅ δ i ⋅ g ' (hi ) ⋅
( N −1)
y
(N ) (N )
ij j

เมื่อ α คือ Leaning rate


δ
(N )
i
คือ Error ที่โหนดที่ i ใน Output layer (Layer N)
g ' (h (N )
i
)
คืออนุพันธของ Output จากโหนดที่ i ใน Output layer
h
(N )
i
คือ Input ที่โหนดที่ i ใน Output layer ซึ่งคํานวณไดจาก
( N −1)
h =∑ W y
i
k
ik k

และ y
( N −1)

j
คือ Output จากโหนดที่ j ใน Layer ที่ N-1
สวนคาการปรับ Weight (W ) ใน Hidden layer (Layer k) คํานวณไดจาก(k )
ij

( k −1)
∆W = α ⋅δ i ⋅ y
(k ) (k )
ij j

เมื่อ δ คือ Error ของโหนดที่ i ใน Layer ที่ k ซึ่งคํานวณจาก


(k )
i
16

δ = g'(h(k )) ∑W δ
(k ) ( k =1) ( k +1)
i i j
ji i

การปรับ Weight จะทําในทุกๆ รอบที่มกี ารปอน Input ในการฝกโครงขายเขามา การฝกนี้


จะทําไปจนกวา Error ของโครงขายมีคาต่ํากวาคาทีย่ อมรับไดหรือจนกวาจํานวนรอบของการฝกครบตาม
จํานวนที่ตั้งไว
17

บทที่ 3
การออกแบบโปรแกรม

โปรแกรมตรวจนับเม็ดเลือดแดง แบงการทํางานออกเปน 3 สวนใหญๆ ดังแสดงในรูปที่ 3.1


ประกอบไปดวย
1. สวน Input คือสวน Image acquisition เปนการรับภาพจากกลอง CCD หรือเปดภาพ
จากไฟลรูปภาพเพื่อนําไปใชประมวลผลตอไป
2. สวนประมวลผล เปนการนําภาพมาเขาสูกระบวนการ Image enhancement เพื่อ
ปรับปรุงภาพใหเหมาะสม แลวทํา Image segmentation แยะแยะภาพเซลลเม็ดเลือด
จากนั้นจึงนําไปเขาขั้นตอนของการวิเคราะหและจดจําภาพโดยอาศัย โครงขายประสาท
เทียมเพื่อทําการแยกแยะรูปราง ขนาด และนับจํานวนเซลลเม็ดเลือด
3. สวน Output เปนการแสดงผลภาพออกมาทางหนาจอคอมพิวเตอร และแสดงขอมูลของ
การนับจํานวนเม็ดเลือดและแยกแยะประเภทของเม็ดเลือดในรูปแบบที่ผูใชเขาใจไดงาย

INPUT PROCESS OUTPUT


NEURAL
IMAGE ENHANCEMENT
IMAGE ACQUISITION

กลอง CCD IMAGE NETWORK IMAGE


SEGMENTATION
- SHAPE
IMAGE FILE - COUNT REPORT

รูปที่ 3.1 โครงสรางของโปรแกรม

จากการทํางานในสวนของ Input, สวนประมวลผล และสวน Output มีการใชอุปกรณรวม


ในการพัฒนาโปรแกรม คือ
- กลองจุลทรรศน ใชสองดูภาพเซลลเม็ดเลือดแดง
- กลอง CCD ใช Capture ภาพจากกลองจุลทรรศน
- คอมพิวเตอร ใชแสดงผลทางหนาจอ
18

กลอง CCD

กลองจุลทรรศน
คอมพิวเตอร
รูปที่ 3.2 โครงสรางของอุปกรณ

3.1 การทํางานของสวน Input


เปนสวนที่ใชในการติดตอกับผูใช เพื่ออํานวยความสะดวกแกผูใชงานผูพัฒนาไดสรางสวนที่
ติดตอกับผูใชงาน ที่มีรูปแบบเปน GUI โดยอาศัยลักษณะพิเศษของการพัฒนาโปรแกรมดวย Visual C++
และ MFC ทีม่ ีความสามารถในการสราง Application โดยการรวมเอา Resource เชน ปุมกด, หนาตาง
แสดงภาพจากกลองและจากการ Browseและสวนการแสดงผล เปนตน มาทํางานรวมกันกับโปรแกรมที่
ผูพัฒนาทําการสรางไดอยางกลมกลืน โดยสวนอินพุตนีจ้ ะมีอยู 2 สวนคือ สวนแรกจะรับภาพจากกลองที่
ตอกับกลองจุลทรรศนและจะ Capture ภาพเม็ดเลือดไปประมวลผล และสวนที่สองจะไดจากการ Browse
ภาพเม็ดเลือดจากไฟลภาพที่มีอยูแลวมาประมวลผล

3.2 การทํางานของสวนประมวลผล
สวนนี้ประกอบดวยกระบวนการ Segmentation เพื่อแยกภาพเม็ดเลือดแดงโดยใชการประมวลผล
ภาพเชิงดิจิตอลและการจดจําและแยกแยะเม็ดเลือดแดงโดยใชโครงขายประสาทเทียมใหไดออกมาเปน
เปอรเซ็นตของเม็ดเลือดแดงแตละชนิด
3.2.1 สวนของการ Segmentation
ในสวนของการ Segmentation นั้นผูจัดทําโครงการไดดําเนินการอยู 2 ขั้นตอนคือ ทดลอง
เขียน Code โดย Matlab เพื่อหาวิธที ี่ดีทสี่ ุดกอน แลวจึงเขียน Code ดวย C++ ทีเ่ ลียนแบบการ
ทํางานจาก Code ของ Matlab ที่ไดทดลองมาแลว โดยในสวน Code ของ Matlab มีขั้นตอนการ
ทํางานของโปรแกรมดังนี้
- Load ไฟลภาพเซลลเม็ดเลือดขึ้นมาแปลงภาพแบบ RGB เปนภาพแบบ Gray scale
แลวแปลงใหเปนขอมูลภาพชนิด Double
- ทําการปรังปรุงภาพโดยใช High boost filter เพื่อทําใหขอบของเม็ดเลือดชัดเจนมากขึ้น
19

- นําภาพที่ผา น High boost filter มาทํา Lapacian image แลวทํา Gradient image เพื่อ
ใชในการตรวจจับขอบของเม็ดเลือด
- Gradient image ที่ไดจะมีจุดสวางอยูบริเวณขอบของภาพอันเปนผลจากการทํา Circular
convolution จึงตองตัดขอมูลภาพบริเวณขอบของภาพทิง้ ไป
- ทํา Gradient adaptive threshold เพือ่ หาคา Threshold ที่เหมาะสมโดยอัตโนมัติ กับ
ภาพ Gradient image จากนัน้ จึงทํา Erosion เพื่อกัดใหขอบเม็ดเลือดมีขนาดบางลง
ภาพ Gradient image ที่ผานการทํา Thresholding นี้จะถูกนําไปใชในการหาจุดเริ่มตน
ในการทํา Boundary extraction ตอไป
- นําภาพที่ไดจากขั้นตอนที่ 5 ไปใส Label ใหขอบของเม็ดเลือดแตละเซลล โดยจะสแกน
ทุก ๆ Pixel ถาเจอคา Gradient ที่สงู สุดของขอบของเม็ดเลือดแตละเซลล ก็จะใส Label
ใหและจะทํา Region growing ใส Label ไปจนครบขอบเม็ดเลือดนั้น แลวจึงไปเริ่มตนทํา
เชนเดิมกับขอบของเม็ดเลือดใหม โดยเพิม่ คา Label ไปเรื่อย ๆ จนครบทุกเม็ดเลือด
- นําผลลัพธจากการทํา Label ภาพ มาทํา Boundary extraction โดยใหจุดเริ่มตนของการ
ทํา Boundary extraction อยูที่จุดที่มีคา Gradient สูงสุดภายใน Label แตละ Label โดย
ใหมีการเดินรอบขอบ 2 เสนทางเพื่อใหไดเสนขอบของภาพเม็ดเลือดทีส่ มบูรณ
- นําภาพเสนขอบที่ไดจากการทํา Boundary extraction มาทํา Region filling ใหกบั เซลล
เม็ดเลือดแตละ Label ใหเปน Label เดียวกันทัง้ เม็ด แลวดึงภาพเม็ดเลือดแตละ Label
ไปเก็บใน Array เพื่อนําไปเปนเม็ดเลือดตนแบบ

รูปที่ 3.3 ตัวอยางผลการ Segmentation ภาพเม็ดเลือด (ภาพจาก Matlab)


20

รูปที่ 3.4 ตัวอยางผลการดึงภาพเม็ดเลือดแตละ Label ของภาพตนแบบออกมา(ภาพจาก Matlab)

สวน Code ที่เขียนดวยภาษา C++ ที่เลียนแบบมาจาก Code ของ Matlab ที่ไดทดลอง


มาแลวนั้น (ซึ่งใชจริงในโปรแกรม) มีรายละเอียดของโปรแกรมดังนี้
- แปลงภาพเซลลเม็ดเลือดที่ไดจากการ Browse (ตัวแปร m_image) หรือภาพที่ไดจากการ
Capture จากกลองจุลทรรศน (ตัวแปร g_image) ใหเปน Floating point โดยใช
Method Copy() ใหเปนตัวแปร m_fimage เพื่อใหงายตอการประมวลผล
m_fimage.Copy(*m_image);
m_fimage.Copy(*g_image);
- จาก Class CIntArray สราง Array ชื่อ Pout ขึ้นมาเพื่อเก็บคาตางๆ ทีต่ องการ
CintArray Pout ;
- จากตัวแปร m_fimage และ Pout ที่ได เรียกใชฟงกชนั
int nlabel = AllBoundary2Way(Pout,m_fimage,*m_bnd,
m_cellinf);

CImage tx,ty,nx,ny,grad,att;
CIntArray EdgeMap;
// Compute V-fields
ImageGenerateVFieldsConv(src,tx,ty,nx,ny,grad,att,EdgeMap,di
fmask_minscale,difmask_maxscale,difmask_stepscale,bndfcn_type,bnd
fcn_fixf1,bndfcn_fixf2,bndlocalf_type,bndmark_att);

p0_list.FindLocalMaximumPointInLabeledMap(grad.m_data,

grad.m_size.m_row,grad.m_size.m_col,EdgeMap.m_data,5);
grad.Clear();

CTrajectoryMap tmap;
bndext_1stbnd = p0_list.m_nelement;
EdgeMap.Init(0);
21

bnd.Extract(tx,ty,nx,ny,att,bndinterp_mode,tmap,EdgeMap,p0_l
ist,bndext_dir,bndext_delay,bndext_step,bndext_normnstep,bnd
ext_stpmode,bndext_1stbnd,bndext_percent,bndmark_mode,bndmar
k_dist);
bnd.LabelArea(dest,EdgeMap);
ExtractRegionBoundary(bnd, dest, cellinf);
return bnd.m_face_list.m_nelement;
}
int AllBoundary2Way(CIntArray &dest, CImage &src, CBoundaryData
&bnd,CElementLinkListwithSort <CCellData> &cellinf)
{
int nrow = src.m_size.m_row;
int ncol = src.m_size.m_col;

BOOL ok = dest.AllocSameSize(src);
if (!ok)
return -1;

CElementLinkListPointSearch <CVertex> p0_list;

// Boundary extraction parameters


int bndext_stamode = BND_STA_AUTO;
int bndext_stpmode = BND_STP_1STNBND;
int bndext_delay = TRUE;
int bndext_dir = TWOWAYS;
int bndext_1stbnd = 0;
int bndinterp_mode = BILINEAR;
REAL bndext_percent = 10.0;
REAL bndext_step = 0.2;
int bndext_normnstep = 5;
int bndlocalf_type = LPG;
int bndmark_mode = DISTANCE;
int bndmark_dist = 2.0;
int bndmark_att = BND_ATT_CURV;
int bndfcn_type = BND_FCN_BND;
REAL bndfcn_fixf1 = 1.0;
REAL bndfcn_fixf2 = 0.0;
int difmask_type = GAUSSIAN;
REAL difmask_minscale = src.m_size.m_row256.0;
REAL difmask_maxscale = src.m_size.m_row128.0;
REAL difmask_stepscale = 1.05;

ซึ่งจะไดภาพทีเ่ ม็ดเลือดแตละเม็ดถูกใส Label ใหเปนเหมือนกันทัง้ เม็ด โดยตัดบางเม็ดที่


ติดขอบของภาพออก และจะไดคาพิกัดของจุดทุกจุดรอบเม็ดเลือดนั้นๆ ดวย
- เรียกใชฟง กชนั CIntArray2CxImage เพื่อแปลงจากภาพแบบ Floating point ไป
แสดงออกทางหนาจอ
CIntArray2CxImage(*g_image,Pout,m_colormap_table,
256,JET);
22

รูปที่ 3.5 ผลการ Segmentation ออกทาง Dialog ของโปรแกรม

3.2.2 สวนการจดจําและแยกแยะเม็ดเลือดแดงโดยใช โครงขายประสาทเทียม


ในสวนของจดจําและแยกแยะเม็ดเลือดแดงโดยใช โครงขายประสาทเทียมนัน้ ผูจ ัดทํา
โครงการก็ไดดําเนินการ 2 ขัน้ ตอนเหมือนกับสวนการ Segmentation คือ ทดลองเขียน Code
โดย Matlab เพื่อหาวิธที ี่ดีทสี่ ุดกอน แลวจึงเขียน Code ดวย C++ ทีเ่ ลียนจาก Matlab ที่ได
ทดลองมาแลว โดยในสวนของ Code ของ Matlab มีขั้นตอนการทํางานของโปรแกรมดังนี้
- นําภาพเม็ดเลือดแตละ Label ของภาพตนแบบออกมา นํามาปรับขนาดของภาพแตละ
เซลลใหมีขนาดเทากัน (80x80 Pixels) แลวนําไปเก็บใน Array
- นําภาพที่ตองการจําแนกไปหา moment 2 มิติของขอบเซลลและของเซลล โดยจะไดคา
invariant moment ทั้งหมด 14 คา
- ขั้นตอนการเรียนรูของโครงขายประสาทเทียมจะใชคา Invariant moment ของเซลล
ตนแบบมาเปน Input และคลาสของเซลลตนแบบมาเปน Output (เซลลตนแบบมีจํานวน
120 เซลล แบงเปน 12 คลาสๆละ 10 เซลล)
- นําคา Invariant moment มาเขาสูโ ครงขายประสาทเทียมที่ไดจากขั้นตอนที่แลวเพื่อทํา
การคํานวณจําแนกคลาสของเซลลที่ตองการ
23

- จากการ Train ปรากฏวาใหผลการแยกแยะถูกตองประมาณ 50 เปอรเซ็นตเทานัน้


สวน Code ภาษา C++ (ซึ่งใชจริงในโปรแกรม) ไดมีการเขียนขึ้นมาใหมเนื่องจาก Code ของ
Matlab ที่ไดทดลองมาแลวนั้นไดผลไมเปนทีพ่ อใจ ซึ่งมีรายละเอียดของโปรแกรมดังนี้
- ในสวนฟงกชันพื้นฐานของโครงขายประสาทเทียมไดอธิบายในบทตอไป
- ในสวนการ Train โครงขายประสาทเทียมจะตองมีการโหลด Configuration file เขามา
ก อ น ต อ งหลั ง จากที่ Segment ภาพเซลล เ ม็ ด เลื อ ดแล ว โดยรายละเอี ย ดของ
Configuration file มีดังนี้

##----------------------------------------------#
Type of training method
# GRADIENT Neural=Network
0, GRADMOMENT
Configuartion= 1File
#----------------------------------------------#
# A line begin with # is a comment line
0#----------------------------------------------#
#----------------------------------------------#
# No. of layers
##----------------------------------------------#
Type of Initialization
#3 RANDOM 0, READFROMFILE 1
#----------------------------------------------#
0# No. of nodes in each layer
#----------------------------------------------#
#5 30Learning
1 Rate
#----------------------------------------------#
0.00001
# Type of activation function of each layer
#----------------------------------------------#
# INPUT = 0, LOGSIG = 1, TANSIG = 2, LINEAR = 3
##----------------------------------------------#
Maximum number of iterations
#----------------------------------------------#
033
10000
#----------------------------------------------#
#----------------------------------------------#
# Maximum mean square error
#----------------------------------------------#
0.1
24

- ผูใชเปนผูเตรียมขอมูลตนแบบเพื่อใชฝกโครงขายประสาทเทียมโดยในสวนนีม้ ีการเก็บ
ขอมูลของเม็ดเลือดแดงประเภทตางๆ เพื่อใชเปน Input node ในการ Train ใน โครงขาย
ประสาทเทียมซึ่งผูพัฒนาจะระบุดวยตัวเองจาก Dialog select type

รูปที่ 3.6 Dialog ของการกําหนดประเภทใหขอมูลของเม็ดเลือดแดงแตละเม็ด

- ขอมูลของเซลลที่เก็บไวจะประกอบดวย Type และคา Feature 5 คา ของแตละเซลลซึ่ง


ลักษณะเดนทีใ่ ชเพื่อแยกแยะประเภทของเม็ดเลือดในการพัฒนาขณะนี้มีดังนี้
- จํานวน Zero crossing ของ Curvature ของเซลล หลักการนี้มาจาก Image
Curvature ที่มีการเปลี่ยนแปลง เครื่องหมายบวก ลบ ตาม Curve ของขอบวัตถุ
โดยถาขอบเปนมุมแหลมคา Curvature จะมีเครื่องหมายเปนลบ ถาขอบเปนมุม
ปานคา Curvature เครื่องหมายเปนบวก ซึ่ง Feature นี้จะนับจํานวนครั้งที่มีการ
เปลี่ยนแปลงเครื่องหมายจากบวกเปนลบ นั่นคือจํานวนที่เกิด Zero crossing
แสดงวา Feature นี้สามารถนําไปแยกแยะเซลลที่รูปรางหยัก เวา มีหนามได นั่น
คือ ถาเซลลที่รูปรางหยักเวา ควรมีจํานวนการเกิด Zero crossing มากกวาเซลล
ที่รูปรางกลม
- Number of points เปนการหาจํานวนจุดรอบขอบเซลล นั่นคือการนับจํานวน
กาวการเดินทางจุดหนึง่ ไปอีกจุดหนึ่งตามขอบของเซลลจนครบรอบ โดยหลังจาก
การ Segment เราจะไดพิกดั X และ Y รอบขอบเซลล เมื่อนับจํานวนจุดบนขอบ
ของเซลล เราจะรูวา เซลลใหญเล็กแคไหน ถาจํานวนจุดรอบเซลลนอ ยแสดงวา
เปนเซลลที่เล็ก
25

- Minimum and maximum distance from center to edge เปนระยะทางที่


นอยที่สุดจากจุดศูนยกลางเม็ดเลือดไปที่ขอบของเม็ดเลือด และระยะทางที่มาก
ที่สุดจากจุดศูนยกลางเม็ดเลือดไปที่ขอบของเม็ดเลือด โดยสองลักษณะเดนนี้
เป น อั ต ราส ว นกั น ใช แ ยกแยะเซลล ที่ มี รู ป ร า งเว า แหลม ออกจากเซลล ที่
รูปรางกลม นั่นคือถาอัตราสวนไมเปน 1 แสดงวาไมใชเซลลที่มีรูปรางกลม
- Cell area พื้นที่ภายในของภาพเม็ดเลือดแตละเม็ดเปนคาที่แสดงถึงขนาดของ
เซลล เชน ถาเปนเซลลที่ใหญควรมีพื้นทีภ่ ายในเซลลมาก
- สวนฟงกชั่นทีใ่ ชในการ Train ขอมูลของเม็ดเลือด จะมีการเรียกใชดังนี้
m_net.FeedForward(m_traindatain + i*nlength);
err = m_net.UpdateWeight(m_traindataout+i);
- การทํางานของโปรแกรมในสวนสุดทายคือการนําภาพที่ตองการที่จะประมวลผลมา Train

void CRBCCountDlg::OnButtonProcessnet()
{
double err;
int sumResalt_Aniso,sumResalt_Poiki,sumResalt_Normal;

int *chist = new int[NCELLTYPE];


for (int i=0;i<NCELLTYPE;i++)
chist[i] = 0;

int ncell = m_cellinf.m_nelement;


for (i=0;i<ncell;i++)
{
m_net.FeedForward(m_cellinf.GetElement(i).m_feature);
int detectedtype = (int)floor(m_net.GetOutput(0)+0.5);
if ((detectedtype>=0)&&(detectedtype<NCELLTYPE))
{
if (m_assigntype[detectedtype])
{
m_cellinf.GetElement(i).m_celldetectedtype = detectedtype;
chist[detectedtype]++;
}
}
}
m_pmicro = (int)(chist[MICROCYTE]*100.0ncell);
.
.
.
26

3.3 การทํางานของสวน Output


1. แสดงภาพที่ไดจากการ Capture จากกลอง CCD หรือภาพที่เปดจากไฟลภาพทีม่ ีอยูแลวบน
หนาตาง Window
2. แสดงสวนของการรายงานผล โดยหลักของการรายงานผลคือ
2.1 แสดงผลของเซลลเม็ดเลือดแดงที่ปกติและผิดปกติของแตละประเภท (ผิดปกติทาง
ขนาด 2 ประเภทและผิดปกติทางรูปราง 9 ประเภท)ในรูปของเปอรเซ็นตจากจํานวน
เซลลทั้งหมด
2.2 แสดงผลการวิเคราะหภาพเซลลเม็ดเลือดโดย
- ถาผิดปกตินอยกวา 5 เปอรเซ็นตถือวาปกติ
- ถาผิดปกติอยูร ะหวาง 6-10 เปอรเซ็นตแทนดวย Few
- ถาผิดปกติอยูร ะหวาง 11-25 เปอรเซ็นตแทนดวย 1+
- ถาผิดปกติอยูร ะหวาง 26-50 เปอรเซ็นตแทนดวย 2+
- ถาผิดปกติอยูร ะหวาง 51-75 เปอรเซ็นตแทนดวย 3+
- ถาผิดปกติอยูร ะหวาง 76-100 เปอรเซ็นตแทนดวย 4+

รูปที่ 3.7 หนาตางของโปรแกรม เมื่อแสดงการรายงานผล


27

บทที่ 4
การพัฒนาโปรแกรม

4.1 รายละเอียดโปรแกรมที่ไดพัฒนาในเชิงเทคนิค (Software specification)


4.1.1 Input specification
โปรแกรมมี Input ได 2 แบบคือ
1. Input ที่มาจากการ Capture ดวยกลอง CCD ทีต่ อกับกลองจุลทรรศนและเชื่อมตอกับ
คอมพิวเตอรผา นทาง Port USB
2. Input ที่มาจากการเปด File ภาพ

4.1.2 โครงสรางของซอฟตแวร (Design and functional specification )


โปรแกรมที่ไดพัฒนาขึ้นนี้เราไดเลือกใชการสรางโปรเจ็คที่มีใน Microsoft Visual C++ แบบ MFC
AppWizard ซึ่งเปนการสรางโปรแกรมบนวินโดวส (.EXE) โดยใช Application แบบ Dialog based ซึ่ง
Library ของ MFC จะมี Class ใหญๆที่ใชในการสราง Interface เพื่อติดตอกับผูใช
สวนแรกที่ทาํ การเขียนโปรแกรมคือสวนของ User interface โดย Class หลักๆ ที่สรางขึน้ โดย
MFC AppWizard มี 2 Class ดวยกัน คือ
- Class CRBCCountApp : Class นี้จะสืบทอดมาจาก CwinApp ของ MFC มีหนาที่ในการ
ควบคุมการทํางานของโปรแกรมทั้งหมด
- Class CRBCCountDlg : เปน Class ที่สบื ทอดมาจาก Class CDialog ของ MFC ทําหนาที่
ในการควบคุมการแสดงผลและการทํางานของอุปกรณสวนประกอบตางๆ ภายในไดอะล็อก
ซึ่งวินโดวสหลักจะใช Class CDialog สราง โดยโหลดไดอะล็อกรีซอรสมาเปนวินโดวสหลัก
นอกจากนีย้ ังมี Class ที่สําคัญในโปรแกรมอีก ดังนี้
- Class CNeuralNet : เปน Class ที่ใชทํางานในสวนของ โครงขายประสาทเทียม
- Class CTrainDataDialog : เปน Class ที่ใชในการจัดการเก็บขอมูลของเม็ดเลือดแดงเพื่อ
เอาไว Train
- Class CImage เปน Class ที่อาจารยที่ปรึกษาใหความอนุเคราะหใน Source code ซึ่ง
ภายใน Class จะเกี่ยวกับการจัดการกับภาพ เชน Copy , ฟงกชนั ในการ Transform ภาพ
อาจจะเปน Fourier trasform , ฟงกชนั ในการจองและเคลียร Memory , ฟงกชนั Fill พื้นที่
ภายในเซลล , ฟงกชันการหาขอบของวัตถุ , ฟงกชนั ในการทํา Threshold เปนตน
- Class CxImage เปน Software สําเร็จรูปที่ Download มา [11] โดยมี Library ที่จัดการ
เกี่ยวกับภาพทั้ง Load, Save, Display, Transform BMP , JPEG เปนตน
28

1. OnHScroll(UINT nSBCode, UINT nPos, CScrollBar*


pScrollBar)เปนฟงกชนั ที่ใชรองรับการใช Scroll bar แนวนอน ในการแสดงภาพ
2. OnSnap() เปนฟงกชนั ที่ใชรองรับการใชปุม Capture สําหรับการ Capture ภาพ ขึ้นมา
เปน Input
3. OnVScroll(UINT nSBCode, UINT nPos, CScrollBar*
pScrollBar) เปนฟงกชน ั ที่ใชรองรับการใช Scroll bar แนวตั้ง ในการแสดงภาพ

รายละเอียดตางๆภายใน Class CTrainDataDialog ประกอบดวยฟงกชันที่สําคัญๆ ดังนี้


1. CTrainDataDialog(CWnd* pParent) เปนฟงกชันคอนสตรัคเตอรของ Class
CTrainDataDialog ฟงกชัน CTrainData() จะสงคาตัวแปร IDD กลับไปยังคลาสแม
CDialog เพื่อเปนการบอกระบบวาโปรแกรมจะโหลดไดอะล็อกที่สรางไวเพื่อเปน
Interface ติดตอกับผูใชนั้นขึ้นมา
2. DoDataExchange(CDataExchange* pDX) เปนฟงกชนั ที่ใชในการแลกเปลี่ยน
ขอมูลตางๆ ภายในไดอะล็อก
3. OnInitDialog() เปนฟงกชันที่จะถูกเรียกใชงานเมื่อไดอะล็อกถูกเรียกใหปรากฏบน
จอภาพ โดยภายในฟงกชันจะกําหนดคาตัวแปรตางๆของไดอะล็อกไว
4. OnNext() เปนฟงกชนั ที่ใชรองรับการใชปุม  สําหรับแสดงภาพเม็ดเลือดเม็ดตอไป
5. OnPrevious() เปนฟงกชันที่ใชรองรับการใชปุม  สําหรับแสดงภาพเม็ดเลือดเม็ด
ยอนหลัง
6. OnPaint() เปนฟงกชันทีใ่ ชในการวาดภาพออกทางวินโดวส
7. OnSave() เปนฟงกชนั ที่ใชรองรับการใชปุม Save ในการบันทึกขอมูลของ Feature 5
คาและประเภทของเม็ดเลือดแตละเม็ด

รายละเอียดตางๆภายใน Class CSampleGrabberCB ประกอบดวยฟงกชนั ที่สาํ คัญๆ ดังนี้


1. CopyBitmap( double dblSampleTime, BYTE * pBuffer, long
lBufferSize) เปนฟงกชันที่ใชในการเขียนขอมูลทีไ่ ดจากการ Capture ไปเปน

Bitmap
2. DisplayCapturedBits(BYTE *pBuffer, BITMAPINFOHEADER
*pbih) เปนฟงกชน
ั ที่ใชแสดงภาพที่ไดจากการ Capture บน Window ที่ใช Preview
ภาพ
29

รายละเอียดตางๆภายใน Class CNeuralNet ประกอบดวยฟงกชนั ทีส่ ําคัญๆ ดังนี้


1. Alloc(int nl, int *nn) เปนฟงกชันที่ใชในการจอง Memory ไวสําหรับตัวแปร
ตางๆ
2. Initialization() เปนฟงกชนั ที่ใชในการ Initialize คา Weight และคา Bias ในแต
ละ Layer
3. LoadNeuralNetFile(const char * lpszPathName) เปนฟงกชันทีใ่ ชใน
การโหลดไฟลที่กําหนดคา Configuration ของ โครงขายประสาทเทียมเขามาในโปรแกรม
4. FeedForward(double *inpattern) เปนฟงกชันที่ใชในการหา Output ที่
ไดมาจากการเอา Activation Function ของแตละ Layer มาคํานวณ โดยมีการคํานวณ
จาก Input node มา Hidden node และจาก Hidden node ไปยัง Output node
5. BackPropagation(double *outpattern) เปนฟงกชนั ที่ใชในการหาคา Error
ของ Output layer และ Hidden layers
6. Derivative(int layer, int nnode) เปนฟงกชันที่ Return คาอนุพนั ธของ
Output เมื่อมีการคํานวณในแตละ Layer โดยจะสอดคลองกับฟงกชนั FeedForward
7. Activation(int layer, int nnode,double input) เปนฟงกชนั ทีใ่ ชใน
การหาคา Activation function ของแตละ Layer
8. UpdateWeight(double *outpattern) เปนฟงกชันที่ใชในการปรับคา Weight
ของทุก Layer
9. GetOutput(int nnode) เปนฟงกชนั ที่ใชในการใหคา Output ของประเภทของเม็ด
เลือดที่ได
10. Clear() เปนฟงกชนั ที่ใชในการลบคาของตัวแปรตางๆ
รายละเอียดของฟงกชนั อื่นๆที่เกี่ยวของกับรูปภาพ
1. Copy(CxImage &src)เปนฟงกชนั แปลงภาพไปเปน Floating point เพื่อใหงา ยตอ
การประมวลผล
2. AllBoundary2Way(CIntArray &dest, CImage &src) ใชในการ
Segmentation ภาพเม็ดเลือดและ Label อันดับใหแตละเม็ดเลือด
3. CIntArray2CxImage(CxImage &dest, CIntArray &src) ใชในการ
แปลงกลับจาก Floating point เปนภาพ
4. MakeBitmap() เปนฟงกชันแปลงภาพไปเปนภาพ Bitmap
30

4.2 ขอบเขตและขอจํากัดของโปรแกรมที่พัฒนา
4.2.1 ขอบเขตของโปรแกรม
โครงการนีเ้ ปนการพัฒนาโปรแกรมตรวจนับเซลลเม็ดเลือดแดงอัตโนมัติโดยมีคุณลักษณะดังนี้
1. โปรแกรมสามารถเปดอานไฟลภาพถายของเม็ดเลือดหรือรับภาพโดยตรงจากกลองจุลทรรศน
2. โปรแกรมสามารถจําแนกเซลลเม็ดเลือดระหวางเซลลทปี่ กติกับเซลลที่ผิดปกติ รวมทั้งรายงาน
จํานวนเปนเปอรเซ็นตและรายงานแบบทางการแพทย

4.2.2 ขอจํากัดของโปรแกรมทีพ
่ ัฒนา
โปรแกรมยังไมสามารถจดจําและแยกแยะเม็ดเลือดแดงที่ผิดปกติไดครอบคลุมทุกประเภท

4.2.3 คุณลักษณะของอุปกรณที่ใชกับโปรแกรม
1. Windows XP
2. CPU 400 MHz ขึ้นไป
3. Harddisk
4. RAM 128 MB
5. Keyboard
6. Mouse
7. กลอง CCD
8. Case ที่มี Port USB
9. กลองจุลทรรศน

4.2.4 กลุมผูใช
ตามวัตถุประสงคที่ตั้งไวกลุม ผูใชจะเปนนักศึกษาหรืออาจารยทางดานการแพทยหรือเทคนิค
การแพทย รวมถึงเจาหนาที่ตามโรงพยาบาลตางๆ ทีจ่ ําเปนตองมีการวินิจฉัยโรคโดยการนับและแยกแยะ
เซลลเม็ดเลือดแดง แตในภาคการศึกษาของวิชาโครงการนี้ยังพัฒนาไมถึงระดับที่จะนําไปใชงานไดจริง ยัง
เปนเพียงแคงานวิจัย ดังนั้นกลุมผูใชจึงเปนผูที่สนใจศึกษาในเรื่องของนับจํานวนและแยกแยะประเภทเซลล
หรือวัตถุอื่นๆ โดยอาศัยหลักการของโครงขายประสาทเทียม
31

บทที่ 5
ตัวอยางการใชโปรแกรม

5.1 การใชงานโปรแกรม
การใชโปรแกรมตรวจนับเม็ดเลือดแดงนี้ยังถือวาอยูในระดับของงานวิจยั ซึ่งโปรแกรมยังไม
สมบูรณเพียงพอที่จะนําไปติดตั้งและใชงานจริงตามโรงพยาบาลทั่วไป โดยลักษณะการใชโปรแกรมนี้มี
ขั้นตอนการทดลองที่สําคัญดังนี้
5.1.1 สวน INPUT
เมื่อเปดโปรแกรมจะพบกับหนาตางของโปรแกรมดังรูปขางลาง

รูปที่ 5.1 หนาตางของโปรแกรม


32

โปรแกรมจะรับ Input ได 2 แบบคือ


1. ภาพทีม่ าจากการ Capture ดวยกลอง CCD ที่ตอกับกลองจุลทรรศน โดยตองมีการกดปุม
เพื่อแสดงภาพ ณ ตอนนัน้ แลวกดปุม เมื่อไดภาพที่ตองการ
จากนั้นก็กดปุม เพื่อหยุดการแสดงภาพ จะไดภาพที่จะนําไปประมวลผลตอไป
2. ภาพทีม่ าจากการเปดไฟลภาพ โดยตองกดปุม เพื่อหาภาพที่ตองการ ซึง่ จะ
ปรากฏหนาตางขึ้นดังรูปที่ 5.2

รูปที่ 5.2 หนาตางการเปดไฟล

จากนั้นจึงเลือกไฟลที่ตองการนําไปประมวลผล ภาพที่ไดจากการเปดไฟลแสดงดังรูปที่
5.3 ซึ่งเราสามารถจะเลื่อน Scrollbar หรือกดปุม เพื่อดูรายละเอียดของภาพได
33

รูปที่ 5.3 หนาตางของโปรแกรมเมื่อแสดงผลการเปดไฟล

5.1.2 สวนของการทดลองและประมวลผล
ในสวนของการประมวลผลนัน้ โปรแกรมจะแบงงานออกเปน 2 สวน คือ
1. สวนของ Image segmentation จะทํางานเมื่อกดปุม ซึ่งผลของการทํางานจะ
แสดงดังรูปที่ 5.4
34

รูปที่ 5.4 หนาตางของโปรแกรมเมื่อแสดงผลของ Image segmentation

ในสวนนี้โปรแกรมแสดงผลของการนับจํานวนเซลลทงั้ หมดในภาพออกมา และสามารถทีจ่ ะ


กลับไปดูภาพตั้งตนกอนหนาไดดวยการกดปุม และกลับมาภาพเดิมโดยการกด
ปุม
2. สวนของโครงขายประสาทเทียมเปนสวนที่โปรแกรมสามารถพัฒนาตอไปไดอีกสําหรับ
งานวิจยั ดานอืน่ ๆ โดยโปรแกรมในสวนนีย้ ังอยูในขั้นของการทดลองและเปรียบเทียบหาวิธที ี่ดี
ที่สุด สวนนี้มลี ําดับขั้นตอนการใชงานดังนี้
-->กอนที่จะTrainโครงขายประสาทเทียมตองมีการโหลด Neural network configuration
file ขึ้นมากอน จากหนาจอ Interface ใหไปที่เมนู File > Load configuration แลวหา File
NeuralNet.txt ซึ่งปกติจะอยู Folder เดียวกับโปรแกรม
-->หลังจากการ Segmentation กับภาพเม็ดเลือดแดงแลวจะไดลักษณะเดน 5 แบบของ
เม็ดเลือดแตละเม็ด จากนั้นจะนําขอมูลนี้ไปเปน Input ของโครงขายประสาทเทียมเราสามารถเก็บ
ขอมูล Input ไดโดยการเลือกที่เมนู Data > Training data ซึ่งก็จะปรากฏหนาตางขึ้นดังรูปที่ 5.5
35

รูปที่ 5.5 หนาตางการเก็บขอมูลของเม็ดเลือดแดง

ในการเก็บขอมูล Input เอาไว Train นั้นเราตองมาพิจารณาเม็ดเลือดทีละเม็ดวาเปน


ประเภทใด แลวก็เลือกประเภทและกดปุม โดย Type ที่เลือกจะไปปรากฏที่ชอ ง
Assign type ถาตองการที่จะพิจารณาเม็ดเลือดเม็ดตอไปใหกดปุม เมื่อเก็บเสร็จแลวให
กดปุม ใน Dialog นี้เราสามารถเลือกเฉพาะเม็ดเลือดที่ตองการได
-->เมื่อกด OK เราจะไดขอมูลมา 2 แบบ คือ แบบแรกเปนขอมูลการ Train ที่เปน Input
ซึ่งจะบอกจํานวนเม็ดเลือดทีเ่ ลือกเขาเปน Input ของการ Train และคาคุณลักษณะเดนตางๆของ
แตละเม็ด และแบบที่สองเปนขอมูลในการ Train ที่เปน Output ซึ่งจะบอกจํานวนเม็ดเลือดและ
Type ที่เราได Assign ใหใน Code โปรแกรมที่พฒ ั นานี้เราสามารถเก็บขอมูลเปน Array หรือเปน
Text file ก็ไดแลวเรียกมาใชงานอีกที
-->การ Train โครงขายประสาทเทียม จะทํางานเมื่อกดปุม ซึง่ จะเปนการ
Train สวนของขอมูลของเม็ดเลือดแดงที่ไดเลือกเก็บไวแลว โดยโครงขายประสาทเทียมจะมีการรับ
Input ที่เปน คุณลักษณะเดน 5 คาแลวไปคํานวณภายในแตละ Layer ใหผลออกมาเปนประเภท
(Type) ของเม็ดเลือดแตละเม็ดที่โครงขายประสาทเทียมตรวจพบ ในการ Train นัน้ จํานวนรอบที่
ใชเริ่มตั้งแต 5000 รอบขึ้นไปขึ้นอยูกับคา Error ของการ Train เพื่อทีจ่ ะให Error ต่ํา ควร Train
หลายๆรอบ โดยกดปุม Train ซึ่งการกดแตละครั้งหมายถึง 5000 รอบ
-->ในสวนของการรายงานนั้นได จะทํางานเมื่อกดปุม โดยจะนําภาพที่เรา
ตองการประมวลผลไปเปรียบเทียบกับขอมูลที่ไดผานโครงขายประสาทเทียมแลวเพือ่ จะแยกแยะ
วาเปนเม็ดเลือดแตละเม็ดเปนประเภทใด
36

--> หลังจากประมวลผลเสร็จเราสามารถดูผลลัพธของการ Train ไดโดยไปที่เมนู Data >


Training data จะปรากฏประเภทของเม็ดเลือดแดงทั้งหมดทีโ่ ครงขายประสาทเทียมเรียนรูและ
ตรวจพบทีช่ อง Detected type

5.1.3 สวนของการรายงานผล
โปรแกรมนี้จะมีการรายงานผล 2 รูปแบบคือ
1. การนับเซลลเม็ดเลือดแดงทีป่ กติและผิดปกติของแตละประเภท (ผิดปกติทางขนาด 2 ประเภท
และผิดปกติทางรูปราง 9 ประเภท)ในรูปของเปอรเซ็นตจากจํานวนเซลลทั้งหมด
2. ผลของการวิเคราะหภาพเซลลเม็ดเลือดโดย
- ถาผิดปกตินอยกวา 5 เปอรเซ็นตถือวาปกติ
- ถาผิดปกติอยูร ะหวาง 6-10 เปอรเซ็นตแทนดวย Few
- ถาผิดปกติอยูร ะหวาง 11-25 เปอรเซ็นตแทนดวย 1+
- ถาผิดปกติอยูร ะหวาง 26-50 เปอรเซ็นตแทนดวย 2+
- ถาผิดปกติอยูร ะหวาง 51-75 เปอรเซ็นตแทนดวย 3+
- ถาผิดปกติอยูร ะหวาง 76-100 เปอรเซ็นตแทนดวย 4+
37

รูปที่ 5.6 หนาตางของโปรแกรมเมื่อแสดงการรายงานผลของโปรแกรม


38

บทที่ 6
บทสรุปและขอเสนอแนะ

6.1 ผลของการทดสอบโปรแกรม
ในสวนการนับจํานวนเม็ดเลือดแดงโดย Image segmentation นั้นจากการทดลองพบวาโปรแกรม
นับจํานวนเซลลไดถูกตอง แตในสวนการจดจําและแยกแยะเม็ดเลือดแดงโดยใชโครงขายประสาทเทียมนั้น
จากการที่ไดทาํ การทดลองเก็บสถิติของผลที่โครงขายประสาทเทียมจดจําและแยกแยะไดนั้นพบวายังมี
ความผิดพลาดดังแสดงไดดังนี้
รายละเอียด ทุกการทดลองใชไฟลภาพเดียวกัน ซึ่งแสดงไวในรูปที่ 6.1 สวนใหญจะเปนเม็ดเลือด
แดงที่ผิดปกติทางขนาดแบบ Ovalocyte (ทรงรี) รองลงมาเปน Normal cell (ทรงกลม) เซลลที่ติดกันบาง
และเศษเซลล ซึ่งจะพบนอยมาก ในการ Train จะใชจํานวนรอบ 20000 รอบเทากันทุกการทดลอง ขอมูลที่
นํามาฝกเปนเพียงตัวอยางบางเซลลจากทั้งหมด 173 เซลลภายในภาพ

รูปที่ 6.1 ไฟลภาพเซลลเม็ดเลือดแดงที่นาํ มาทดลอง

การทดลองที่ 1
- กําหนดคาชนิดของเม็ดเลือดเพียง 2 ชนิดคือ Normal และ Ovalocyte และเก็บขอมูลเพียง 4
เซลล เพื่อแยกทรงกลมกับทรงรี
- ใช Feature 5 คาประกอบดวย จํานวน Zero crossing ของ Curvature ของเซลล, Number of
points, Minimum and maximum distance from center to edge และ Cell area
- จํานวนโหนดใน Layer 2 เปน 30
39

ผลการทดลอง
- โครงขายประสาทเทียมสามารถแยกแยะประเภทเม็ดเลือดแตละเม็ดไดถูกตองเมื่อเปรียบเทียบ
กับคําตอบจริงที่เราไดกาํ หนดไวแลว พบวาถูกตอง 130 เซลลในจํานวนทัง้ หมด 173 เซลล คิดเปน 75.1
เปอรเซ็นต สวนที่โครงขายประสาทเทียมจดจําผิดพลาดมีประมาณ 24.9 เปอรเซ็นต
- จํานวนเปอรเซ็นตหลังจากการฝกที่โครงขายประสาทเทียมสามารถทําการแยกแยะประเภทไดคิด
เปน Normal cell 35 เปอรเซ็นต Ovalocyte 56 เปอรเซ็นต สวนอีก 9 เปอรเซ็นตทเี่ หลือเปนประเภท Not
assign เมื่อคํานวณจากเซลลทั้งหมด 173 เซลลโดยไมสนใจวาโครงขายประสาทเทียมจะแยกแยะถูกตอง
หรือไม
- จํานวนเปอรเซ็นตเมื่อคิดเฉพาะที่โครงขายประสาทเทียมแยกแยะไดถูกตองพบวามี Normal cell
22 เปอรเซ็นต Ovalocyte 49.1 เปอรเซ็นต และ 4 เปอรเซ็นตเปนประเภท Not assign เมื่อรวมผลแลว
พบวาโครงขายประสาทเทียมแยกแยะไดถกู ตองตามประเภทของเม็ดเลือดแดงประมาณ 75 เปอรเซ็นต

การทดลองที่ 2
- กําหนดใหชนิดเม็ดเลือดมี 4 ชนิด เก็บขอมูลในการฝกมากขึ้นไดแก Normal 28 เซลล,
Ovalocyte 42 เซลล, Schistocyte 6 เซลลและ Other 6 เซลล
- ใช Feature 5 คาประกอบดวย จํานวน Zero crossing ของ Curvature ของเซลล, Number of
points, Minimum and maximum distance from center to edge และ Cell area
- จํานวนโหนดใน Layer 2 เปน 30
ผลการทดลอง
- โครงขายประสาทเทียมสามารถแยกแยะประเภทเม็ดเลือดแตละเม็ดไดถูกตองเมื่อเปรียบเทียบ
กับคาจริงที่เราไดกําหนดไวแลว พบวาถูกตอง 139 เซลลในจํานวนทั้งหมด 173 เซลล คิดเปน 80.3
เปอรเซ็นต
- จํานวนเปอรเซ็นตหลังจากการฝกทีโ่ ครงขายประสาทเทียมสามารถทําการแยกแยะประเภทได
คิดเปน Normal Cell 24 เปอรเซ็นต Ovalocyte 51 เปอรเซ็นต Schistocyte 5 เปอรเซ็นต Other 3
เปอรเซ็นต สวน 17 เปอรเซ็นตที่เหลือเปนประเภท Not assign เมื่อคํานวณจากเซลลทั้งหมด 173 เซลล
โดยไมสนใจวาโครงขายประสาทเทียมจะแยกแยะถูกตองหรือไม
- จํานวนเปอรเซ็นตเมื่อคิดเฉพาะที่โครงขายประสาทเทียมแยกแยะไดถูกตองพบวามี Normal cell
15.5 เปอรเซ็นต Ovalocyte 60.1 เปอรเซ็นต Schistocyte 2.1 เปอรเซ็นต Other 1.2 เปอรเซ็นต และ Not
assign 1.5% เมื่อรวมผลแลวพบวาโครงขายประสาทเทียมแยกแยะไดถูกตองตามประเภทของเม็ดเลือด
แดง 80.40 เปอรเซ็นต
40

การทดลองที่ 3
- กําหนดชนิดของเม็ดเลือดเพียง 2 ชนิดคือ Normal และ Ovalocyte และเก็บขอมูลในการฝก
เพียง 4 เซลล เพื่อแยกทรงกลมกับทรงรี
- ใช Feature 5 คาไดแก จํานวน Zero crossing ของ Curvature ของเซลล, Number of points,
Minimum and maximum distance from center to edge และ Cell area
- เพิ่มจํานวนโหนดใน Layer 2 เปน 40
ผลการทดลอง
- โครงขายประสาทเทียมสามารถแยกแยะประเภทเม็ดเลือดแตละเม็ดไดถูกตองเมื่อเปรียบเทียบ
กับคาจริงที่เราไดกําหนดไวแลว พบวาถูกตอง 108 เซลลในจํานวนทั้งหมด 173 เซลล คิดเปน 62.42
เปอรเซ็นต
- จํานวนเปอรเซ็นตหลังจากการฝกที่โครงขายประสาทเทียมสามารถทําการแยกแยะประเภทไดคิด
เปน Normal cell 16 เปอรเซ็นต Ovalocyte 56 เปอรเซ็นต สวนอีก 28 เปอรเซ็นตที่เหลือเปนประเภท Not
assign เมื่อคํานวณจากเซลลทั้งหมด 173 เซลลโดยไมสนใจวาโครงขายประสาทเทียมจะแยกแยะถูกตอง
หรือไม

การทดลองที่ 4
- กําหนดชนิดเม็ดเลือดเพียง 2 ชนิดคือ Normal และ Ovalocyte และเก็บขอมูลในการฝกเพียง 4
เซลล เพื่อแยกทรงกลมกับทรงรี
- ใช Feature 5 คาไดแก จํานวน Zero crossing ของ Curvature ของเซลล, Number of points,
Minimum and maximum distance from center to edge และ Cell area
- ลดจํานวนโหนดใน Layer 2 เปน 25
ผลการทดลอง
- โครงขายประสาทเทียมสามารถแยกแยะประเภทเม็ดเลือดแตละเม็ดไดถูกตองเมื่อเปรียบเทียบ
กับคาจริงที่เราไดกําหนดไวแลว พบวาถูกตอง 113 เซลลในจํานวนทั้งหมด 173 เซลล คิดเปน 65.31
เปอรเซ็นต
- จํานวนเปอรเซ็นตหลังจากการฝกที่โครงขายประสาทเทียมสามารถทําการแยกแยะประเภทไดคิด
เปน Normal cell 20 เปอรเซ็นต Ovalocyte 66 เปอรเซ็นต สวนอีก 14 เปอรเซ็นตที่เหลือเปนประเภท Not
assign เมื่อคํานวณจากเซลลทั้งหมด 173 เซลลโดยไมสนใจวาโครงขายประสาทเทียมจะแยกแยะถูกตอง
หรือไม
41

การทดลองที่ 5
- กําหนดชนิดของเม็ดเลือดเพียง 2 ชนิดคือ Normal และ Ovalocyte และเก็บขอมูลในการฝก
เพียง 4 เซลล เพื่อแยกทรงกลมกับทรงรี
-ใช Feature เปน 6 คา ที่เพิม่ เขามาคือ รัศมีเฉลี่ย
ผลการทดลอง
- โครงขายประสาทเทียมสามารถแยกแยะประเภทเม็ดเลือดแตละเม็ดไดถูกตองเมื่อเปรียบเทียบ
กับคาจริงที่เราไดกําหนดไวแลว พบวาถูกตอง 111 เซลลในจํานวนทั้งหมด 173 เซลล คิดเปน 64.16
เปอรเซ็นต
- จํานวนเปอรเซ็นตหลังจากการฝกที่โครงขายประสาทเทียมสามารถทําการแยกแยะประเภทไดคิด
เปน Normal cell 31 เปอรเซ็นต Ovalocyte 40 เปอรเซ็นต สวนอีก 29 เปอรเซ็นตที่เหลือเปนประเภท Not
assign เมื่อคํานวณจากเซลลทั้งหมด 173 เซลลโดยไมสนใจวาโครงขายประสาทเทียมจะแยกแยะถูกตอง
หรือไม

ตารางที่ 2 สรุปผลการทดลองทัง้ หมด


เปอรเซ็นตที่แยกแยะประเภท
การทดลอง
ไดถูกตอง
กําหนดชนิดของเม็ดเลือด 2 ชนิด(แยกกลมและรี) เก็บขอมูลในการฝก 75.10
เพียง 4 เซลล
กําหนดชนิดของเม็ดเลือด 4 ชนิดคือ Ovalocyte, Normal,
Schistocyte, Other เก็บขอมูลในการฝกทัง้ หมด 82 เซลล ไดแก 42, 80.40
28, 6, 6 เซลลตามลําดับ
เพิ่มโหนดที่ Layer 2 เปน 40 62.42
ลดโหนดที่ Layer 2 เปน 25 65.31
เพิ่ม Features เปน 6 Features 64.16
42

ในการทดลองนี้ไดใชภาพเดียวกันทุกกรณี เปนภาพที่ประกอบดวยเซลลประเภท Ovalocyte มาก


ที่สุด รองลงมาคือ Normal, Schistocyte และ Other และเมื่อเปรียบเทียบการนับจํานวนและแยกแยะ
ประเภทจากผูเ ชี่ยวชาญกับผลที่โครงขายประสาทเทียมจดจําและแยกแยะไดใหผลดังนี้

ตารางที่ 3 เปรียบเทียบการนับจํานวนและแยกแยะประเภท
Ovalocyte Normal Schistocyte Other Not
เงื่อนไข
% % % % Assign
กําหนดชนิดของเม็ดเลือด 2 ชนิด(แยก
กลมและรี) เก็บขอมูลในการฝกเพียง 4 49.1 22 - - 4
เซลล
กําหนดชนิดของเม็ดเลือด 4 ชนิดคือ
Ovalocyte, Normal, Schistocyte, 60.1 15.5 2.1 1.2 1.5
Other เก็บขอมูลในการฝกทัง้ หมด 82
เซลล ไดแก 42, 28, 6, 6 เซลลตามลําดับ
ผูเชี่ยวชาญ 72 22 2 1 3

6.2 ปญหาและอุปสรรค
1. ในการทดลองวิธีการ Segmentation กับภาพเม็ดเลือดแดงและการจดจําและแยกแยะเม็ด
เลือดแดงโดยใชโครงขายประสาทเทียมตองทดลองใชหลายวิธีกวาจะไดผลในระดับที่นา พอใจ
และในขั้นแรกของการทดลองจะใชโปรแกรม Matlab กอน หลังจากนั้นจึงเขียนเปน Code
ภาษา C++
2. การจดจําและแยกแยะเม็ดเลือดแดงโดยใชโครงขายประสาทเทียมทําไดคอนขางยาก
เนื่องจากเม็ดเลือดแดงบางประเภทมีลักษณะที่ไมตายตัวแนนอน ถึงแมวาจะเปนประเภท
เดียวกันก็ตาม ทําใหตองใชเวลาศึกษาหาลักษณะเดนทีเ่ หมาะสมและครอบคลุมลักษณะของ
เม็ดเลือดทุกๆเซลล คอนขางมาก ไมสามารถทําไดทันในระยะเวลาของวิชาโครงการใน 1 ป

6.3 แนวทางในการพัฒนาและประยุกตใชรวมกับงานอื่นๆ ในขั้นตอไป


1. พัฒนาโปรแกรมในสวนของการการจดจําและแยกแยะเม็ดเลือดแดงใหถูกตองและแมนยํา
มากยิง่ ขึ้นโดยอาจจะมีการหาลักษณะเดนที่เหมาะสมและครอบคลุมกับทุกเซลล เพื่อที่จะทํา
ใหโปรแกรมสามารถแยกแยะประเภทไดถกู ตองและนําไปติดตั้งใชงานไดจริง
43

2. โปรแกรมนี้ถือวาเปนงานวิจยั ในระดับหนึ่งที่สามารถนําไปประยุกตใชในการศึกษาและวิจัย
ดานอื่นๆตอได
6.4 ขอสรุปและขอเสนอแนะ
โปรแกรมตรวจนับเม็ดเลือดแดงสามารถนับจํานวนเม็ดเลือดแดงโดยเปนจํานวนเม็ดเลือดแดงที่
ไดมาจากการถายภาพดวยกลอง CCD ที่ตอกับกลองจุลทรรศนหรือจากการเปดไฟล โดยอาศัยหลักการ
ของ Image segmentation ซึง่ ใหผลการนับที่แนนอน นอกจากนี้โปรแกรมยังสามารถจดจําและแยกแยะ
ประเภทของความผิดปกติของเม็ดเลือดแดง สามารถระบุรูปรางที่ผิดปกติไดในระดับหนึง่
จากรายงานสรุปผลการทดสอบโปรแกรมในสวนการฝกของโครงขายประสาทเทียมที่ไดกลาวไว
ขางตน พบวา โครงขายประสาทเทียมที่สรางขึ้นแบบ 3 Layer นี้ เมื่อมี Input เปนคา Features 5 คา จะ
ใหผลการแยกแยะเซลลทถี่ ูกตองมากวาใช Input แบบ 6 คาและเมื่อกําหนดหรือเลือกประเภท(Type) เซลล
เม็ดเลือดแดงเปนตนแบบการ Train จํานวนมากเทาไหร ยิ่งใหผลการแยกประเภทถูกตองมากยิ่งขึน้ ในการ
ทดสอบนี้ใชจาํ นวน Node ใน Layer 2 เปน 30 และพบวาเมื่อลดจํานวนโหนดหรือเพิ่มโหนดใหมากกวา
30 ก็ใหผลถูกตองไมเทากับ 30 โหนด
ในการรายงานผลบน Window dialog เปนจํานวนเปอรเซ็นตที่โปรแกรมนับไดนนั้ โดยที่ โครงขาย
ประสาทเทียม อาจจะมีการตรวจพบรูปรางตามประเภทถูกตองหรือไมถูกตองบาง แตจะรายงานจํานวน
เซลลเม็ดเลือดแดงทั้งภาพ ซึ่งสรุปแลววาโปรแกรมจะแยกแยะเม็ดเลือดแดงตามรูปรางไดถูกตองประมาณ
74.6 เปอรเซ็นต สวนขอบกพรองของการรายงานผล คือ แมวาจะเปนไฟลภาพเดียวกัน เมื่อใช Features
หรือ เซลลตนแบบที่ไดเลือกเก็บตางกันจะใหผลลัพธที่แตกตางกันในแตละครั้ง สวนจํานวนรอบที่ใช Train
ก็ใหผลลัพธตางกันเชนกัน เราสามารถทําการฝกไดเรื่อยๆจน Error ต่ําที่สุดและคาเปอรเซ็นตความผิดปกติ
ก็เปลี่ยนแปลงไปดวย ซึง่ ในขณะนี้ยังไมมกี ารตรวจสอบกับทางผูเชีย่ วชาญวาควร Train ระดับไหน หรือวา
Features ใดที่เหมาะที่สุดถึงจะใหผลทีถ่ กู ตองได
โปรแกรมตรวจนับเม็ดเลือดแดงที่พฒ ั นามาจนถึงขั้นนี้ ถือไดวาเปนงานวิจยั อยางหนึ่ง ผูที่สนใจ
ศึกษาในเรื่องของการจดจําและแยกแยะเซลลหรือวัตถุอื่นๆที่อาศัยหลักการของ โครงขายประสาทเทียม
สามารถวิเคราะหผลการทดลองและนําเอาหลักการไปเปนแนวทางพัฒนา Application ตางๆตอได
ผูพัฒนาจึงมีขอ เสนอแนะวาเวลาในการพัฒนาโปแกรมควรมากขึ้นเพือ่ ที่จะสามารถพัฒนาโปรแกรมให
ถูกตองสมบูรณและนําไปใชงานจริงได นอกจากนี้สําหรับการวิจยั ในสวนของโครงขายประสาทเทียมที่จะ
ใชแยกแยะและจดจําเซลลเม็ดเลือดแดงเปนเรื่องที่คอนขางยากควรมีเวลาในการพัฒนาและศึกษาทีน่ าน
พอสมควรถึงจะใหผลสรุปที่ถูกตองได
44

ภาคผนวก
คูมือการติดตั้ง

ในการใชโปรแกรมผูใชจะตองทําการติดตั้งโปรแกรมโดยใสแผน CD ติดตั้งโปรแกรมลงไปใน
CD-ROM เมื่อใสแผน CD แลว ใหปฏิบัตติ ามขั้นตอนดังนี้
1. ดับเบิ้ลคลิกไอคอน Setup.exe จะปรากฏหนาตางขึ้นดังรูป

รูปที่ ผ.1 หนาตางแรกของการติดตั้งโปรแกรม

2. แลวคลิก Next > จะปรากฏหนาตาง License agreement ขึ้นดังรูป

รูปที่ ผ.2 หนาตาง License agreement


45

3. เลือก I Agree แลวคลิก Next > ก็จะปรากฏหนาตาง Select installation folder ขึ้นดังรูป

รูปที่ ผ.3 หนาตางเลือกโฟลเดอรการติดตั้ง

4. เลือก Folder ที่จะติดตั้งโปรแกรมโดยการกดปุม Browse เมื่อเลือกไดแลวคลิกปุม Next > จะ


ปรากฏหนาตาง Confirm installation ขึ้นดังรูป

รูปที่ ผ.4 หนาตางยืนยันการติดตั้ง


46

5. คลิก Next > เพื่อเริ่มทําการติดตั้งโปรแกรม เมื่อติดตั้งเสร็จ จะปรากฏหนาตาง Installation


complete ขึ้นดังรูป

รูปที่ ผ.5 หนาตางแสดงการติดตั้งเสร็จสมบูรณ

6. คลิก Close ก็ถือวาการติดตั้งโปรแกรมเสร็จสมบูรณ


47

บรรณานุกรม

1. สุนันท จํารูญ, คูมือการตรวจชันสูตรทางโลหิตวิทยา, กองมาตรฐานชันสูตรสาธารณสุข


กรมวิทยาศาสตรการแพทย กระทรวงสาธารณสุข, กรุงเทพมหานคร , 2529
2. อานนท บุณยะรัตเวช, โลหิตวิทยาเม็ดเลือดแดง, ภาควิชาพยาธิวทิ ยา คณะแพทยศาสตร
โรงพยาบาลรามาธิบดี มหาวิทยาลัยมหิดล,กรุงเทพมหานคร,2535
3. สุภินันท สเปค-สายเชื้อ, ภาพสีประกอบโลหิตวิทยา, ภาควิชาจุลทรรศนคลินิก คณะ
เทคนิคการแพทย มหาวิทยาลัยขอนแกน, ขอนแกน, 2530
4. ยุทธนา ลีลาศวัฒนกุล, คูมือการเขียนโปรแกรมและงาน Visual C++ 6.0 ฉบับ
โปรแกรมเมอร, กรุงเทพฯ : อินโฟเพรส, 2544. 752 หนา
5. Rafael C. Gonzalez and Richard E. Woods, Digital Image Processing, Addision
Weslay,1992.
6. Nawapak Eua-Anant, A novel boundary extraction algorithm based on a vector
image model, Iowa State University, 1996.
7. John Hertz,Anders Kronh and Richard G.Palmer, Introduction to the theory of
neural computation, Addision Weslay,1991.
8. http://www.leeds.ac.uk/acb/slides/Abergavenny/Cellcount.ppt
9. http://www.ph.tn.tudelft.nl/Courses/FIP/frames/fip-Segmenta.html
10. http://gear.kku.ac.th/~nawapak/Presentation/Biomed2002.ppt
11. http://www.codeproject.com

You might also like