สารบัญ:

การจดจำดวงดาวโดยใช้ Computer Vision (OpenCV): 11 ขั้นตอน (พร้อมรูปภาพ)
การจดจำดวงดาวโดยใช้ Computer Vision (OpenCV): 11 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: การจดจำดวงดาวโดยใช้ Computer Vision (OpenCV): 11 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: การจดจำดวงดาวโดยใช้ Computer Vision (OpenCV): 11 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Morphological Transformation (Erosion Dilation Opening & Closing) OpenCV Operations 2024, พฤศจิกายน
Anonim
การจดจำดาวโดยใช้ Computer Vision (OpenCV)
การจดจำดาวโดยใช้ Computer Vision (OpenCV)

คำแนะนำนี้จะอธิบายให้คุณทราบถึงวิธีสร้างโปรแกรมคอมพิวเตอร์วิทัศน์เพื่อระบุรูปแบบดาวในภาพโดยอัตโนมัติ วิธีนี้ใช้ไลบรารี OpenCV (Open-Source Computer Vision) เพื่อสร้างชุดของ HAAR cascades ที่ผ่านการฝึกอบรมซึ่งสามารถใช้เพื่อจดจำรูปแบบดาวที่เฉพาะเจาะจงได้ แม้ว่าคู่มือนี้จะอยู่ในบริบทของการรู้จำรูปแบบดาว แต่กระบวนการ OpenCV ที่ฉันอธิบายก็สามารถนำไปใช้กับแอปพลิเคชันอื่นๆ ได้เช่นกัน ดังนั้นหวังว่าจะมีประโยชน์!

โครงการสรุปไว้ในวิดีโอนี้:

เหตุใดฉันจึงเขียนคำแนะนำนี้

  1. วิธีการระบุรูปแบบดาวที่ฉันกำลังพัฒนา ฉันเชื่อว่ามีศักยภาพที่จะนำไปใช้กับโครงการดาราศาสตร์สมัครเล่นที่หลากหลาย ไม่ว่าจะเป็นการวางแนวด้วยกล้องโทรทรรศน์ การจำแนกภาพอัตโนมัติ หรือแม้แต่เซ็นเซอร์ดวงดาวบนโอเพ่นซอร์สหรือ CubeSat ของมือสมัครเล่น
  2. มีคำแนะนำ OpenCV ที่ดีมากมายที่นี่ แต่ถึงกระนั้นฉันก็พบว่ามันเป็นกระบวนการที่ยากมากในการเรียนรู้ในตอนแรก ดังนั้นฉันหวังว่าคู่มือนี้จะเป็นข้อมูลอ้างอิงที่ดีสำหรับคนอื่นๆ ที่ต้องการฝึกตัวแยกประเภท HAAR สำหรับ OpenCV (ไม่จำเป็นต้องทำกับ ดาราศาสตร์อาจจะ!).
  3. ฉันไม่ใช่โปรแกรมเมอร์ที่ผ่านการฝึกอบรมมาก่อน ดังนั้นโครงการนี้จึงทำให้ฉันเข้าใจมากขึ้น หวังว่าโดยการเขียนคำแนะนำอื่น ๆ ที่มีประสบการณ์มากขึ้นผู้สร้างจะได้รับแรงบันดาลใจในการทำงานกับแนวคิดนี้และมีส่วนร่วมใน GitHub และคำแนะนำนี้ผ่านทางความคิดเห็นในหน้านี้
  4. วิธีการทางดาราศาสตร์สมัครเล่นและการปฐมนิเทศเป็นสิ่งที่ฉันสนใจ ดูคำแนะนำก่อนหน้าของฉันที่มี Arduino Star-Finder สำหรับกล้องโทรทรรศน์

ภาพหน้าปกของคำแนะนำนี้เป็นแนวคิดการออกแบบ 3U CubeSat ที่ฉันเข้าร่วมในการออกแบบ ฉันใช้มันเพื่อแสดงคำแนะนำนี้เนื่องจากแอปพลิเคชันดั้งเดิมของระบบการรู้จำคอมพิวเตอร์วิทัศน์สตาร์เพื่อใช้เป็นเซ็นเซอร์ปฐมนิเทศสำหรับ CubeSats ที่มือสมัครเล่นโดยใช้กล้อง Raspberry Pi V2 มีแอปพลิเคชั่นอื่น ๆ ที่เป็นไปได้มากมายในการจดจำดาวด้วยคอมพิวเตอร์วิทัศน์ที่ฉันเชื่อว่า แต่ฉันคิดว่านี่ยอดเยี่ยมที่สุด!

อภิธานศัพท์เล็ก ๆ:

การเรียนรู้เกี่ยวกับคอมพิวเตอร์วิทัศน์จะช้าลงด้วยคำศัพท์เฉพาะทางจำนวนมหาศาลที่ใช้ ดังนั้นฉันจะนิยามคำศัพท์บางคำให้เราที่นี่:

Cascade - ตัวแยกประเภทที่ได้รับการฝึกฝนเพื่อระบุวัตถุเป้าหมายที่เฉพาะเจาะจง

Fiducial Marker - เครื่องหมายเพิ่มจุดอ้างอิงภาพไปยังรูปภาพ

HAAR - คุณลักษณะคล้าย Haar เป็นคุณลักษณะรูปภาพประเภทหนึ่งที่ใช้สำหรับการฝึกอบรมตัวแยกประเภท

OpenCV - Open Source Computer Vision ห้องสมุดเครื่องมือคอมพิวเตอร์วิทัศน์

Stellarium - ซอฟต์แวร์โอเพ่นซอร์สดาราศาสตร์

ขั้นตอนที่ 1: ข้อกำหนด

OpenCV เป็นไลบรารีบน Linux ดังนั้นแม้ว่าจะใช้งานได้ดีบน Windows แต่คุณจะมีเวลาใช้งานได้ง่ายขึ้นมากในสภาพแวดล้อม Linux (รับสิ่งนี้จากฉันและใช้เวลาหลายวันในการพยายามทำให้มันทำงานอย่างเต็มที่ วินโดว์!). จากการทดลอง ฉันดาวน์โหลดและรัน OpenCV บน Raspberry Pi 3B+ ซึ่งประสบความสำเร็จ แม้ว่าการฝึกตัวแยกประเภทจะเป็นกระบวนการที่ใช้ RAM มาก ดังนั้นหากคุณต้องการทำความเร็วเท่าใดก็ได้ เส้นทางที่แนะนำคือจ้าง Linux Virtual Server (ซึ่งจริง ๆ แล้วราคาถูกอย่างน่าประหลาดใจ) เป็นเวลาสองสามวัน/สัปดาห์/เดือน และใช้เป็นสภาพแวดล้อมเฉพาะสำหรับดำเนินการฝึกอบรมตัวแยกประเภท คุณจะสามารถควบคุมเซิร์ฟเวอร์จากพีซีที่ใช้ Windows โดยใช้ไคลเอ็นต์ SSH เช่น Putty เมื่อคาสเคดได้รับการฝึกฝนโดยใช้ VPS พวกเขาสามารถดาวน์โหลดไปยังพีซี Windows ของคุณ และสามารถใช้ Python เพื่อรันโปรแกรมการจดจำภาพในสภาพแวดล้อม Windows

เซิร์ฟเวอร์เสมือนของลินุกซ์:

จำเป็นต้องใช้ Linux Virtual Server (VPS) เพื่อดำเนินการตามกระบวนการฝึกอบรม HAAR cascade ตอนแรกฉันจ้างเซิร์ฟเวอร์ที่มี RAM 8GB และ Ubuntu 16.04.6 (LTS) x64 และต่อมาเป็นเซิร์ฟเวอร์ที่สองเพื่อเพิ่มอัตราเป็นสองเท่าที่ฉันสามารถฝึกการเรียงซ้อนได้ แม้ว่าคุณจะต้องการอย่างน้อยหนึ่งเซิร์ฟเวอร์ก็ตาม

ซอฟต์แวร์:

  • Stellarium - นี่คือซอฟต์แวร์ท้องฟ้าจำลอง/ดาราศาสตร์เสมือนจริง ซึ่งใช้ได้ฟรี โดยจะใช้รวบรวมภาพดาวจำลองเพื่อใช้ในการทดสอบ
  • Putty - นี่คือไคลเอนต์ SSH ที่ใช้ในการควบคุม VPS ผ่านบรรทัดคำสั่ง
  • WinSCP - ใช้สำหรับถ่ายโอนไฟล์จากพีซี Windows

ขั้นตอนที่ 2: ตั้งค่า VPS

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

โดยคร่าวๆ กระบวนการนี้เกี่ยวข้องกับ:

  1. การสร้างเซิร์ฟเวอร์ Linux ด้วยเวอร์ชัน Ubuntu ที่ถูกต้อง
  2. การอัพเกรดและอัปเดตเซิร์ฟเวอร์
  3. การสร้างไดเร็กทอรีเวิร์กสเปซซึ่งติดตั้ง OpenCV
  4. การติดตั้งสิ่งจำเป็นบางอย่าง เช่น คอมไพเลอร์ ไลบรารีต่างๆ และการโยง Python

หลังจากขั้นตอนนี้ คุณก็พร้อมที่จะเริ่มเตรียมตัวสำหรับกระบวนการฝึกอบรมแล้ว

ขั้นตอนที่ 3: กระบวนการ

กระบวนการทั้งหมดของการมองเห็นด้วยคอมพิวเตอร์โดยใช้การเรียงซ้อน HAAR นั้นค่อนข้างสับสนในตอนแรก ดังนั้นขั้นตอนนี้จะอธิบายตรรกะในรายละเอียดเพิ่มเติมเล็กน้อย:

กระบวนการพื้นฐาน

  1. มีชุดข้อมูลรูปภาพเชิงลบซึ่งประกอบด้วยรูปภาพหลายพันรูปที่ไม่มีวัตถุที่สนใจ สิ่งนี้จะต้องอัปโหลดไปยัง VPS
  2. มีการสร้างภาพเชิงบวกเดียวที่มีวัตถุที่น่าสนใจ สิ่งนี้จะต้องอัปโหลดไปยัง VPS ด้วย
  3. ภาพบวกภาพเดียวบิดเบี้ยว บิดเบี้ยว หมุน ฯลฯ โดยชุดของพารามิเตอร์ที่เลือกและซ้อนทับกับการเลือกภาพเชิงลบ นี่เป็นวิธีปลอมในการสร้างชุดข้อมูลเชิงบวกขนาดใหญ่จากภาพเดียว (สำหรับแอปพลิเคชันอื่นๆ ในโลกแห่งความเป็นจริง เช่น การระบุแมว คุณสามารถใช้ภาพแมวได้หลายพันภาพ แต่วิธีนี้อาจไม่เหมาะสมเสมอไปหากคุณไม่มีภาพเชิงบวกจำนวนมากเช่นนี้ วิธีการประดิษฐ์ที่ใช้ที่นี่ จะมีประสิทธิภาพน้อยลง แต่เป็นตัวเลือกเดียวสำหรับกรณีการใช้งานเช่นนี้)
  4. มีการดำเนินการกระบวนการฝึกอบรมซึ่งทำงานเป็นขั้นตอน แต่ละขั้นตอนจะฝึกการเรียงซ้อนเพื่อระบุคุณสมบัติประเภท HAAR ที่แตกต่างกันภายในชุดภาพ แต่ละขั้นตอนใช้เวลานานกว่าจะเสร็จสมบูรณ์แบบทวีคูณ และประสิทธิภาพของตัวแยกประเภทจะเพิ่มขึ้นในแต่ละครั้ง (คุณสามารถฝึกมากเกินไปได้เช่นกัน!)
  5. น้ำตกที่ผ่านการฝึกอบรมเพียงแห่งเดียวจะสามารถค้นหาวัตถุเป้าหมายได้เพียงชิ้นเดียว หากคุณต้องการระบุวัตถุที่ไม่ซ้ำกันหลายรายการ คุณจะต้องมีน้ำตกที่ได้รับการฝึกอบรมสำหรับแต่ละรายการ ในกรณีนี้ ฉันได้ฝึกน้ำตกที่แตกต่างกันประมาณ 50 แห่งสำหรับลายดาวที่มีเอกลักษณ์เฉพาะ เพื่อสร้างฉากที่สามารถครอบคลุมซีเลสเชียลซีเลสเชียลเหนือได้
  6. สุดท้าย ใช้โปรแกรมตรวจจับที่รันแต่ละชุดของชุดกับภาพที่ป้อนเข้า น้ำตกจะมองหาวัตถุเป้าหมายที่กำหนดภายในภาพที่ป้อน
  7. หากสำเร็จ วัตถุเป้าหมายจะถูกระบุภายในภาพที่ป้อน

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

ขั้นตอนที่ 4: ด้านลบและด้านบวก

เชิงลบ

สิ่งสำคัญจริงๆ ของการฝึกอบรมคาสเคดคือการมีชุดข้อมูลภาพเชิงลบที่มีขนาดใหญ่ที่สุดเท่าที่จะเป็นไปได้ เรากำลังพูดถึงภาพหลายพันภาพ ไม่สำคัญหรอกว่ามีอะไรอยู่บ้าง จุดมุ่งหมายคือการให้ข้อมูลภาพที่หลากหลายเท่านั้น โฟลเดอร์ Classifier Training มีชุดข้อมูลรูปภาพเชิงลบต่างๆ ที่ฉันรวบรวมไว้ ในขั้นต้น ภาพเหล่านี้ประกอบด้วยภาพสนามดาวจำลองที่รวบรวมมาจาก Stellarium เท่านั้น แต่ต่อมาผมได้เพิ่มชุดข้อมูลด้วยภาพสุ่มให้มากที่สุดเท่าที่จะหาได้ (ใช่ รวมถึงภาพถ่ายช่วงวันหยุดด้วย…) ชุดข้อมูลที่ใหญ่ที่สุดมีรูปภาพเกือบ 9000 รูป ซึ่งใหญ่ที่สุดที่ฉันเคยสร้างมา เมื่อใช้สิ่งนี้จะช่วยให้คุณไม่ต้องคอมไพล์เอง

แง่บวก

ภาพเชิงบวก (นั่นคือรูปแบบดาวเป้าหมายที่น้ำตกจะได้รับการฝึกให้รู้จัก) เริ่มต้นจากภาพหน้าจอของรูปแบบดาวใน Stellarium จากนั้นโปรแกรมหลามจะระบุดาวที่สว่างที่สุดในภาพ และใส่เครื่องหมาย (จะอธิบายในภายหลังในคำแนะนำนี้) ลงบนตำแหน่งของดาวเหล่านี้ ภาพนี้จะถูกย่อให้เหลือ 50x50 พิกเซล นี่เป็นขนาดเล็ก แต่เวลาการฝึกอบรมที่จำเป็นสำหรับการเรียงซ้อนจะเพิ่มขึ้นอย่างมากเมื่อขนาดนี้เพิ่มขึ้น ดังนั้นจึงเป็นการประนีประนอมที่ดีระหว่างคุณภาพและเวลา

ขั้นตอนที่ 5: การควบคุม Stellarium

การควบคุม Stellarium
การควบคุม Stellarium
การควบคุม Stellarium
การควบคุม Stellarium

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

thesis_4 และ thesis_5 จับภาพได้ประมาณ 2,000 ภาพในแต่ละซีกโลกเหนือและใต้ตามลำดับ สิ่งเหล่านี้ถูกใช้เพื่อสร้างฐานข้อมูลของภาพเชิงลบ เพื่อฝึกฝนภาพเชิงบวก ความแตกต่างระหว่างทิศเหนือและทิศใต้เป็นวิธีง่ายๆ ในการตรวจสอบให้แน่ใจว่ารูปแบบดาวเป้าหมาย (บวก) จะไม่ปรากฏในชุดข้อมูลเชิงลบโดยการฝึกรูปแบบดาวในซีกโลกเหนือกับชุดข้อมูลภาพซีกโลกใต้และในทางกลับกัน (หากมีภาพบวกอยู่ภายในชุดข้อมูลภาพเชิงลบ ก็จะส่งผลต่อคุณภาพของตัวแยกประเภท)

thesis_setup ก็มีประโยชน์เช่นกัน - การตั้งค่านี้ทำให้ Stellarium เหมาะสมสำหรับการถ่ายภาพ - รูปภาพที่ใช้จำลองมุมมองจากอวกาศ มันดำเนินการต่างๆ เช่น การซ่อนเมนู เส้นตาราง ป้ายกำกับ ฯลฯ โดยอัตโนมัติเพื่อช่วยให้คุณประหยัดเวลาในการจับภาพทุกครั้ง

ขั้นตอนที่ 6: Rocket Man

มนุษย์จรวด
มนุษย์จรวด

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

เอลตัน

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

ขั้นตอนที่ 7: เครื่องหมายประจำตัว

ฟิดูเชียล มาร์กเกอร์
ฟิดูเชียล มาร์กเกอร์

แม้ว่า 'Eltons' จะพิสูจน์ทฤษฎีนี้แล้ว แต่ฉันต้องการเครื่องหมายที่มีสมมาตรในการหมุนเต็มที่ เพื่อให้รูปแบบดาวปรากฏเหมือนกันไม่ว่าจะนำเสนอในทิศทางใดก็ตาม ฉันทดสอบเครื่องหมายหลายประเภท และพบว่าประเภทที่ด้านล่างขวามีประสิทธิภาพมากที่สุด โดยใช้วงแหวนสีดำและสีขาวที่ตัดกัน โปรแกรมหลามที่นำเสนอในโฟลเดอร์บวกของ GitHub repo แสดงให้เห็นว่ามีการระบุดาวที่สว่างที่สุดในภาพนั้นอย่างไร และเครื่องหมายเหล่านี้จะซ้อนทับในตำแหน่งเหล่านั้นโดยอัตโนมัติ ตอนนี้เราได้สร้างการแสดงรูปแบบดาวหลักที่สามารถฝึกฝนได้

ขั้นตอนที่ 8: การใช้ Cascades

การใช้น้ำตก
การใช้น้ำตก

เมื่อคุณได้ฝึกชุดน้ำตกแล้ว คุณจำเป็นต้องรู้วิธีใช้เพื่อระบุวัตถุในภาพ!

ดูโฟลเดอร์ Star Identification ของ GitHub ซึ่งคุณจะพบโปรแกรม cascade_test19.py โปรแกรมที่มีชื่อเรียกง่ายนี้ใช้ชุดการเรียงซ้อนจากโฟลเดอร์ที่กำหนด และรันทั้งหมดเทียบกับอิมเมจอินพุต และรายงานเกี่ยวกับการตรวจจับที่ทำ ฟังก์ชัน 'detectMultiScale' เป็นแกนหลักของสิ่งนี้ และต้องใช้อาร์กิวเมนต์ที่หลากหลายที่กำหนดกระบวนการตรวจจับ การเปลี่ยนแปลงเหล่านี้มีความสำคัญต่อประสิทธิภาพของตัวแยกประเภทการเรียงซ้อน และการอภิปรายเพิ่มเติมเกี่ยวกับสิ่งนี้สามารถพบได้ในขั้นตอนต่อไปนี้ ซึ่งเราจะพิจารณาถึงวิธีกำจัดผลบวกที่ผิดพลาด

สามารถใช้ในระบบการวางแนวดาวเทียมโดยเชื่อมโยงค่าพิกเซลที่อยู่ตรงกลางของกล่องขอบกับพิกัดท้องฟ้า Ra/Dec ของการกระจัดกระจายของดาวที่ระบุ จากนั้นสัมพันธ์กับค่านี้กับการกระจัดเชิงมุมจากศูนย์กลางของภาพ (กล้อง แกน). จากนี้ โดยใช้ความเข้าใจเกี่ยวกับการบิดเบือนของเลนส์ (โดยประมาณกับการฉายภาพแบบโนโมนิก) มุมของดาวเทียมจะพบได้จากการระบุค่าบวกเพียงสองค่า

ขั้นตอนที่ 9: วิธีคิดบวกเกี่ยวกับผลบวกลวง

วิธีคิดบวกเกี่ยวกับผลบวกลวง
วิธีคิดบวกเกี่ยวกับผลบวกลวง
วิธีคิดบวกเกี่ยวกับผลบวกลวง
วิธีคิดบวกเกี่ยวกับผลบวกลวง

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

โปรแกรม cascade_test19.py ภายในโฟลเดอร์ Star Identification ของ GitHub repo ใช้สองวิธีในการจัดเรียงผลลัพธ์ ประการแรก ฟังก์ชัน detectMultiScale ตั้งค่าขนาดผลลัพธ์ต่ำสุดและสูงสุดที่สามารถพบได้ ซึ่งสมเหตุสมผล เนื่องจากขนาดโดยประมาณของรูปแบบดาวเป้าหมายภายในหน้าต่าง (สำหรับเลนส์และกำลังขยายที่กำหนด - ภาพจำลอง Stellarium ของฉันใช้คุณสมบัติของ กล้อง Raspberry Pi V2) เป็นที่รู้จัก ประการที่สอง รหัสจะเลือกผลลัพธ์ที่มีกรอบขอบเขตที่ใหญ่ที่สุด (ภายในขีดจำกัดก่อนหน้า) ในการทดสอบพบว่าเป็นผลบวกที่แท้จริง ประการที่สาม โปรแกรมกำหนด 'levelWeights' ขั้นต่ำ (อย่างมีประสิทธิภาพ 'ค่าความเชื่อมั่น') ที่จำเป็นสำหรับถือว่า ID นี้เป็นผลบวกที่แท้จริง ด้วยวิธีนี้ น้ำตกมีประสิทธิภาพในการค้นหาผลลัพธ์ที่ถูกต้อง

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

ขั้นตอนที่ 10: อภิปราย

การอภิปราย
การอภิปราย
การอภิปราย
การอภิปราย
การอภิปราย
การอภิปราย

พื้นที่สำหรับการปรับปรุง

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

มุม - นี่เป็นพื้นที่ที่ซับซ้อน แนวคิดที่ว่าผลลัพธ์ของตัวแยกประเภทต้องไม่เปลี่ยนแปลงแบบหมุนเวียน กล่าวคือ ความน่าเชื่อถือควรระบุรูปแบบดาวเป้าหมายโดยไม่คำนึงถึงมุมที่นำเสนอภาพที่มีลายดาวเป้าหมาย น้ำตกที่ฝึกโดยใช้ภาพที่ป้อนเข้าในทิศทางเดียวจะไม่สามารถระบุภาพนั้นในการวางแนวแบบสุ่มได้ ดังนั้นจึงต้องนำความแปรปรวนของมุมภาพบวกมาใช้ในกระบวนการฝึกอบรมเพื่อฝึกน้ำตกที่สามารถรับช่วงของมุมอินพุตได้ พารามิเตอร์ 'maxzangle' ในคำสั่งการฝึกคาสเคดใช้อาร์กิวเมนต์เป็นเรเดียน ซึ่งควบคุมขีดจำกัดของมุมที่อิมเมจบวกอินพุตจะถูกซ้อนทับบนรูปภาพเนกาทีฟที่ให้มา ดังนั้น ชุดอิมเมจเชิงบวกที่ได้จะมีช่วงของการวางแนวของ ภาพบวก อย่างไรก็ตาม เมื่อ maxzangle นี้เพิ่มขึ้น อัตราส่วนการยอมรับ (ในวงกว้าง คุณภาพ) ของน้ำตกจะลดลงอย่างรวดเร็ว ฉันเชื่อว่าวิธีแก้ปัญหาคือการฝึกน้ำตกโดยใช้ฐานข้อมูลภาพเชิงลบที่มากกว่าสิ่งที่ฉันใช้ เพื่อให้แน่ใจว่าสามารถสร้างตัวแยกประเภทการเรียงซ้อนคุณภาพดีได้ แม้จะรวมเอาการวางแนวขนาดใหญ่

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

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

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

ขั้นตอนที่ 11: คำสุดท้าย

คำสุดท้าย
คำสุดท้าย

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

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

ความท้าทายในอวกาศ
ความท้าทายในอวกาศ
ความท้าทายในอวกาศ
ความท้าทายในอวกาศ

วิ่งขึ้นใน Space Challenge

แนะนำ: