1 điểm bởi GN⁺ 2025-08-24 | 1 bình luận | Chia sẻ qua WhatsApp
  • Camera line-scan rất phù hợp để chụp các đối tượng chuyển động như tàu hỏa ở độ phân giải cao mà không bị méo hình
  • Xử lý ảnh cần nhiều thuật toán và kỹ thuật khác nhau như phát hiện vùng quan tâm, ước lượng tốc độ, tái lấy mẫu
  • Các bước cải thiện chất lượng như loại bỏ sọc ngang và dọc cùng khử nhiễu là rất quan trọng
  • Việc triển khai bao gồm xử lý dữ liệu dung lượng lớn, sử dụng Python, numpy và nhiều cải tiến mang tính thực nghiệm
  • Có thể thu được thêm nhiều góc nhìn hữu ích bằng cách so sánh với các ví dụ ảnh line-scan của những tác giả khác

Tổng quan về camera line-scan

  • Camera line-scan quét ảnh với tốc độ rất cao bằng một hàng (hoặc hai hàng) pixel
  • Camera được cố định, và khi tàu chạy ngang qua trước camera thì toàn bộ hình dạng sẽ được ghi lại
  • Nền tĩnh được lặp lại trên mọi cột dọc của ảnh, tạo ra hiệu ứng sọc đặc trưng
  • Cách làm này cho phép chụp ảnh độ phân giải cao không bị biến dạng trên toàn bộ chiều dài đoàn tàu, nên cũng hữu ích cho các sở thích như dựng mô hình tàu
  • Camera strip dùng phim cũng hoạt động theo nguyên lý tương tự, nhưng khác ở chỗ phải tự căn tốc độ phim do vấn đề độ nhạy sáng

Thiết bị camera

  • Sử dụng mẫu [Alkeria Necta N4K2-7C], được trang bị cảm biến ảnh mảng Bayer kép 4096×2
  • Dữ liệu gốc được lưu dưới dạng mảng nhị phân 16-bit
  • Việc chụp được thực hiện trong nhiều môi trường khác nhau như tàu điện ngầm đô thị

Phát hiện vùng quan tâm (ROI)

  • Khi quét trong thời gian dài sẽ phát sinh lượng lớn dữ liệu nền, nên thuật toán tự động phát hiện đoạn chứa vật thể chuyển động là bắt buộc
  • Thuật toán kết hợp hàm năng lượng (dựa trên gradient) với giá trị pixel cực đại để phân biệt cấu trúc dọc (chuyển động) và cấu trúc ngang (nền)
  • Ảnh được chia thành nhiều chunk, rồi tính điểm bằng năng lượng phân vị 99 của từng chunk
  • Các chunk có điểm cao hơn ít nhất 1,5 lần so với mức thấp nhất được xem là vùng có chứa vật thể chuyển động
  • Các cách cũ không khái quát tốt, còn cách hiện tại hoạt động hiệu quả hơn trong nhiều tình huống khác nhau

Ước lượng tốc độ

  • Khi chủ thể di chuyển, nếu ước lượng tốc độ sai thì ảnh sẽ bị kéo giãn hoặc bóp méo
  • Tốc độ chuyển động của từng chunk được tính bằng cách so sánh hai kênh xanh lá (Green) của camera
  • Với mỗi chunk, áp dụng các dịch chuyển nhỏ từ -7 đến +7 rồi tính tổng độ lệch tuyệt đối giữa hai kênh để tạo cost array
  • Để tìm đỉnh subpixel, dùng phép nội suy kiểu [mean shift] dựa trên Gaussian, sau đó hiệu chỉnh toàn bộ biến thiên bằng spline
  • Giá trị spline trích xuất được biểu thị khoảng cách mẫu trong chuỗi thời gian gốc, và được dùng để hiệu chỉnh méo ảnh

Tái lấy mẫu

  • Tính vị trí mẫu theo spline để trích xuất ảnh mới
  • Có xét các trường hợp ngoại lệ như spline âm thì lật trái-phải, hoặc gần 0 thì xử lý như lỗi
  • Với mỗi vị trí mẫu cũng lưu thông tin về độ rộng mẫu, và dùng hàm cửa sổ phù hợp như Hann window để cải thiện hiệu năng chống aliasing
  • Việc chỉ chọn cột đơn giản hoặc dùng cửa sổ hình chữ nhật không phù hợp vì tạo ra artifact thô khi upsampling

Demosaic

  • Cần một quy trình demosaic tùy biến như bilinear interpolation có tính đến độ lệch không gian của mảng Bayer 2 cột
  • Sau khi ước lượng tốc độ, hiện tượng fringing và các lỗi tương tự được hiệu chỉnh bằng nội suy tuyến tính
  • Do có khác biệt giữa dữ liệu của hai kênh xanh lá, có khả năng khôi phục màu đầy đủ còn tốt hơn mảng Bayer thông thường

Loại bỏ sọc dọc

  • Clock jitter (stripes) và thay đổi độ sáng của chủ thể gây ra sọc dọc trong ảnh
  • Việc hiệu chỉnh sọc dùng hàm hiệu chỉnh theo từng cột với hồi quy tuyến tính và trọng số Gaussian (iteratively reweighted least squares)
  • Các hàm hiệu chỉnh này tạo thành một cấu trúc nhóm toán học; để tránh drift khi tích lũy hiệu chỉnh, có thể cân nhắc lời giải hệ tuyến tính band-diagonal
  • Trong thực tế, cũng có thể dùng bộ lọc làm mượt theo hàm mũ để triệt nhiễu tần số cao
  • Việc hiệu chỉnh sọc bắt buộc phải thực hiện trước bước ước lượng tốc độ

Khử nhiễu

  • Áp dụng kỹ thuật kiểm soát nhiễu dựa trên patch (block matching), tận dụng tích cực các kết cấu lặp lại trên bề mặt tàu
  • Dùng vector đặc trưng của từng patch 3×3 pixel, rồi giảm nhiễu bằng trung bình có trọng số trong các patch tương tự
  • Hiệu năng tốt hơn nếu tiền xử lý theo phân phối Poisson (biến đổi căn bậc hai) trước khi so sánh, tùy theo cường độ tín hiệu
  • Kỹ thuật total variation denoising hiện có làm mất kết cấu quá nhiều nên không phù hợp
  • Hạn chế của kỹ thuật này là khối lượng tính toán lớn và tốc độ chậm

Hiệu chỉnh độ nghiêng (Skew)

  • Nếu camera không đặt thẳng đứng, toàn bộ ảnh sẽ bị nghiêng nhẹ
  • Phát hiện skew nên được thực hiện sau bước ước lượng tốc độ và trước bước tái lấy mẫu cuối cùng để giảm thiểu mất mát thông tin
  • Có thể tự động phát hiện dựa trên cấu trúc dọc bằng Hough transform hoặc các phương pháp tương tự

Hiệu chỉnh màu sắc

  • Hiện tại màu sắc được cân chỉnh bằng ma trận hiệu chỉnh thủ công
  • Trong thực tế, chất lượng cho ra khá tốt, bao gồm cả tông da tự nhiên

Chi tiết triển khai

  • Toàn bộ pipeline được triển khai bằng Python và numpy
  • Do kích thước dữ liệu rất lớn (4096 hàng × hàng trăm nghìn cột), nên để vượt qua vấn đề thiếu bộ nhớ đã áp dụng cách xử lý theo từng chunk, từng giai đoạn
  • Không thể cấp phát bộ nhớ hàng loạt một lần, vì vậy ở mỗi bước đều xử lý và lưu từng phần dữ liệu

Kinh nghiệm triển khai

  • Đã thử đưa công cụ AI vào quá trình viết mã, nhưng kết quả còn hạn chế
  • AI thường xuyên sinh ra mã kém hiệu quả, chẳng hạn biến các bài toán tuyến tính thành độ phức tạp thời gian bậc hai không cần thiết
  • Cũng có các vấn đề bộ nhớ như tạo mask toàn cục không cần thiết khi xử lý mảng lớn
  • Dù vậy, AI vẫn có thể giúp tăng hiệu quả ở một số phần như API, tổ chức cấu trúc mã, hay trực quan hóa bằng Matplotlib

Các ví dụ ảnh tàu line-scan của người khác

Adam Magyar

  • [Adam Magyar] đã thực hiện các dự án "Stainless", "Urban Flow" bằng camera line-scan đen trắng do chính mình chế tạo
  • Ông từng chụp ra những kết quả rất sạch ngay cả trong môi trường thiếu sáng như tàu điện ngầm trong nhà
  • Cần chọn vị trí chụp để tránh hiện tượng nhấp nháy của đèn tàu điện ngầm

Blog KR64

  • [kr64.seesaa.net] đăng tải số lượng lớn ảnh tàu line-scan đa dạng trên khắp Nhật Bản
  • Nhiều khả năng dựa trên camera slit-scan dùng phim, với độ đa dạng và chất lượng rất cao
  • Trang web thường bị gián đoạn vì vấn đề kỹ thuật và không thể liên hệ được

1 bình luận

 
GN⁺ 2025-08-24
Bình luận trên Hacker News
  • Tôi cũng rất thích ý tưởng này, đã từng thử quét cái cây lớn nhất ở New England bằng drone theo cách tương tự, kết quả chưa thật sự tốt lắm nhưng có lẽ sẽ thử lại
    Kết quả
    Dự án này là một phần của câu chuyện này

  • Tôi cũng dùng một quy trình tương tự nhưng quay bằng camera thường rồi ghép các khung hình thủ công để tạo hoạt ảnh
    Điểm đặc trưng của cách này là chủ thể tự nhiên sẽ được lấy nét, còn hậu cảnh thì biến thành các hoa văn trừu tượng
    Mỗi “đường” rộng khoảng 15px
    Ví dụ 1 Ví dụ 2 Ví dụ 3
    Tôi đã quay timelapse hoàng hôn của đường chân trời Tokyo, áp dụng kỹ thuật tương tự rồi dùng motion tracking để thời gian trôi từ trái sang phải của khung hình
    Ở đây mỗi dòng là 4 pixel, và hoạt ảnh gốc có độ phân giải 8k
    Video liên quan Motion tracking

  • Tôi đã tìm thêm ví dụ về line-scan chụp tàu hỏa, xem tại đây

  • Nó làm tôi nhớ tới những thử nghiệm ban đầu dùng máy quét phẳng như một digital back
    Ví dụ: liên kết

  • Tôi tò mò không biết nếu dùng camera line-scan để chụp phong cảnh chuyển động từ ô tô hay tàu hỏa thì sẽ ra sao, đoán là hiệu ứng parallax có thể tạo ra những biến dạng thú vị

    • Tôi có vài tấm chụp từ tàu —
      Osaka Nankai series 6000: ảnh
      Phong cảnh Pháp: ảnh 1
      Marseille: ảnh 2
      California: ảnh 3 ảnh 4
      Cây màu tím trông như vậy là vì camera nhạy với cận hồng ngoại, từ sau khi tôi mua bộ lọc IR cut thì chưa chụp ảnh tàu thêm được; một số ảnh còn có hiện tượng rớt khung hình hoặc các artifact khác
    • Đúng thứ tôi đang thắc mắc, về mặt kỹ thuật liệu có thể “quét” toàn bộ phong cảnh của một chuyến tàu kéo dài khoảng một giờ hay không
    • Nó chỉ bị nhòe hết thôi, khá giống hậu cảnh trong ảnh của bài viết này
      Nhanh như ô tô hay tàu hỏa thì không nhìn ra được gì, phải rất chậm mới cho ra biến dạng đẹp
  • Bài viết thật sự rất thú vị, đặc biệt là ảnh cáp treo rất ấn tượng
    Việc chọn nội dung hậu cảnh như thế nào cũng là một điều đáng suy nghĩ thú vị

  • Nếu tôi nhớ không nhầm thì ở kỳ Olympic trước Omega đã kết hợp màn hình dòng tần số cao với camera strip ở vạch đích
    Trên camera thường nó trông như những vạch nhấp nháy, nhưng trong nền ảnh photo finish lại có logo Omega
    Rất tinh tế, nhưng tôi thấy ấn tượng vì họ làm được điều đó

  • Tôi thích video này về camera photo finish trên đường đua ngựa nên chia sẻ, có lẽ mọi người khác cũng sẽ thấy thú vị

  • Cảm giác tốc độ cực mạnh toát ra từ hình ảnh đoàn tàu dừng sắc lẹm hoàn hảo giữa các dải màu

  • Theo tôi, tính năng khử nhiễu có vẻ hơi thiếu tự nhiên và lại làm nổi bật hơn các artifact còn sót lại, đặc biệt là viền màu ở những chi tiết nhỏ
    Tôi nghĩ có lẽ để tắt tính năng này sẽ tốt hơn
    Và liên quan đến quá trình demosaic, tôi tự hỏi liệu triển khai phiên bản này của RCD có thể cho ra độ phân giải cao mà không có artifact hay không

    • Thực ra tôi cũng tắt khử nhiễu theo mặc định, vì các sọc ngang riêng lẻ sẽ hiện rõ hơn và tốc độ xử lý cũng chậm đi rất nhiều
      Việc hiệu chỉnh sọc dọc cũng không phải lúc nào cũng hoạt động tốt, thậm chí đôi khi còn tạo thêm sọc
      Vẫn còn rất nhiều việc phải làm
      RCD demosaicing là bước tiếp theo ngay sau đó; vấn đề viền màu là do tôi dùng nội suy tuyến tính đơn giản cho kênh đỏ và xanh dương
      Kênh xanh lá bao phủ toàn bộ ảnh, nên tôi đang nghĩ cách dùng kênh này làm chỉ dẫn để nội suy tốt hơn
    • Tôi cũng thấy kết quả đã khử nhiễu không có vẻ gì là tốt hơn hẳn