광각 카메라를 위한 실시간 왜곡 보정 프로세서 광각 카메라를 위한 실시간 왜곡 보정 프로세서
김재호 2014-07-11 09:21:26

Altera Design Contest 수상팀 논문

차량용 블랙박스를 비롯한 스마트폰, 내시경, 감시 카메라 등 매우 다양한 분야에 디지털 영상 시스템이 내장되어 있다.
이러한 디지털 영상 시스템은 광학 기기인 카메라를 통해 투사된 사물의 영상을 디지털 값으로 바꾸어 처리하는데, 고성능의 시스템을 구현하기 위해서는 매우 정밀한 광학 기기가 필요하다.


수상팀/한국항공대학교, 정희성, 김원태, 이광호
지도교수/김태환교수

 

기능 설명

차량용 블랙박스를 비롯한 스마트폰, 내시경, 감시카메라 등 매우 다양한 분야에 디지털 영상 시스템이 내장되어 있다. 이러한 디지털 영상 시스템은 광학 기기인 카메라를 통해 투사된 사물의 영상을 디지털 값으로 바꾸어 처리하는데, 고성능의 시스템을 구현하기 위해서는 매우 정밀한 광학 기기가 필요하다.
그 중, 최근 많은 응용 시스템에서 광각 렌즈를 도입하고 있는데, 이러한 시스템의 예로 다음과 같은 블랙박스, 내시경, 감시 카메라 등이 있다.
이러한 광각 렌즈는 일반 렌즈에 비해 넓은 시야를 제공해 주는 반면, 렌즈 시야의 가장 자리 부분에서의 왜곡현상으로 인해 영상의 품질이 저하된다. 따라서 실시간 고성능의 시스템을 구현 함에 있어, 전체 구현 비용을 낮추기 위해서는 이와 같은 광학기기의 왜곡을 효과적으로 보정하기 위한 기술이 필요하다.
내시경 등에 사용되는 광각렌즈의 경우 렌즈 자체의 크기가 매우 작으므로, 왜곡 없는 정교한 렌즈의 제작이 매우 어렵다. 더군다나, 내시경을 통한 영상의 경우에는 영상 속에 나타난 물체의 정확한 크기가 매우 중요하므로, 렌즈의 왜곡에 의한 영상 품질 왜곡이 심각한 문제가 된다.

 

1.jpg


특히, 그림 1에서 제시된 블랙박스 및, 감시 카메라, 내시경 등은 동영상을 재생하기 위한 시스템이므로, 광학기기의 왜곡 보정 역시 실시간으로 이루어져야 한다는 것을 알 수 있다. 본 설계에서는 위와 같은 광학 기기의 왜곡을 디지털 신호처리 기술을 사용하여 보정하는 프로세서를 디자인 한다. 본 설계에서 개발될 기술을 도입할 경우 고가의 정교한 광학 기기 대신, 저가의 광학 기기를 도입하고, 광학기기에 의해 발생된 왜곡을 이미지 신호 처리를 통해 보정함으로써, 전체 시스템 단가를 크게 낮추면서도 고 성능의 실시간 영상 시스템을 구현할 수 있다.
그림 2는 본 설계를 통해 개발될 기술을 적용하여 광학 기기의 왜곡을 보정한 영상을 나타낸다. 그림 2-1에서는 광각 렌즈의 배럴 왜곡(Barrel distortion)으로 인해 가장 자리 부분의 영상이 왜곡 되었지만, 그림 2-2는 이러한 왜곡이 보정되어 이미지 성능이 매우 높아지는 것을 볼 수 있다.

 

2.jpg

 

구현 과정

(1) 디자인이 달성해야 하는 사양 설정
◎ 배럴 왜곡 보정에 필요한 알고리즘을 분석 이에 따른 하드웨어 아키텍처 구현에 대한 사양 설정
◎ 본 설계에서는 DE2-115 보드를 사용하였으며, 그에 따른 영상의 해상도 및 동작 속도 등을 설정


(2) C 언어를 통한 시뮬레이터를 작성
◎ 분석한 알고리즘을 C 언어로 기술 및 보완, 정지 영상을 통해 알고리즘을 제대로 구현했는 지를 검증, 이미지 보정 품질 달성 실패 시 코드 수정
◎ 이미지 보정 품질 달성 시, 하드웨어로 구현하기 위한 고정소숫점 형태로 설계


(3) RTL 디자인
◎ Verilog HDL로 설계 후, C 시뮬레이션 결과와 비교, 비교 방법은 C를 통한 이미지 보정 결과와, RTL의 이미지 보정 결과를 픽셀 단위로 비교하여, 동일할 시, FPGA 상에 구현 준비


(4) 게이트 레벨 설계
◎ 왜곡 보정 프로세서 구현 외에, 영상을 실시간으로 출력하기 위한 부분을 설계
◎ Altera에서 제공하는 대학 프로그램을 이용하여 Qsys를 사용해,영상 출력 부분을 설계
◎ 영상 출력 부와, 왜곡 보정 프로세서를 연결하여 영상보정 결과가 설정한 사양을 만족시키는 지를 검증

 

성능 파라미터

이번에 실시간 렌즈 왜곡 보정 프로세서를 FPGA 상에서 구현함에 있어서 가장 신경 쓴 부분은 보정 속도와 구현 면적이다. 광각 카메라가 쓰이는 분야는 실시간 동작을 필요로 하는 분야가 대부분이고, 소형화 시스템에 적용이 되기 때문에 빠른 보정 속도와 낮은 복잡도로 구현하는 것이 핵심이다. 그래서 우리가 중점적으로 달성해야 할 성능 파라미터들은 렌즈 왜곡 보정 프로세서의 높은 보정 속도와 낮은 복잡도이다.

 

(1) 왜곡 보정 속도
실시간으로 광각 카메라에 들어온 입력 영상을 보정을 거친 후에, 모니터에 영상을 보정 영상을 출력해야 하기 때문에 높은 보정 속도가 필요하다. 그리고 요즘에는 영상의 해상도가 점점 높아지기 때문에 더욱이 그에 맞는 보정 속도가 필요하게 되었다. 우리의 디자인은 이런 속도에 관점에서 탁월한 성능을 보유하고 있다. 다만, 우리는 DE2-115 보드에서 CLOCK_50 의 동작 주파수를 사용하였는데 이것이 50MHz의 한계를 지니고 있어서 우리의 디자인의 성능을 다 구현하지 못하는 점이 아쉽다.

실제로 보드 상에서 47.92MHz의 최대 동작주파수로 작동하였고, 이 최대 동작주파수는 640 480의 해상도에서 약간씩 끊기는 현상으로 이어졌다.

 

<표 1>

 Fmax

 Restricted Fmax

 Clock Name

 47.82Mhz

 47.82Mhz

 CLOCK_50

 

(2) 구현 면적
광각 카메라를 필요로 하는 장치들은 대부분이 소형화 시스템인 경우가 많다. 예를 들어, 의학용 내시경, 차량용 블랙 박스 그리고 방범용 CCTV의 경우가 그렇다.

따라서 이런 소형화 장치에 장착이 되기 위해서 저 면적의 하드웨어로 구현되어야 한다. 그리고 우리의 디자인은 저 복잡도로 구현하기 위해서 산술 유닛 개수를 줄이도록 노력했다.
알테라 FPGA의 구현 면적을 비교해보기 위해서는 Logic Elements(LE)를 알아야 한다. LE는 보통 ASIC 디자인의 Gate Count(GC)로 비교해서 12GC, 메모리는 4GC 정도로 계산을 한다. 우리의 디자인이 달성한 LE의 개수는 다음과 같다.

 

<표 2>

 Combinational 

?Functions

Dedicated Logic 

Registers? 

 Total Logic 

Elements? 

2,684

1,662

6,421

? 

디자인 설명
 

(1) 배럴 왜곡 보정 기술
베럴 왜곡 보정의 알고리즘은 다음과 같은 그림 4로 나타낼 수 있다.
베럴 왜곡 보정 기술은 역 맵핑(backward mapping)부와 이중 선형 보간(Bilinear interpolation) 부, 크게 두 부분으로 나뉜다. 왜곡 보정 과정에서 왜곡된 이미지 공간을 distorted image space(DIS), 보정된 이미지 공간을 corrected image space(CIS)라 하자. 역 맵핑은 CIS 상의 개별 픽셀의 좌표에, 대응되는 DIS 상의 좌표를 맵핑시키는 과정이다. 역 맵핑을 통해, CIS의 각 픽셀에 대응되는 DIS의 픽셀 값을 바탕으로 CIS의 픽셀 값을 얻게 됨으로써, 주어진 DIS를 통해 CIS를 재구성하여 왜곡 보정을 수행한다.

 

4.jpg

 

5.jpg


그림 5는 역 맵핑을 통해 CIS 상의 (u, v)에 위치하는 P에 대응되는 DIS 상의 P′의 위치 (u′, v′)을 구하는 과정을 설명하기 위한 것이다.
그림 5에서 (u′c, v′c), (uc, vc)는 각각 DIS와 CIS의 중심 위치를 나타낸다. 그림에서 r, r′, θ, θ′은 P와 P′의 위치를 극 좌표계에서 표현한 것으로 다음과 같이 기술할 수 있다.

6.jpg

 

r과 r′의 관계는 일반적으로 다음과 같은 맵핑 다항식을 통해 모델링 된다.

7.jpg

여기에서, cn은 역 맵핑 계수이며, 최소 자승법을 통해 추정될 수 있다. 역 맵핑 과정에서 주어진 P에 대응되는 P′의 위치는 다음과 같이 구한다.

8.jpg

 

본 고에서 고려하고 있는 베럴 왜곡은 방사상으로 동일한 정도를 갖게 되므로, θ와 θ′은 같은 값이며, 이를 이용하여 위의 식은 다음과 같이 계산될 수 있다.

여기에서, s는 다음과 같이 정의되는 스케일링 팩터라 볼 수 있다.

9.jpg

 

P을 역 맵핑한 P′의 위치는 위의 식에 따라 구할 수 있고, DIS 상의 P′의 픽셀값을 CIS 상의 P의 픽셀 값으로 사용하여 CIS를 재구성하여 왜곡 보정을 수행하게 된다. DIS 상의 (a, b)에 위치한 픽셀 값을 DIS(a, b)으로 표현하자. 그러면, P’의 픽셀 값은 DIS(u′, v′)로 표현할 수 있는데, u′및 v′은 위의 식에 따라 계산되므로 유리수가 된다. 따라서 DIS(u′, v′)를 구하기 위해서는 DIS에 대한 리샘플링(resampling)이 필요하고, 이를 위해 다음과 같이 이중 선형 보간(bilinear interpolation)이 사용될 수 있다.

 

10.jpg

 

└a┘은 a보다 크지 않은 최대의 정수를 의미한다. 이와 같이 이중 선형 보간을 통해 구해진 DIS(u′, v′)을 CIS 상의 (u, v)에 위치하는 픽셀 값인 CIS(u′, v′)로 사용하여 CIS를 재구성한다. 이와 같은 역 맵핑 과정과 이중 선형 보간을 통해 CIS 상의 모든 픽셀에 대한 DIS 상의 픽셀 값을 순차적으로 구하여, 주어진 DIS를 바탕으로 CIS를 복원한다.
그림 6은 위의 과정을 나타낸 데이터 패스이다. 제안하는 렌즈 왜곡 보정 프로세서는 고속의 보정 속도를 달성하기 위하여7 단계의 파이프라인 구조로 설계되었다. 1-4 단계에서는 역 맵핑을 수행하고, 5-7 단계에서는 이중 선형 보간을 수행한다.

 

5-1.jpg

 

먼저 역 맵핑 부의 단계 1에서는 픽셀의 x 또는 y의 좌표를 한 픽셀씩 이동시키는 동시에 n번째의 픽셀과 이미지 중심의 거리인 rn의 제곱을 계산하고, 단계 2와 단계 3에서는 앞 단계에서 계산된 값을 통해 역 맵핑을 수행하기 위한 스케일링 팩터 Sn를 계산한다. 단계 4에서는 스케일링 팩터 Sn를 이용하여 역 맵핑된 좌표의 위치를 계산하고, 이중 선형 보간을 수행하기 위한 변수들을 계산한다. 그림 6에서 MAC은 3개의 입력 값 중 오른쪽 두 개의 입력 값을 곱하고 나머지 하나를 더하는 동작을 수행하는 모듈이다.

 

이중 선형 보간 부에서는 역 맵핑 보간 부에서의 출력을 이용하여 왜곡된 이미지 픽셀의 좌표에 인접해 있는 4개의 정수 좌표의 픽셀 값을 DIS 메모리로부터 읽어서,이를 사용하여 이중 선형 보간을 수행하여 픽셀 값을 구한 후, CIS 메모리에 보정된 픽셀 값을 쓰게 된다.

 

(2) 효율적인 메모리 인터페이스
본 설계에서는 추가적으로 FPGA 상의 메모리를 효율적으로 이용하기 위해, 그림 7과 같은 메모리 인터페이스를 설계하였다.
이중 선형 보간에서는 하나의 보정된 CIS 픽셀 값을 위해 네 개의 DIS 픽셀 값을 필요로 한다. 이중 선형 보간이 신호 사이클로 동작한다면 가장 빠른 시간 내에 DIS 픽셀 4개를 모두 가져올 수 있지만 4개의 프레임 크기만큼의 메모리 용량이 필요하므로 제한된 FPGA 메모리 용량으로는 이를 구현하기 불가능하다(a). 이 외에 1개의 DIS에서 한번의 보정에 다중 사이클로 4개의 픽셀 값을 읽어오기도 하지만, 4개의 메모리를 사용하는 것 보다 1/4 정도의 속도를 달성하므로 실시간 보정에 적합하지 않다(b).

그런 이유로 본 설계에서는 적은 메모리를 사용하면서도 실시간 보정을 달성하기 위하여 렌즈 왜곡 보정 프로세서와 메모리 사이에 버퍼를 포함한 인터페이스 구조를 설계하였다.

6-1.jpg

6-2.jpg

 

렌즈 왜곡 보정 과정에서의 이중 선형 보간에서 래스터 스캔 순서의 보정에 따라 생기는 DIS 픽셀들 간의 공간적 지역성(spatial locality)을 이용하였다. 그림 8은 래스터 스캔에 따른 공간적 지역성을 나타낸 그림이다.
래스터 스캔 형식의 픽셀 계산 방법에서는 그림과 같이 이중 선형 보간 과정에서 이 전에 사용하였던 픽셀과현재 사용하는 픽셀들 간에 중첩되어 사용되는 경우가 생긴다.


본 설계에서는 메모리 인터페이스 구조에 중첩되는픽셀을 저장하여 메모리를 접근하지 않고도 바로 렌즈 왜곡 보정 프로세서에 전달할 수 있도록 버퍼를 삽입하였다. 메모리 인터페이스의 구조는 그림 9와 같다.
버퍼에 공간적 지역성이 발생하는 픽셀들을 저장하여 한 덩어리 방식으로 1 사이클만에 읽을 수 있게 한다. 한 덩어리 방식은 모든 데이터를 비교하여야 하므로 비교 대상이 많을 수록 복잡도가 큰 반면에 1 사이클만에 모든 비교과정을 마칠 수 있으므로 속도가 가장 빠르다.
버퍼에 픽셀들을 저장하는 방식은 순환형식을 이용한다. 순환방식은 데이터가 모든 버퍼에 일정한 시간만 저장이 된다. 래스터 스캔 방식에서는 일정한 보정 횟수가 지나면 픽셀 데이터가 사용되지 않기 때문에 가장 적당한 쓰기 방식이다.
렌즈 왜곡 보정 프로세서의 특징을 파악하여 적합한 메모리 인터페이스 구조를 설계함으로써 제한된 메모리를 가지고도 실시간으로 보정 속도를 달성 할 수 있었다.

6-3.jpg

렌즈 왜곡 보정 시스템 및 구현 결과

 

6-4.jpg

6-5.jpg

 

디자인을 설계하면서 배울 수 있었던 점들

렌즈 왜곡 보정 과정 부분을 제외하고는 Quartus에서 제공하는 Qsys를 사용하여 모듈을 자동적으로 만들어서 사용하였다. TRDB_D5M 카메라를 통해 2592x1944의 해상도의RAW 이미지를 받아 VGA 해상도의 8-비트 그레이 스케일로 변환 후 브리지로 출력한다. 브리지에서 입력을 받아 설계한 아키텍처에서 LDC과정을 마친 후 출력한다. 그 후 LDC에서의 출력을 브리지를 이용하여 다시 입력을 받아 처리과정 후 VGA 출력을 하는 과정으로 진행되었다.

 

진행과정을 아래의 그림 12와 같이 간단하게 나타내었다.
Qsys를 사용하여 설계 내용 외에 입력처리와 출력을 위해 필요한 모듈들을 라이브러리 형식으로 제공하여 간단한 파라미터 입력을 통하여 만들 수 있다는 점에서 FPGA로 구현 시 전처리 과정과 후처리 과정에 대한 설계를 하지 않아도 된다는 장점이 있었다. 또한 Qsys는 카메라의 종류나 보드의 종류, 출력 디스플레이까지도 모두 선택이 가능하여 각자 다른 환경에서도 간단한 변경으로 호환이 가능하다. 설계한 아키텍처와 브리지를 통하여 정보를 주고 받을 때도 일반적인 메모리의 프로토콜과 일치하게 I/O가 선언이 되어 있어서 설계한 아키텍처의 구조 변경 없이 사용할 수 있었다.

 

6-6.jpg

 

하지만 Qsys를 사용하면서 아쉬웠던 점이 몇 가지 눈에 띄었다. 영상 처리 과정에서 D5M 카메라에서 들어오는 RAW이미지의 해상도가 너무 높아 영상을 끊김 없이 출력할 수 있는 속도를 달성하기 어렵다는 단점이 있었다. 카메라에서 이미지를 입력 받을 때 A/V Config라는 라이브러리를 사용하였는데 파라미터에 여러 해상도를 선택할 수 있었음에도 최대 해상도인 2592 x 1944 해상도 외에는 유효한 입력이 들어오지 않았다. 이 외에도 이라이브러리에 익스포저를 입력할 수 있는 포트를 생성할 수 있었음에도 불구하고 이에 대한 설명이 설명서에 언급이 되어 있지 않아 익스포저 조절이 불가능하였다.

 

이외에도 I2C를 통해 카메라를 조절하는 점에 있어서 제한사항이 있었다. 구입한 카메라에 동봉된 CD의 내용에 예제 코드가 있었는데 이 코드에서는 여러 해상도를 선택하여 카메라 자체에서 출력하는 기능과 익스포저뿐만 아니라 프레임 비율와 줌 조절기능까지 I2C 모듈에서 모두 갖추었다. 그리고 Quartus 13.0을 이용하여 작업 수행하면서 Qsys상의 자잘한 버그들이 있어 약간의 수정을 통하여만 컴파일이 되는 문제점들도 눈에 띄었다. 설계한 아키텍처의 검증은 SignalTapII 로직 아날라이저를 사용하였다.


이 프로그램은 시뮬레이션이 아닌 실제로 FPGA에서 동작하는 과정에서 선이나 레지스터에 저장된 값들을 확인하여 데이터의 흐름을 파악할 수 있다는 점에서 효율적인 디버깅을 할 수 있는 툴이였다. 특히 통상적으로 이용되는 시뮬레이션 프로그램과 비슷하게 파형형식의 뷰어를 제공한다는 점에 있어서 데이터 확인이 쉽다는 장점이 있었다. 실제로 프로젝트를 수행할 때도 FPGA로 동작이 잘 안되었을 때 이 프로그램을 사용하여 디버깅을 한 결과로 실제로 FPGA상에서 이미지가 출력 될 수 있도록 하였다. 하지만 이 프로그램에서도 아쉬웠던 점이 있었다. 타임 유닛을 설정하는 부분이 있었지만 타임 유닛 조정에 따라 파형이 바뀌지 않는다는 점이었다. 분석하는 데 있어서 큰 문제가 있지는 않았지만 기존의 파형 뷰어와 같이 줌기능이 제공되었더라면 하는 아쉬움이 들었다.

 

Quartus의 한계가 아닌 메인보드의 하드웨어상 한계로 인해 구현이 불가능한 점도 있었다. 설계한 아키텍처의 특성상 640x480 크기의 프레임 버퍼 2개를 Qsys상에서 사용하였는데 DE2-115보드의 SRAM 용량이 2MB밖에 되지 않아서 24비트 RGB로 구현하지 못하고 Qsys상에 rgb 리샘플러라는 라이브러리를 사용하여 8비트 그레이 스케일로 변환 후 이미지를 처리하였다. 총 로직 갯수는 10%미만을 사용하였던 것에 비해 저장공간이 부족하여 한계가 있었다는 점에 있어서 안타까운 점이 있었다.

 

끝으로 영상을 FPGA 데모 시스템으로 구현할 때 가장 도움이 되었던 프로그램은 Qsys였다. 하지만 문서에 의존하여 IP들을 사용해야 한다는 점과 아직 활성화 되지 않아 자료가 부족하여 기능을 모두 활용할 수 없었던것 같다. Qsys는 영상, 통신 등등 많은 부분에 사용이 가능한 라이브러리를 제공하기 때문에 전반적인 툴 사용 교육보다도 각각의 분야에 특성화된 Qsys 사용법 교육이나 분야별로 유용하게 사용되는 툴에 대한 교육이 이루어 진다면 훨씬 사용가치가 높아질 것으로 예상이 된다.

 

<반도체네트워크 7월>

디지털여기에 news@yeogie.com <저작권자 @ 여기에. 무단전재 - 재배포금지>