Abstract
As mobiles devices with high-spec camera built in are used widely, the visual quality enhancement of the high-resolution images turns out to be one of the key capabilities of the mobile devices. Due to the limited computational resources of the mobile devices and the size of the high-resolution images, we should choose an image processing algorithm not too complex and use an efficient implementation technology. One of the simple and widely used image quality enhancement algorithms is contrast stretching. Java libraries running on a virtual machine, JNI (Java Native Interface) based native C/C++, and NEONTM SIMD (Single Instruction Multiple Data) are common implementation technologies in the case of Android smartphones. Using these three implementation technologies, we have implemented two image contrast stretching algorithms - linear and equalized, and compared the computation times. The native C/C++ and the NEONTM SIMD outperformed the native C/C++ implementation by 56-78 and 50-76 time faster respectively.
고사양 디지털 카메라를 내장한 스마트 기기의 보급이 급격하게 증가하면서 고해상도 영상의 품질을 개선하는 기능이 중요해지고 있다. 모바일 기기의 제한된 자원과 영상의 정보량을 감안하면 지나치게 복잡하지 않은 알고리즘을 선택해야 하고 가능한 효율적인 구현 기술을 사용해야 한다. 영상의 질을 향상시키는 기법 중 간단하면서도 널리 사용되는 기술은 명암 값 분포를 조절하는 명암비신장 (contrast stretching) 기법이다. 안드로이드 스마트폰의 경우, 구현 기술로는 가상 머신 위에서 동작하는 자바 라이브러리, JNI (Java Native Interface) 기반 원시 (native) C/C++ 구현 기술, 그리고 SIMD (Single Instruction Multiple Data) 기법이 적용된 NEON 구현 기술 등이 있다. 이 연구에서는 이 세 가지 기술을 선형 명암비신장 연산, 그리고 평활화 명암비신장 연산에 적용하여 그 성능을 실증적으로 비교 분석하였다. 그 결과 원시 C/C++과 NEON 라이브러리의 실행 속도는 자바 라이브러리 실행 속도에 비해 각각 56-78배, 50-76배 빠르다는 점을 확인하였다.