Altera Design Contest 수상팀 논문 Altera Design Contest 수상팀 논문
김재호 2014-10-17 09:31:17

이미지에 특수효과 처리를 하여 저장하는
카메라 애플리케이션 데카오스토리

 

본 프로젝트에서 개발하는 데카오스토리는 카메라를 통해 촬영한 이미지에 특수효과 처리를 하여 저장하는 카메라 애플리케이션이다. 카메라를 통해 촬영한 이미지를 터치스크린에 출력하고, 촬영한 이미지 위에 메모를 작성할 수 있다.
또한 필터를 통하여 이미지에 특수 효과를 부여함으로써 이미지의 분위기를 바꿀 수 있다.
수상팀/건국대학교, 양준모(DECA Mega)
지도교수/김선용교수

 

디자인 소개
본프로젝트에서 개발하는 데카오스토리는 카메라를 통해 촬영한 이미지에 특수효과 처리를 하여 저장하는 카메라 애플리케이션이다. 카메라를 통해 촬영한 이미지를 터치스크린에 출력하고, 촬영한 이미지 위에 메모를 작성할 수 있다. 또한 필터를 통하여 이미지에 특수 효과를 부여함으로써 이미지의 분위기를 바꿀 수 있다. 카메라를 통해 자신의 경험을 기록으로 남기고 이미지를 꾸며 간직하고자 하는 영상매체에 익숙한 젊은 계층을 목표 사용자로 개발한다.

 

개발 목적
이미지 서브 시스템은 애플리케이션 프로세서(이하 AP)와 같은 프로세서에 필수 적인 IP로 카메라로부터 입력 받은 영상을 처리하는 영상 IP이다. 소프트웨어로 처리하던 이미지 효과를 HW IP로 구현함으로써 영상처리의 속도를 높이고 입력 영상의 활용도를 높이도록 멀티 펑션 이미지 프로세싱 IP를 SoC 개발자에게 제공 하고자 한다. 본 프로젝트에서 멀티 펑션 이미지 프로세서를 개발하고 NIOS II 프로세서와 함께 SoC를 설계하여 이미지 특수 효과 처리가 가능한 카메라 애플리케이션을 개발하여 IP의 활용가치를 보여주고자 한다.

 

(1) 시스템 아키텍처
Altera NIOS II 프로세서와 SOPC 빌더를 이용해 SoC 프로세서를 구현한다. 이미지 특수 효과 처리가 가능한 카메라 애플리케이션을 구현하기 위해 CMOS 카메라, 터치 스크린, LCD 컨트롤러를 개발하고 SoC로 SOPC 빌더에서 프로세서로 구현하기 위해 아발론 버스 랩퍼를 구현한다. 영상처리와 프레임을 저장하기 위한 각 메모리 컨트롤러를 구현하고 카메라 입력 영상을 처리하기 위한 멀티 펑션 이미지 프로세서를 개발한다.

 

1.jpg

 

아발론 버스 프로토콜은 메모리 맵 시스템으로 시스템을 구성하기 위해 메모리 맵을 이용하여 설계한다. IP SFR(특수 함수 레지스터)은 각 H/W 컨트롤러와 멀티 펑션 이미지 프로세서를 동작시키기 위한 레지스터로 각각의 IP에 따라 영역을 나누어 사용한다.

SOPC 빌더를 이용하여 NIOS II 프로세서와 함께 SoC를 설계하고 NIOS II SBT IDE Tool을 이용해 펌웨어를 개발한다.

 

(2) 멀티 펑션 이미지 프로세서

 

● 블록도
NIOS II로부터 세팅된 SFR의 값에 따라 이미지 프로세싱 모듈이 이네이블되고 SRAM에서 읽은 SRC 이미지를 처리하여 최종 이미지로 출력 후 SD 카드에 저장한다.

● 에지 검출
밝기 변화에 의한 윤곽선의 기울기 변화를 이용함 1차 미분으로 에지가 존재하는지의 여부를 2차 미분으로 +, - 부호를 통해 픽셀 값 변화의 방향을 알 수 있다. 1차 미분값의 크기를 스레시홀딩 함으로서 이진화하여 윤곽선을 추출해낼 수 있다.


● 이미지 산술 연산자 및 그레이 스케일 컨버터
픽셀 값의 산술연산을 통해 유저가 원하는 색상과 명도를 띄는 이미지를 얻어낸다. 이미지 산술연산 중 하나인 그레이 스케일 컨버터를 이용하면 R,G,B 3색의 평균값을 구하면 해당 픽셀의 명도를 알 수 있다. 이값이 곧 그레이 스케일 이미지가 되므로 원하는 흑백사진을 얻을 수 있다.


● Motionx4
여러 장의 사진을 차례로 찍어, 분할된 화면에 순서대로 배치한다.

 

(3) 메모리 컨트롤러
영상의 처리 및 카메라 촬영 이미지 저장, 펌웨어 프로그램 저장을 위해 각 메모리컨트롤러를 개발하고 시스템에 SoC로 구성 한다. 각각의 메모리 용도는 아래와 같다.
* SDRAM - 카메라 촬영 원본 SRC 이미지 저장
* SRAM - 멀티 펑션 이미지 프로세싱에 사용되는 IP의 캐시용도 메모리
* 플래시 메모리 - 펌웨어 코드 저장

 

2.jpg

 

(4) 하드웨어 컨트롤러
처리가 가능한 카메라 애플리케이션을 구현하기 위해 CMOS 카메라, 터치 스크린, LCD 컨트롤러를 개발하고 SoC로 SOPC 빌더에서 프로세서로 구현하기 위해 아발론 버스 랩퍼를 구현한다.

 

3.jpg

 

검증

구현한 IP의 검증을 위해 모듈 레벨에서의 검증과 탑 레벨에서의 검증으로 수준을 나누어 검증한다. 모듈 레벨에서는 각 IP의 기능관점에서 검증을 수행하고 탑 레벨에서는 버스 프로토콜을 이용한 파이프라인 관점에서의 검증을 수행한다.


(1) 모듈 레벨 검증
모듈 레벨 검증에서는 모듈의 기능 관점에서 검증을 수행한다.
모듈이 정상 동작하는지 확인하기 위해 테스트 벡터를 선정하고 기대되는 출력을 정의하여 RTL 디자인에 테스트 벡터입력 시 기대 출력과 동일한 출력값이 출력되는지를 테스트 벤치를 통해 확인한다.

 

(2) 탑 레벨 검증
탑 레벨 검증에서는 전체 동작의 파이프라인의 정상 동작을 검증하기 위해 특정 파이프에 레이턴시를 주어 올바른 데이터를 처리하고 다음 파이프에 전달하는지 여부를 검증한다.

 

* 기능 설명
본 프로젝트에서 개발한 데카오스토리는 카메라를 통해 촬영한 이미지에 특수효과 처리를 하여 저장하는 이미지 서브 시스템이다. 카메라 촬영을 통해 이미지 데이터를 얻으면, 먼저 이를 메모리에 저장한 뒤 화면에 보여준다. 이후 키 조작을 통해 색조 변경을 이용한 옛날 사진 등의 효과와, 마스크를 이용한 윤곽선추출, 샤프닝, 엠보싱 같은 특수 효과를 입혀 새로운 이미지를 얻을수 있도록 하였다. 구현 과정은 다음과 같다.
가장 먼저, CMOS 카메라를 제어하기 위한 모듈을 구성하여, 이 모듈로부터 현재 출력되는 픽셀의 좌표와 픽셀값 등을 얻을 수 있도록 하였다. 이후, RAM 컨트롤러를 구성하여 RAM 메모리에 이미지를 저장하도록 하고, 저장한 이미지를 보여주기 위한 비디오 출력을 내보내는 VGA 컨트롤러를 구현하였다. 그리고 원하는 효과를 선택하면 이미지를 처리한 뒤 화면에 띄울수 있도록 하기위해 키 조작을 받아 회로 전체의 동작을 제어하는 커맨드 모듈을 설계하였다.

 

* 성능 파라미터
본 프로젝트에서 구현한 디자인은 영상 처리 기능을 수행하므로, 가장 중요한 성능 파라미터는 영상처리의 속도이다. 이 디자인에서 영상처리 속도는 이론적으로 320×240 16비트 비트맵 이미지에서 7×7 마스크 연산 기준으로 (320×240×4clock×50mask/25MHz) = 614.4ms의 지연 시간이 생긴다. 이를 검증하기 위해 디자인 내부에 디지털 시계를 포함하여 시간을 측정한 결과, 이론값과 같은 값을 얻을 수 있었다. 이는 클럭에 따라 정확히 동작하는 하드웨어 설계의 특성 때문으로 여겨진다. 속도를 더 빠르게 향상시킬 수 있는 방법은 있었으나, 본 디자인은 직접적인 유저 인터페이스로 동작하는 애플리케이션 IP이므로 첨예한 속도 성능의 조건이 엄격하지 않은 점을 고려하여, 가장 안정적인 설계를 유지하기 위해 614.4ms의 다소 느린 처리 속도를 지니게 되었다.


다른 성능 파라미터의 하나로, 이미지의 화질을 들 수 있다. 본 디자인은 320×240 16비트 비트맵 이미지를 기준으로 설계되었다. 이미지의 크기와 픽셀의 비트수가 일반적인 영상보다 다소 떨어지지만, 일반적인 수준의 화질과 큰 차이를 느낄 정도는 아니다. 아쉬운 점은, 디자인에서 처리하는 이미지의 화질이 CMOS 카메라에서 출력하는 화질보다 뒤떨어진다는 것으로, 하드웨어적인 한계성 때문이 아닌 설계의 용이성 때문에 성능이 저하되었다고 할 수 있다.
마지막으로 영상처리에 사용한 마스크의 정밀도를 말 할 수 있다. 마스크의 크기는 조금 큰 크기로, 7 X 7 크기의 마스크를 사용하였다. 엠보싱과 샤프닝 등의 효과는 3X 3 마스크로도 충분히 가능하였으나, 윤곽선 추출을 미분연산이 아닌 마스크 연산을 통해 구현하기 위해서는 더욱 큰 마스크가 필요했기 때문에 7 X 7 마스크를 사용하였다.

 

* 디자인 설명
앞서 언급한 바와 같이, 본 디자인은 픽셀값 산술연산과 영상 마스크처리를 통해 구현하였다. 색조변경을 위한 픽셀값 산술연산은 원하는 색조(엷은 노란색, 붉은색 등)의 RGB 색깔비율을 분수로 구한 다음, 분자 부분을 픽셀의 레드, 그린, 블루값에 곱하고, 분모로 이를 나눔으로서 분수의 곱을 구현하였다. 각 색깔의 값이 최대값을 넘을 경우에는 포화시킴으로서 오버플로우 현상을 막았다. 또한, 색깔의 값에 나눠줄 분모값은 2의 거듭제곱수로 통일함으로서, 나눗셈 연산을 로지컬 시프트로 대체할 수 있게 함으로서 시스템의 스피드와 크기를 향상시켰다.

특수효과를 위한 영상 마스크처리는 각 특수효과에 필요한 마스크값을 사전에 소프트웨어로 모의 구현하여 최적의 마스크값을 얻어냈다. 그 후, 마스크값을 정수화시켜서 기준 픽셀을 중심으로 마스크 좌표에 따른 상대적 위치의 픽셀값을 곱하여 전체 마스크에 대해 값을 누적한후, 일반화를 위하여 일정 값으로 나누었다. 이 또한 2의 거듭제곱수를 나눔으로서 시스템의 속도를 빠르게 유지하였다.

디자인의 자세한 동작 설명은 아래와 같다.

 

1) 색조변환: 픽셀 값의 산술연산을 통해 유저가 원하는 색상과 명도를 띄는 이미지를 얻어낸다. 이미지 산술연산 중 하나인 그레이 스케일 컨버터의 경우, R,G,B 3색의 평균값을 구해서 얻어지는 해당 픽셀의 명도값을 이용하였다. 이 값이 곧 그레이 스케일 이미지가 되므로 원하는 흑백 사진을 얻을 수 있다.

또한, 노란 색조, 붉은 색조 등, 특정 색을 부각시킨 효과를 줄 수도 있다.

 

4.jpg

 

2) 윤곽선 추출: 밝기 변화에 의한 윤곽선의 기울기 변화를 이용함 1차 미분으로 에지가 존재하는지의 여부를 2차 미분으로 +, - 부호를 통해 픽셀 값 변화의 방향을 알 수 있다. 1차 미분값의 크기를 스레시 홀딩 함으로서 이진화하여 윤곽선을 추출해낼 수 있다. 윤곽선 추출에서 사용한 마스크는 미분 연산을 대체하는 프리위트 마스크이다.

 

4-1.jpg

 

3) 샤프닝: 디지털 영상에서 상세한 부분을 더욱 강조하여 표현하는 방법이다. 영상의 상세한 부분은 저주파 성분만 제거함으로써, 보다 선명한 화면을 얻을 수 있다. 여기에 사용된 마스크는 기준 픽셀값을 다소 증폭한 뒤, 주변 픽셀값을 빼 주는 원리로 구현되었다.

 

4-2.jpg

 

 

4) 엠보싱: 원본 영상 내에서 좌측 상단부분이 우측 하단부분 보다 더 밝은 값을 갖는다면 중간부분에 양의 정수를 갖는 밝기값이 들어가게 된다. 밝기 차이가 두드러진 부분에서 더욱더 밝은 값을 갖는 것을 이용해 양각 효과를 얻을 수 있다. 엠보싱 효과를 가한 영상을 보면, 검은 고무판에 조각칼로 조각을 한 듯한 형태가 나타난다.

 

4-3.jpg

 

5) 메모리 컨트롤러: 영상의 처리 및 카메라 촬영 이미지 저장, 펌웨어 프로그램 저장을 위해 각 메모리 컨트롤러를 개발하고 시스템에 SoC로 구성하는 것이 최초 목적이었으나, NIOS의 적용 및 SoC 구성 대신, 회로 자체로 동작하는 IP를 구현함으로서 메모리 컨트롤러 또한 직접 설계하였다.

 

5.jpg

 

6) 하드웨어 컨트롤러: 처리가 가능한 카메라 애플리케이션을 구현하기 위해 CMOS 카메라드라이버를 구현하였다. 시스템의 시양에 맞추어 픽셀값을 추출하기 위해 픽셀 좌표의 싱크를 맞추기 위한 최적화 작업이 적용되었다.

 

6.jpg

 

7) 명령 모듈: 회로의 동작을 UI로 제어할 수 있게 하는 모듈을 설계하였다. 명령 모듈의 동작은 아래의 상태 다이어그램을 통해 간단히 알 수 있다. 먼저,아이들 상태에서는 최초 입력을 기다리다가 입력이 들어오면 다음 상태로 넘어간다. 캡처 상태에서는 CMOS 카메라로부터 각 좌표의 픽셀값을 순서대로 받아 RAM에 저장하는 동작을 한다. isplay0에서는 앞에서 촬영한 영상을 VGA 출력 화면으로 보여주고, Mode 0와 Mode 1에서는 순서대로 마스크 또는 색조 효과의 선택과 세부 선택을 수행한다.

마스크 상태에서는 영상 마스크 처리를, 톤 상태에서는 색조 변환 처리를 수행한 다음, Display1 상태에서 영상처리가 수행된 영상을 화면으로 보여준다.

 

7.jpg

 

결론
알테라 디자인 콘테스트에 참여하게 되어 보다 Quartus II 의 유용함에 대해서 잘 알 수 있었다. 영상처리를 위해 필요한 많은 연산량을 짧은 클럭 사이클동안 수행해 줄 수 있는 내부 곱셈기 및 내부 메모리와 메모리 인터페이스를 제공하는 Altera 메가펑션등의 유용성은 신선한 충격이었다. 수 GHz의 높은 클럭으로도 상당한 시간이 걸리는 영상처리를 25MHz/20000LE의 FPGA로 구현해보았다는 사실 또한 매우 고무적이었다. 이번기회를 통해 디지털 시스템에 대한 이해도가 높아졌고, FPGA의 유용성에 대해서도 잘 알게 되었다. 기회가 된다면, 다음에도 대회에 참가하여 훨씬 수준 높은 설계를 선보이고 싶다.

 

<반도체네트워크 10월>

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