1P by GN⁺ 2일전 | ★ favorite | 댓글 1개
  • 라인 스캔 카메라는 기차 등 움직이는 대상을 고해상도로 왜곡 없이 촬영하는 데 매우 적합함
  • 이미지 처리에는 관심 영역 감지, 속도 추정, 재샘플링 등 다양한 알고리듬과 기법이 필요함
  • 수평 및 수직 스트라이프 제거노이즈 억제 등 품질 개선 작업이 중요함
  • 구현에는 대용량 데이터 처리와 Python, numpy 활용, 다양한 실험적 개선이 포함됨
  • 다른 작가들의 라인 스캔 사진 사례와 비교를 통해 추가적인 통찰을 얻을 수 있음

라인 스캔 카메라 개요

  • 라인 스캔 카메라는 한 줄(혹은 두 줄)의 픽셀로 매우 빠른 속도로 이미지를 스캔함
  • 카메라는 고정되어 있으며, 기차가 카메라 앞을 지나가면서 전체 모양이 기록됨
  • 정적인 배경은 이미지의 모든 세로 열에 반복되어 특유의 스트라이프 효과가 나타남
  • 이 방식은 전체 기차 길이에 걸쳐 왜곡 없는 고해상도 사진 촬영이 가능하여 기차 모델링 등 취미에도 유용함
  • 필름 기반 스트립 카메라 역시 유사 원리로 작동하지만, 감도 문제로 수동으로 필름 속도를 맞춰야 하는 차이점이 존재함

카메라 장비

  • [Alkeria Necta N4K2-7C] 모델을 사용하며, 4096×2 이중 Bayer 어레이 이미지 센서를 탑재함
  • 원본 데이터는 16비트 바이너리 배열로 저장함
  • 도시 지하철 등 다양한 환경에서 촬영이 진행됨

관심 영역(ROI) 감지

  • 장시간 스캔 시 배경 데이터가 대량 발생하므로 움직이는 물체 구간 자동 감지 알고리듬이 필수임
  • 에너지 함수(gradient 기반)와 최대 픽셀값 등을 조합해 수직 구조(움직임)와 수평 구조(배경)를 구분함
  • 이미지는 여러 청크로 분할, 각 청크의 99분위 에너지로 점수 산출
  • 점수가 최저 대비 1.5배 이상인 청크를 움직이는 물체 포함 영역으로 간주함
  • 기존 방식들은 일반화에 실패, 현재 방식이 다양한 상황에 더 효율적으로 작동함

속도 추정

  • 주체가 움직일 때 속도 추정 실패 시 이미지가 늘어나거나 찌그러지는 왜곡이 발생함
  • 카메라의 두 개의 초록(Green) 채널을 비교해 각 청크별 움직임 속도를 계산함
  • 청크별로 -7~+7까지 작은 이동을 적용한 후 두 채널의 차이 절대값을 계산해 cost array 생성
  • subpixel peak를 찾기 위해 가우시안 기반 [mean shift] 스타일 보간 사용, spline으로 전체 변화량 보정
  • 추출된 spline 값은 원본 타임 시리즈에서의 샘플 간격을 의미, 이미지 왜곡을 보정하는 데 사용됨

재샘플링

  • spline에 따라 샘플 위치를 계산해 새로운 이미지 추출
  • spline이 음수인 경우 좌우 반전, 0에 가까우면 에러 처리 등 예외 상황 고려
  • 각 샘플 위치마다 샘플 폭 정보도 저장, Hann 윈도 등 적절한 윈도잉 함수로 앤티앨리어싱 성능 향상
  • 단순 열 선택이나 사각형 윈도는 업샘플링시 거친 아티팩트가 생기므로 적합하지 않음

디모자이킹

  • 2열 Bayer 배열의 공간적 오프셋을 고려한 bilinear interpolation 등 커스텀 디모자이킹 필요
  • 속도 추정 후, 선형 보간을 통해 fringing 현상 등 보정
  • 두 초록 채널 데이터 차이로 인해 일반 Bayer 어레이보다 더 나은 풀컬러 복원이 가능할 여지도 있음

수직 스트라이프 제거

  • 클럭 지터(stripes), 피사체 밝기 변화로 인해 이미지에 수직 스트라이프 발생
  • 선형 회귀와 가우시안 가중치를 활용한 각 열별 보정 함수(iteratively reweighted least squares)로 스트라이프 보정
  • 이런 보정 함수들은 수학적 군 구조를 형성, 보정 누적시 드리프트 방지 위해 band-diagonal 선형 시스템 해법 고려
  • 실무에선 지수 평활 필터 등으로 고주파 노이즈 억제도 가능
  • 스트라이프 보정은 반드시 속도 추정 이전에 시행해야 함

노이즈 억제

  • 패치 기반(block matching) 노이즈 제어 기법 적용, 기차 표면의 반복적 질감을 적극 활용
  • 각 3×3 픽셀 패치의 특징벡터를 사용, 유사 패치 내에서 가중평균을 통해 노이즈 감소
  • 신호 강도에 따라 포아송 분포(루트 변환)로 사전처리 후 비교하면 성능 향상
  • 기존 total variation denoising 기법은 질감 손실이 심해 적합하지 않음
  • 본 기법은 연산량이 많고 속도가 느린 한계가 있음

기울기(Skew) 보정

  • 카메라가 수직이 아닐 경우 이미지 전체가 약간 삐뚤어지는 현상 발생
  • 스큐 검출은 속도 추정 이후, 최종적인 재샘플링 전에 시행해야 정보 손실 최소화 가능
  • Hough 변환 등으로 수직 구조에 기반한 자동 검출 가능

색상 보정

  • 현재 수동 보정 행렬로 색감을 맞춤
  • 실제로는 자연스러운 스킨톤 등 꽤 괜찮은 품질

구현 세부사항

  • 전체 파이프라인은 Python 및 numpy로 구현
  • 데이터 크기가 커서(4096행×수십만 열) 메모리 부족 문제 극복을 위해 청크 단위 단계별 처리 방식 채택
  • 일괄 메모리 할당이 무리이므로, 각 단계별로 데이터 부분처리 및 저장

구현 경험

  • AI 도구를 도입해 코드 구현 시도, 결과는 제한적
  • AI가 선형 문제를 불필요하게 2차시간 복잡도로 만드는 등 비효율적 코드를 생성하는 경우 빈발
  • 대용량 배열 처리에서 불필요한 전체 마스크 생성 등 메모리 이슈
  • 일부 API나 코드 구조화, 시각화(Matplotlib) 등은 AI 도움으로 효율화 가능

타인의 라인 스캔 기차 사진 사례

Adam Magyar

  • [Adam Magyar]는 독자적인 블랙 앤 화이트 라인 스캔 카메라로 "Stainless", "Urban Flow" 프로젝트 진행
  • 실내 지하철 등 저조도 환경에서도 매우 깨끗한 결과물을 촬영한 바 있음
  • 지하철 조명의 플리커를 피해 촬영 위치 선정 필요

KR64 블로그

  • [kr64.seesaa.net]에는 일본 전역의 다양한 기차 라인 스캔 사진 대량 게재
  • 필름 슬릿 스캔 카메라 기반으로 추정, 매우 높은 다양성과 품질 보유
  • 사이트는 기술적 문제로 종종 다운, 컨택 불가
Hacker News 의견
  • 나도 이 아이디어가 정말 마음에 듦, 비슷한 방식으로 드론을 이용해서 뉴잉글랜드에서 가장 큰 나무를 스캔해보려고 했음, 결과물이 아주 좋진 않았지만, 다시 시도해볼까 함
    결과물
    이 프로젝트는 이 이야기의 일부였음

  • 나도 비슷한 과정을 쓰지만 일반 카메라로 촬영해서 프레임을 수동으로 이어붙여 애니메이션을 만듦
    이 방식의 특징은 피사체에 자연스레 초점을 맞추게 되며, 배경은 추상적인 패턴으로 변환됨을 볼 수 있음
    각 ‘라인’은 대략 15px 너비임
    예시1 예시2 예시3
    도쿄 스카이라인의 일몰 타임랩스를 촬영해 유사한 기법을 적용한 후, 모션 트래킹으로 시간이 프레임의 왼쪽에서 오른쪽으로 흐르도록 함
    여기서는 각 줄이 4픽셀이고, 원본 애니메이션은 8k 해상도임
    관련 영상 모션 트래킹

  • 라인 스캔 트레인 예시를 더 찾아봄 여기에서 확인

  • 플랫베드 스캐너를 디지털 백처럼 썼던 초기 실험을 떠올리게 함
    예시: 링크

  • 라인 스캔 카메라로 자동차나 기차의 움직이는 풍경을 찍으면 어떻게 나오는지 궁금함, 패럴랙스 효과로 흥미로운 왜곡이 생길 수도 있을 거라 예상함

    • 기차에서 찍은 사진이 몇 장 있음 —
      오사카 난카이 6000 시리즈: 사진
      프랑스 풍경: 사진1
      마르세유: 사진2
      캘리포니아: 사진3 사진4
      보라색 나무는 카메라가 근적외선에 민감해서 이렇게 보이는 것임, IR 컷 필터를 산 이후로는 기차사진을 못 찍어봄, 일부는 프레임 드랍이나 다른 아티팩트도 있음
    • 딱 궁금했던 내용임, 기술적으로 한 시간 정도 기차여행 전체 풍경을 ‘스캔’하는 것이 가능할지 궁금함
    • 그냥 다 흐려짐, 이 글 본문의 사진 속 배경과 비슷한 느낌임
      차나 기차처럼 빠르면 제대로 보이지 않음, 아주 느린 속도여야 괜찮은 왜곡이 나옴
  • 아티클 정말 흥미로움, 특히 케이블카 사진이 인상적임
    배경 콘텐츠를 어떻게 골라야 할지도 재미있는 고민거리임

  • 내가 기억하기로 지난 올림픽 때 Omega가 결승선 스트립 카메라에 고주파수 라인 디스플레이를 조합해 썼음
    일반 카메라에는 깜박이는 라인으로 보였는데, 포토피니시 배경에는 Omega 로고가 있었음
    아주 미묘하지만, 이런 걸 구현해낸 게 인상적임

  • 경마 트랙의 포토 피니시 카메라에 관한 이 영상이 좋아서 소개함, 다른 분들도 재미있게 볼 수 있을 것 같음

  • 기차가 완벽하게 색의 줄 사이에 날카롭게 멈춰 있는 모습에서 엄청난 속도감이 느껴짐

  • 내 생각에 노이즈제거(denoising)는 다소 부자연스럽게 보이고 남아있는 아티팩트, 특히 디테일 부분의 컬러 프린지(fringe)를 더 강조하는 느낌임
    나는 이 기능을 끄는 편이 더 나을 것 같음
    그리고 demosaic 과정과 관련해서, RCD의 이 버전을 구현해보면 아티팩트 없는 고해상도를 얻을 수 있을지 궁금함

    • 실제로 나도 기본적으로 노이즈제거를 비활성화시킴, 각각의 가로 줄 무늬가 더 뚜렷해지고 속도도 매우 느려지기 때문임
      세로 줄 무늬 보정도 모든 경우엔 잘 동작하지 않고, 오히려 무늬를 더 만들어내기도 함
      해야 할 작업이 아직 많음
      RCD demosaicing은 바로 다음 단계임, 컬러 프린징 문제는 레드와 블루 채널에 대해 단순 선형 보간을 썼기 때문임
      그린 채널은 이미지 전역을 커버하므로, 이 채널을 가이드로 삼아 보간을 더 잘할 수 있는 방법을 생각함
    • 나도 노이즈제거된 결과가 특별히 좋아보이지 않는 쪽임