1 คะแนน โดย GN⁺ 2025-08-24 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • กล้องไลน์สแกน เหมาะอย่างยิ่งสำหรับการถ่ายวัตถุที่เคลื่อนไหว เช่น รถไฟ ให้ได้ภาพความละเอียดสูงโดยไม่บิดเบี้ยว
  • การประมวลผลภาพต้องใช้อัลกอริทึมและเทคนิคหลากหลาย เช่น การตรวจจับบริเวณที่สนใจ, การประมาณความเร็ว, การสุ่มตัวอย่างใหม่
  • งานปรับปรุงคุณภาพ เช่น การลบแถบแนวนอนและแนวตั้ง และ การลดสัญญาณรบกวน มีความสำคัญมาก
  • การลงมือทำครอบคลุมถึงการจัดการข้อมูลขนาดใหญ่ การใช้ Python, numpy และการปรับปรุงเชิงทดลองหลายรูปแบบ
  • สามารถได้มุมมองเพิ่มเติมจากการเปรียบเทียบกับตัวอย่างภาพถ่ายไลน์สแกนของช่างภาพคนอื่น

ภาพรวมของกล้องไลน์สแกน

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

อุปกรณ์กล้อง

  • ใช้รุ่น [Alkeria Necta N4K2-7C] ซึ่งติดตั้งเซนเซอร์ภาพแบบ Bayer array คู่ ขนาด 4096×2
  • ข้อมูลดิบถูกเก็บเป็นอาร์เรย์ไบนารี 16 บิต
  • มีการถ่ายภาพในสภาพแวดล้อมหลากหลาย เช่น รถไฟใต้ดินในเมือง

การตรวจจับบริเวณที่สนใจ (ROI)

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

การประมาณความเร็ว

  • เมื่อวัตถุเคลื่อนที่ หาก การประมาณความเร็วล้มเหลว ภาพจะเกิดการยืดหรือบีบจนบิดเบี้ยว
  • คำนวณความเร็วการเคลื่อนที่ในแต่ละชังก์โดยเปรียบเทียบ ช่องสีเขียว (Green) สองช่อง ของกล้อง
  • สำหรับแต่ละชังก์ จะลองเลื่อนค่าเล็กน้อยตั้งแต่ -7 ถึง +7 แล้วคำนวณผลรวมค่าสัมบูรณ์ของความต่างระหว่างสองช่อง เพื่อสร้าง cost array
  • เพื่อหาจุดพีกระดับ subpixel จะใช้การอินเตอร์โพเลชันสไตล์ [mean shift] ที่อิง Gaussian และใช้ spline เพื่อแก้ความเปลี่ยนแปลงโดยรวม
  • ค่า spline ที่สกัดได้หมายถึง ช่วงห่างระหว่างตัวอย่างในอนุกรมเวลาต้นฉบับ และถูกใช้เพื่อแก้ความบิดเบี้ยวของภาพ

การสุ่มตัวอย่างใหม่

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

การดีโมเสก

  • จำเป็นต้องใช้การดีโมเสกแบบกำหนดเอง เช่น bilinear interpolation ที่คำนึงถึงออฟเซ็ตเชิงพื้นที่ของ Bayer array แบบ 2 คอลัมน์
  • หลังจากประมาณความเร็วแล้ว จะใช้การอินเตอร์โพเลชันเชิงเส้นเพื่อแก้ปัญหาอย่าง fringing
  • เนื่องจากข้อมูลจากช่องสีเขียวสองช่องแตกต่างกัน จึงอาจมีโอกาสฟื้นฟูภาพสีเต็มได้ดีกว่า Bayer array ทั่วไป

การลบแถบแนวตั้ง

  • clock jitter (stripes) และความสว่างของวัตถุที่เปลี่ยนแปลง ทำให้เกิดแถบแนวตั้งในภาพ
  • แก้ลายแถบด้วย ฟังก์ชันแก้ไขรายคอลัมน์ โดยใช้การถดถอยเชิงเส้นและค่าน้ำหนักแบบ Gaussian (iteratively reweighted least squares)
  • ฟังก์ชันแก้ไขเหล่านี้ก่อให้เกิดโครงสร้างแบบกรุปทางคณิตศาสตร์ และเพื่อป้องกัน drift เมื่อสะสมการแก้ไข จึงพิจารณาการแก้ระบบเชิงเส้นแบบ band-diagonal
  • ในการใช้งานจริง ยังสามารถใช้ ฟิลเตอร์ exponential smoothing เพื่อลดสัญญาณรบกวนความถี่สูงได้
  • การแก้ลายแถบต้องทำก่อนการประมาณความเร็วเสมอ

การลดสัญญาณรบกวน

  • ใช้ เทคนิคลดสัญญาณรบกวนแบบอิงแพตช์ (block matching) โดยใช้ประโยชน์อย่างเต็มที่จากพื้นผิวที่ซ้ำกันบนตัวรถไฟ
  • ใช้เวกเตอร์คุณลักษณะของแพตช์ขนาด 3×3 พิกเซล แล้วลดสัญญาณรบกวนด้วยการถัวเฉลี่ยแบบถ่วงน้ำหนักภายในกลุ่มแพตช์ที่คล้ายกัน
  • ถ้าเตรียมข้อมูลล่วงหน้าด้วยการมองเป็นการแจกแจงปัวซง (แปลงรากที่สอง) ตามความเข้มของสัญญาณก่อนนำมาเปรียบเทียบ จะช่วยให้ประสิทธิภาพดีขึ้น
  • เทคนิค total variation denoising แบบเดิมทำให้พื้นผิวสูญหายมากเกินไป จึงไม่เหมาะ
  • ข้อจำกัดของวิธีนี้คือใช้การคำนวณมากและทำงานช้า

การแก้เอียง (Skew)

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

การปรับสี

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

รายละเอียดการนำไปใช้จริง

  • ไปป์ไลน์ทั้งหมดถูกพัฒนาด้วย Python และ numpy
  • เนื่องจากข้อมูลมีขนาดใหญ่มาก (4096 แถว × หลายแสนคอลัมน์) จึงเลือกใช้วิธี ประมวลผลเป็นชังก์ในแต่ละขั้นตอน เพื่อรับมือปัญหาหน่วยความจำไม่พอ
  • ไม่สามารถจัดสรรหน่วยความจำแบบครั้งเดียวทั้งหมดได้ จึงต้องประมวลผลและบันทึกข้อมูลเป็นส่วน ๆ ในแต่ละขั้น

ประสบการณ์ในการพัฒนา

  • มีการลองใช้เครื่องมือ AI เพื่อช่วยเขียนโค้ด แต่ผลลัพธ์มีข้อจำกัด
  • มักพบว่า AI สร้างโค้ดที่ไม่มีประสิทธิภาพ เช่น ทำให้ปัญหาเชิงเส้นกลายเป็น ความซับซ้อนเชิงเวลาแบบกำลังสองโดยไม่จำเป็น
  • ในการจัดการอาร์เรย์ขนาดใหญ่ ยังมีปัญหาด้านหน่วยความจำ เช่น การสร้าง mask ทั้งชุดโดยไม่จำเป็น
  • อย่างไรก็ดี บางส่วน เช่น API การจัดโครงสร้างโค้ด หรือการทำภาพประกอบ (Matplotlib) สามารถทำได้มีประสิทธิภาพขึ้นด้วยความช่วยเหลือจาก AI

ตัวอย่างภาพถ่ายรถไฟแบบไลน์สแกนของผู้อื่น

Adam Magyar

  • [Adam Magyar] ทำโปรเจกต์ "Stainless" และ "Urban Flow" ด้วยกล้องไลน์สแกนขาวดำที่พัฒนาขึ้นเอง
  • เคยถ่ายผลงานที่สะอาดมากแม้ใน สภาพแสงน้อยอย่างภายในรถไฟใต้ดิน
  • จำเป็นต้องเลือกตำแหน่งถ่ายเพื่อหลีกเลี่ยงแสงกะพริบของไฟในรถไฟใต้ดิน

KR64 บล็อก

  • [kr64.seesaa.net] เผยแพร่ ภาพถ่ายรถไฟแบบไลน์สแกนหลากหลายจากทั่วญี่ปุ่น เป็นจำนวนมาก
  • คาดว่าใช้กล้อง slit-scan แบบฟิล์ม และมีความหลากหลายกับคุณภาพในระดับสูงมาก
  • เว็บไซต์มักล่มบ่อยจากปัญหาทางเทคนิค และไม่สามารถติดต่อได้

1 ความคิดเห็น

 
GN⁺ 2025-08-24
ความคิดเห็นจาก Hacker News
  • ฉันก็ชอบไอเดียนี้มากเหมือนกัน เคยลองใช้โดรนสแกนต้นไม้ที่ใหญ่ที่สุดในนิวอิงแลนด์ด้วยวิธีคล้ายกัน ผลลัพธ์ยังไม่ค่อยดีนัก แต่ก็คิดว่าอาจจะลองใหม่อีกครั้ง
    ผลลัพธ์
    โปรเจ็กต์นี้เป็นส่วนหนึ่งของเรื่องนี้

  • ฉันก็ใช้กระบวนการคล้ายกัน แต่ถ่ายด้วยกล้องธรรมดาแล้วนำเฟรมมาต่อกันด้วยมือเพื่อทำเป็นแอนิเมชัน
    ลักษณะเด่นของวิธีนี้คือจะเห็นว่าตัวแบบถูกโฟกัสอย่างเป็นธรรมชาติ ขณะที่ฉากหลังถูกเปลี่ยนเป็นลวดลายนามธรรม
    แต่ละ ‘เส้น’ กว้างประมาณ 15px
    ตัวอย่าง1 ตัวอย่าง2 ตัวอย่าง3
    ฉันถ่าย timelapse พระอาทิตย์ตกของเส้นขอบฟ้าโตเกียว แล้วใช้เทคนิคคล้ายกันร่วมกับ motion tracking เพื่อให้เวลาไหลจากซ้ายไปขวาของเฟรม
    ในงานนี้แต่ละเส้นมี 4 พิกเซล และแอนิเมชันต้นฉบับมีความละเอียด 8k
    วิดีโอที่เกี่ยวข้อง motion tracking

  • ลองไปหา example รถไฟแบบ line scan เพิ่มเติมแล้ว ดูได้ที่นี่

  • ทำให้นึกถึงการทดลองยุคแรก ๆ ที่ใช้ flatbed scanner เหมือนเป็น digital back
    ตัวอย่าง: ลิงก์

  • สงสัยว่าถ้าใช้กล้อง line scan ถ่ายวิวเคลื่อนไหวจากรถยนต์หรือรถไฟ ภาพจะออกมาเป็นแบบไหน คิดว่าอาจเกิดความบิดเบี้ยวที่น่าสนใจจากเอฟเฟกต์ parallax

    • ฉันมีภาพที่ถ่ายจากรถไฟอยู่สองสามภาพ —
      Osaka Nankai 6000 Series: ภาพ
      วิวฝรั่งเศส: ภาพ1
      มาร์แซย์: ภาพ2
      แคลิฟอร์เนีย: ภาพ3 ภาพ4
      ต้นไม้สีม่วงเป็นแบบนั้นเพราะกล้องไวต่อ near-infrared หลังจากซื้อ IR-cut filter แล้วก็ยังไม่ได้ลองถ่ายภาพรถไฟอีกเลย บางภาพก็มี frame drop หรือ artifact อื่น ๆ อยู่ด้วย
    • นี่แหละคือสิ่งที่ฉันสงสัยพอดี อยากรู้ว่าในทางเทคนิคจะสามารถ ‘สแกน’ วิวตลอดการเดินทางด้วยรถไฟทั้งชั่วโมงได้ไหม
    • มันเบลอไปหมดเฉย ๆ ให้ความรู้สึกคล้ายฉากหลังในภาพของบทความนี้
      ถ้าเร็วแบบรถหรือรถไฟจะมองไม่ออกดี ต้องช้ามาก ๆ ถึงจะได้ความบิดเบี้ยวที่ดูโอเค
  • บทความนี้น่าสนใจมาก โดยเฉพาะภาพเคเบิลคาร์ที่น่าประทับใจมาก
    การเลือกฉากหลังว่าจะใช้อะไรคงเป็นเรื่องให้คิดสนุกเหมือนกัน

  • ถ้าจำไม่ผิด ตอนโอลิมปิกครั้งก่อน Omega ใช้การผสมระหว่างกล้อง strip camera ที่เส้นชัยกับ high-frequency line display
    ในกล้องทั่วไปมันจะเห็นเป็นเส้นกะพริบ แต่ในฉากหลังของภาพ photofinish จะมีโลโก้ Omega อยู่
    เป็นอะไรที่ละเอียดมาก แต่ก็น่าทึ่งที่ทำออกมาได้

  • อยากแนะนำวิดีโอนี้เกี่ยวกับกล้อง photo finish ในสนามแข่งม้า คิดว่าคนอื่น ๆ ก็น่าจะดูแล้วสนุกเหมือนกัน

  • ภาพที่รถไฟหยุดคมกริบอยู่ระหว่างแถบสีได้อย่างสมบูรณ์แบบนั้นให้ความรู้สึกถึงความเร็วอย่างมหาศาล

  • ฉันคิดว่าการลดนอยส์ (denoising) ดูไม่ค่อยเป็นธรรมชาติเท่าไร และเหมือนจะยิ่งเน้น artifact ที่เหลืออยู่ โดยเฉพาะ color fringe ตามรายละเอียดต่าง ๆ
    ฉันว่าน่าจะปิดฟังก์ชันนี้ไปเลยจะดีกว่า
    แล้วในส่วนของกระบวนการ demosaic ก็สงสัยว่าถ้าลองทำ เวอร์ชันนี้ ของ RCD จะได้ภาพความละเอียดสูงแบบไม่มี artifact หรือเปล่า

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