
สารบัญ:
- ขั้นตอนที่ 1: การจัดระเบียบข้อมูลแมมโมแกรม
- ขั้นตอนที่ 2: การประมวลผลภาพ
- ขั้นตอนที่ 3: รหัสเกณฑ์
- ขั้นตอนที่ 4: การค้นหาสิ่งผิดปกติสำหรับภาพไบนารีแต่ละภาพ
- ขั้นตอนที่ 5: การพล็อตตำแหน่งมวลและขนาดที่วินิจฉัยเพื่อการเปรียบเทียบภาพ
- ขั้นตอนที่ 6: การใช้วิธีการเปรียบเทียบที่สอง
- ขั้นตอนที่ 7: การวิเคราะห์ข้อมูลที่รวบรวม
- ขั้นตอนที่ 8: สร้างลักษณนามของคุณเอง
- ขั้นตอนที่ 9: การปรับปรุง? ความคิดใด ๆ?
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-23 15:12

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

สิ่งแรกที่ฉันรู้ว่าต้องจัดการคือการจัดระเบียบข้อมูลอย่างชัดเจน รัดกุม และเข้าถึงได้ นี่คือตัวแปรที่ฉันดึงมาจากฐานข้อมูล mini-MIAS ของแมมโมแกรม ฉันสร้างสองอาร์เรย์ หนึ่งประกอบด้วย 4 คอลัมน์:
- หมายเลขภาพ:
- x พิกัดมวล
- y พิกัดมวล
- รัศมีมวล: (สิ่งนี้กำหนดขนาดโดยประมาณสำหรับมวล
อาร์เรย์ที่สองมีข้อมูลการจัดหมวดหมู่:
- ประเภทของเนื้อเยื่อพื้นหลัง: ไขมัน (F), ต่อมไขมัน (G), หนาแน่น (D)
- คำอธิบายของมวล: Well-defined (CIRC), spiculated (SPIC), ill define other (MISC) ความผิดเพี้ยนทางสถาปัตยกรรม (ARCH), Asymmetry (ASYM), Normal (NORM)
- การวินิจฉัย: อ่อนโยน (B), ร้าย (M)
เนื่องจากเป้าหมายของโครงการนี้คือการกำหนดเกณฑ์ที่ดีที่สุดสำหรับเนื้อเยื่อพื้นหลังแต่ละประเภท ข้อมูลทั้งหมดจึงไม่จำเป็น อย่างไรก็ตาม คุณสามารถขยายโครงการของคุณเพื่อรวมการวิเคราะห์พื้นผิวและทดสอบตัวแยกประเภทของคุณกับคำอธิบายจำนวนมากที่รู้จัก
หมายเหตุด้านข้าง: ฐานข้อมูลที่ฉันได้รับการวินิจฉัย Mammogram Images ได้จัดระเบียบข้อมูลเกี่ยวกับแมมโมแกรมแต่ละรายการในไฟล์ข้อความแยกจากรูปภาพ เป็นเรื่องยากสำหรับฉันที่จะดึงข้อมูลจากไฟล์ข้อความและจัดระเบียบเป็นรูปแบบอาร์เรย์ แต่ลิงก์ต่อไปนี้มีประโยชน์มากในการค้นหาข้อมูลทั้งหมด หรือเพียงแค่ปรับโค้ดที่ฉันวางด้านบนเพื่อวัตถุประสงค์ของคุณ
รูปแบบไฟล์แมมโมแกรม:mdb001 G CIRC B 535 425 197
mdb002 G CIRC B 522 280 69
วิธีใช้ TextScan: https://www.mathworks.com/help/matlab/ref/textsca…ฐานข้อมูลแมมโมแกรม:
ขั้นตอนที่ 2: การประมวลผลภาพ

สิ่งที่สองที่เกิดขึ้นเมื่อฉันกำลังหาวิธีระบุฝูงก็คือสำหรับการตรวจแมมโมแกรมที่ผิดปกติจำนวนมาก ฉันไม่สามารถมองเห็นได้อย่างชัดเจนว่าความผิดปกตินั้นอยู่ที่ไหนหรือมีขนาดใหญ่เพียงใด เห็นได้ชัดว่าฉันไม่ใช่นักรังสีวิทยาที่มีประสบการณ์ อย่างไรก็ตาม วิธีที่ง่ายที่สุดในการค้นหาสิ่งผิดปกติ (ตามการค้นหาโดย Google ที่ใช้เวลานานของฉัน) คือการดูที่ความเข้มข้นของพื้นที่สว่างและมืด ฉันใช้ฟังก์ชัน adapthisteq เป็นหลักเพื่อเพิ่มคอนทราสต์ของรูปภาพ จากนั้นจึงสร้างอิมบินาเรซเพื่อแปลงรูปภาพเป็นรูปภาพไบนารีเพื่อทดลองกับระดับเกณฑ์ต่างๆ
- adapthisteq: ฟังก์ชันนี้แปลงค่าความเข้มของภาพระดับสีเทาและ rgb โดยใช้การปรับสมดุลฮิสโตแกรมแบบจำกัดความเปรียบต่างแบบจำกัดคอนทราสต์ กล่าวคือจะปรับฮิสโตแกรมของค่าความเข้มเป็นประเภทการแจกแจงที่ระบุ ลิงค์คณิตศาสตร์สำหรับฟังก์ชันนี้แนบมาด้านล่างสำหรับการอ่านเพิ่มเติม
- imbinarize: สร้างภาพไบนารีจากภาพมาตราส่วนสีเทาโดยกำหนดพิกเซลทั้งหมดที่อยู่เหนือความเข้มที่แน่นอนเป็น 1 วินาที และพิกเซลที่ต่ำกว่าค่านั้นเป็น 0 ฉันใช้ฟังก์ชันนี้เพื่อทดสอบเกณฑ์ที่เหมาะสมที่สุดเพื่อลดสัญญาณรบกวนของเนื้อเยื่อพื้นหลัง
ขั้นตอนที่ 3: รหัสเกณฑ์

A for loop ใช้เพื่อแยกการตรวจแมมโมแกรมด้วยเกณฑ์ที่แตกต่างกัน เพื่อให้ได้มุมมองภาพที่ใหญ่ขึ้น for loop จะมีโค้ดจากขั้นตอนที่ 3 ถึงขั้นตอนที่ 7 ดังนั้นแต่ละภาพไบนารีจะถูกวิเคราะห์หาความผิดปกติ นอกจากนี้ for loop ยังถูกห่อหุ้มด้วย for loop อื่นที่นำเข้าภาพแมมโมแกรมใหม่จากฐานข้อมูลในการวนซ้ำแต่ละครั้ง
ขั้นตอนที่ 4: การค้นหาสิ่งผิดปกติสำหรับภาพไบนารีแต่ละภาพ


ฉันประมวลผลภาพไบนารีเพิ่มเติมโดยใช้ฟังก์ชัน strel ร่วมกับ imopen เพื่อขจัดสัญญาณรบกวนพื้นหลัง ภาพไบนารีจากขั้นตอนก่อนหน้าจะถูกกลับด้านและกรองโดยใช้พื้นที่ใกล้เคียงที่กำหนดโดย SE จากนั้นฉันใช้ bwlabel เพื่อติดป้ายกำกับพื้นที่ใดๆ ที่มีพิกเซลเชื่อมต่ออย่างน้อย 8 พิกเซล
ฟังก์ชันอุปกรณ์ประกอบฉากภูมิภาคถูกใช้เพื่อค้นหาคุณสมบัติเซนทรอยด์และพื้นที่ของแต่ละจุดที่ระบุโดย bwlabel
จากนั้นระบุจุดทั้งหมดที่ใหญ่กว่า 500 พิกเซลโดยใช้ ismember เซ็นทรอยด์สำหรับจุดที่ระบุถูกพล็อตบนรูปภาพที่แสดงเฉพาะจุดที่ใหญ่กว่าในพื้นที่ 500. Area Identified = ismember(Labeled, indicies(sorted Areas>500)); จุด = ระบุ>0;
ขั้นตอนที่ 5: การพล็อตตำแหน่งมวลและขนาดที่วินิจฉัยเพื่อการเปรียบเทียบภาพ



ฉันต้องการดูว่าจุดที่ bwlabel พบนั้นถูกต้องหรือไม่ ฉันทำสิ่งนี้ในสองวิธี อันดับแรก ฉันวิเคราะห์ความถูกต้องของตัวแยกประเภทโดยทำการเปรียบเทียบด้วยภาพ ฉันเพียงแค่พล็อตขนาดและตำแหน่งของความผิดปกติ (วงกลมสีแดง) และตำแหน่งที่กำหนดโดยรหัส (สีน้ำเงิน x) บนภาพแมมโมแกรมที่ประมวลผลล่วงหน้า ภาพหกภาพด้านบนแสดงผลของการเพิ่มค่าเกณฑ์ระดับสีเทา
ขั้นตอนที่ 6: การใช้วิธีการเปรียบเทียบที่สอง

วิธีที่สองที่ฉันทดสอบตัวแยกประเภทและค่าเกณฑ์คือโดยการพิจารณาว่าตำแหน่งที่ตัวแยกประเภทพบอยู่ภายในระยะที่กำหนดจากพิกัดความผิดปกติที่ได้รับการวินิจฉัยหรือไม่ ฉันบันทึกเกณฑ์ที่จุดที่ระบุอย่างน้อยหนึ่งจุดอยู่ภายใน 1.5*r จากความผิดปกติที่ทราบไปยังไฟล์ข้อความแยกต่างหากที่เรียกว่าข้อมูลแมมโมแกรม จุดประสงค์คือเพื่อค้นหาเกณฑ์ขั้นต่ำที่จำเป็นสำหรับตัวแยกประเภทเพื่อระบุความผิดปกติ
ขั้นตอนที่ 7: การวิเคราะห์ข้อมูลที่รวบรวม


ฉันรันโปรแกรมบนภาพแมมโมแกรมที่ผิดปกติทั้งหมด และเหลือไฟล์ข้อความขนาดใหญ่ของข้อมูล เพื่อหาเกณฑ์ที่ดีที่สุดสำหรับเนื้อเยื่อแต่ละประเภท ฉันได้จัดระเบียบข้อมูลตามประเภทเนื้อเยื่อและวางแผนฮิสโตแกรมของค่าเกณฑ์สำหรับเนื้อเยื่อแต่ละประเภท ค่าเกณฑ์ที่เหมาะสมถูกกำหนดโดยเกณฑ์ที่ให้ผลลัพธ์ที่แม่นยำที่สุดสำหรับเนื้อเยื่อแต่ละประเภท ฉันบันทึกข้อมูลนี้เพื่ออัปโหลดไปยังตัวแยกประเภท
ขั้นตอนที่ 8: สร้างลักษณนามของคุณเอง




หลังจากที่ฉันพบค่าเกณฑ์ที่เหมาะสมที่สุดสำหรับเนื้อเยื่อแต่ละประเภทแล้ว ฉันแก้ไขรหัสเดิมของฉันเพื่อให้ผู้ใช้ป้อนหมายเลขภาพและประเภทเนื้อเยื่อเพื่อเลือกเกณฑ์สำหรับภาพแมมโมแกรม จากนั้นฉันก็พล็อตตำแหน่งแมมโมแกรมที่ได้รับการวินิจฉัยด้วยตำแหน่งที่พบในภาพแมมโมแกรมต้นฉบับ ฉันต้องการทำให้เรื่องนี้สนุกยิ่งขึ้น ดังนั้นฉันจึงตั้งโปรแกรมฟังก์ชันให้ครอบตัดวงกลมรอบ ROI ผู้ใช้จะได้รับคำแนะนำให้เลือกจุดศูนย์กลางและหลายจุดที่ครอบคลุม ROI ได้ดีที่สุด ฉันแนบไฟล์ matlab ทั้งสองไว้ที่นี่
ขั้นตอนที่ 9: การปรับปรุง? ความคิดใด ๆ?
ขณะที่ฉันเขียนคำแนะนำนี้ ฉันเริ่มเห็นการปรับปรุงหลายอย่างที่ฉันสามารถทำได้กับตัวแยกประเภท เช่น ค้นหาวิธีแยกแยะระหว่างมวลประเภทต่างๆ ที่ระบุโดยอิงจากการวิเคราะห์พื้นผิว หรือปรับปรุงการทดสอบส่วนความแม่นยำของโครงการ SandBoxProject ไฟล์. เนื่องจากนี่เป็นโครงการที่มีกำหนดเส้นตาย ฉันจึงต้องหยุดที่ไหนสักแห่ง แต่ฉันหวังว่าฉันจะสามารถใช้ทักษะการประมวลผลภาพที่ฉันได้เรียนรู้ในแอปพลิเคชันอื่นๆ นอกจากนี้ ฉันยังแนบไฟล์ที่ใช้ในการประมวลผลภาพแมมโมแกรมที่ผิดปกติทั้งหมดเป็นชุด
แนะนำ:
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: 5 ขั้นตอน

การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: การตวัดเป็นวิธีง่ายๆ ในการสร้างเกม โดยเฉพาะอย่างยิ่งเกมปริศนา นิยายภาพ หรือเกมผจญภัย
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: 3 ขั้นตอน

การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: ในคำแนะนำนี้ เราจะทำการตรวจจับใบหน้าบน Raspberry Pi 4 ด้วย Shunya O/S โดยใช้ Shunyaface Library Shunyaface เป็นห้องสมุดจดจำใบหน้า/ตรวจจับใบหน้า โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อให้เกิดความเร็วในการตรวจจับและจดจำได้เร็วที่สุดด้วย
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: 3 ขั้นตอน

วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: ในบทช่วยสอนนี้ ฉันจะแสดงขั้นตอนสำคัญในการติดตั้งปลั๊กอิน WordPress ให้กับเว็บไซต์ของคุณ โดยทั่วไป คุณสามารถติดตั้งปลั๊กอินได้สองวิธี วิธีแรกคือผ่าน ftp หรือผ่าน cpanel แต่ฉันจะไม่แสดงมันเพราะมันสอดคล้องกับ
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): 8 ขั้นตอน

การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): ตัวแปลงสัญญาณเสียงล้ำเสียง L298N Dc ตัวเมียอะแดปเตอร์จ่ายไฟพร้อมขา DC ตัวผู้ Arduino UNOBreadboardวิธีการทำงาน: ก่อนอื่น คุณอัปโหลดรหัสไปยัง Arduino Uno (เป็นไมโครคอนโทรลเลอร์ที่ติดตั้งดิจิตอล และพอร์ตแอนะล็อกเพื่อแปลงรหัส (C++)
เครื่อง Rube Goldberg 11 ขั้นตอน: 8 ขั้นตอน

เครื่อง 11 Step Rube Goldberg: โครงการนี้เป็นเครื่อง 11 Step Rube Goldberg ซึ่งออกแบบมาเพื่อสร้างงานง่ายๆ ในรูปแบบที่ซับซ้อน งานของโครงการนี้คือการจับสบู่ก้อนหนึ่ง