- 라인 스캔 카메라는 기차 등 움직이는 대상을 고해상도로 왜곡 없이 촬영하는 데 매우 적합함
- 이미지 처리에는 관심 영역 감지, 속도 추정, 재샘플링 등 다양한 알고리듬과 기법이 필요함
- 수평 및 수직 스트라이프 제거와 노이즈 억제 등 품질 개선 작업이 중요함
- 구현에는 대용량 데이터 처리와 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]에는 일본 전역의 다양한 기차 라인 스캔 사진 대량 게재
- 필름 슬릿 스캔 카메라 기반으로 추정, 매우 높은 다양성과 품질 보유
- 사이트는 기술적 문제로 종종 다운, 컨택 불가