반응형

기존에 쓰던 OpenCV2.1과 OpenCV 3.1의 속도 차이를 비교해 보려 한다.

OpenCV2.1은 기본 빌드였고, OpenCV3.1은 TBB, CUDA 등의 옵션을 추가하였다.

테스트는, 원본 동영상의 처음부터 200번째 프레임까지 

해당 영상 처리를 적용하면서 얼마나 시간이 소요되는지를 측정하여

FPS를 구하였다.

원본 동영상의 사이즈는 640 * 360, Resize는 1280 * 720으로 하였다.

참고로, PC 사양은 다음과 같다.

  • 프로세서 : Intel(R) Core(TM)2 Duo CPU E4600 @ 2.40GHz  2.40 GHz
  • RAM     : 2.00GB
  • 시스템   : 32비트 운영체제, x64 기반 프로세서


결과는 다음과 같다.

비교항목 

OpenCV2.1 

OpenCV3.1(TBB) 

OpenCV3.1(TBB+CUDA) 

기본 

 62.75 FPS

 63.37 FPS

 

Resize 

 15.70 FPS

 18.03 FPS

 

떨림보정 

 8.01 FPS

 28.26 FPS

 

객체추적

 42.66 FPS

 59.26 FPS

 

안개보정

 28.01 FPS

 29.22 FPS

 

윤곽선 강조

 15.84 FPS

 31.45 FPS

 

떨림+객체+안개+윤곽

 5.53 FPS

 15.08 FPS

 

Resize+떨림+객체+안개+윤곽

 1.58 FPS

 4.39 FPS

 


이로써, OpenCV3.1(with TBB)로 전환함으로써 속도 향상이 가능함을 확인하였다고 할 수 있다.

한편 CUDA에 대해서는, 별도의 그래픽카드를 장착하지 않았기 때문에 테스트하지 못했다.

반응형

'영상처리 프로젝트' 카테고리의 다른 글

OpenCV속도비교2  (1) 2016.02.29
OpenCV 3.x에서의 OpenCL  (0) 2016.02.25
OpenCV 3.0 빌드 체험기2  (0) 2015.12.15
OpenCV 3.0 빌드 체험기  (0) 2015.12.10
HD 및 HDR의 이해  (0) 2015.12.04
반응형

OpenCV 3.0 빌드 체험기2

몇번의 시행착오를 거쳐서, 

드디어 빌드에 성공했다.

다음 사이트 내용을 참고하여, Visual C++ 2008 Express Edition용으로 빌드하였다.

* 참고 사이트 : http://docs.opencv.org/3.0-beta/doc/tutorials/introduction/windows_install/windows_install.html


그러면서 알게 된 몇가지 주의점을 여기에 적어 본다.

  1. CMake에서 ENABLE_SOLUTION_FOLDERS 체크 해제
    • VisualStudion가 Solution Folder를 지원하는 경우에는, 이 항목을 체크하는 것이 좋다. 하지만, VC++ 2008 Express Edition의 경우에는 Solution Folder를 지원하지 않기 때문에, 체크를 해제해야만 했다.
  2. TBB(Threading Building Blocks)버전은 4.3으로
    • TBB의 최신 버전은 4.4이다. 하지만 4.4의 경우, VC 10 이전 버전용 라이브러리가 제공되지 않는다. VC++ 2008은 VC 9이며, VC 9용 라이브러리를 제공하는 TBB 최신 버전은 4.3이다.
  3. std::vector::data의 컴파일 오류 해결
    • VC++ 2008로 빌드하다 보면, 다음과 같은 오류가 발행한다.
      • error C2039: 'data' : is not a member of 'std::vector<_Ty>'
    • 원인은, std::vector::data는 C++ 11부터 추가된 메소드이기 때문이다.
    • 따라서, 에러가 나는 부분은 VC 9에 맞게 바꾸어 주어야 하는데, 구체적으로는 다음과 같다.
      • modules/videoio/src/cap_mjpeg_decoder.cpp의 793번째 행 :
      • m_file_stream.read(result.data(), chunk.m_size);을
      • m_file_stream.read(&result[0], chunk.m_size);으로 변경
  4. 사전에 VS2008SP1 설치
    • 설치 후 빌드를 하다 보면, '__cpuidex'라는 구문 때문에 컴파일 에러가 발생하는 경우가 있다.
    • 이에 대해 검색해 보면, VS2008SP1을 설치해야 한다고 나온다.


위와 같은 내용만 신경 쓰면, 문제 없이 빌드가 진행된다.

반응형

'영상처리 프로젝트' 카테고리의 다른 글

OpenCV 3.x에서의 OpenCL  (0) 2016.02.25
OpenCV 속도 비교 테스트 - 2.1 vs 3.1(with TBB)  (0) 2016.02.18
OpenCV 3.0 빌드 체험기  (0) 2015.12.10
HD 및 HDR의 이해  (0) 2015.12.04
OpenCV 속도 개선 방법  (2) 2015.12.04
반응형

OpenCV 3.0 빌드 체험기

기존에 쓰던 OpenCV 버전이 2.1인데,

속도 개선도 좀 하고, 혹시 새로운 알고리즘도 활용할 수 있지 않을까 해서

이참에 3.0으로 업데이트해 보려고 한다.

OpenCV 3.0의 Pre-Built 버전은 VC11과 12용으로밖에 안나와 있어서,

사정상 VC2008을 써야 하는 나로써는

소스로부터 직접 빌드를 해야 한다.

그런데, 빌드 과정이 내게도 익숙하지 않은지라,

다음 사이트를 참고해서 한단계씩 진행해 나가고,

그 과정을 기록해 보려 한다.

* 참고 사이트 : http://docs.opencv.org/3.0-beta/doc/tutorials/introduction/windows_install/windows_install.html


  • 다음 사이트로부터, 윈도우즈용 OpenCV를 다운로드한다.
    • http://opencv.org/downloads.html
  • 참고 사이트 내용대로, OpenCV를 빌드한다.
    1. 사전 준비 사항 
      • TBB : 병렬 처리를 통해 속도 향상 가능. Intel은 물론 AMD CPU에서도 사용 가능
      • IPP : 멀티 코어 시스템상에서 멀티미디어, 데이터 처리, 통신 등을 빠르게 처리할 수 있도록 최적화해서 제공되는 라이브러리. OpenCV에 이미 포함되어 있으므로, 따로 신경 쓰지 않아도 됨
      • Intel ⓒ IPP Asynchronous C/C++는, 아직 IPP에 포함되지 않는 것 같으므로 건너뜀
      • Eigen : 선형대수를 위한 C++ 라이브러리
      • CUDA는, AMD에 적용할 수 없으므로 건너뜀
      • OpenEXR은, HDR(High Dynamic Range)를 위한 작업에 사용되므로, 건너뜀
      • OpenNI Framework는, Kinect와 같은 장치를 쓸 때 필요하므로, 건너뜀
    2. 빌드를 위해, CMake를 Install한다.(CMake는, 크로스-플랫폼 빌드 도구이다.)
    3. Git 툴을 인스톨한다.(예:msysgit + TurtoiseGit)
    4. 어느 폴더에 다운로드 받을지를 정한 다음(예 : D:\OpenCV), 다음 주소의 내용을 Clone한다
    5. TBB를 다운로드한 다음, 압축 해제 후 특정 폴더(예 : D:\OpenCV/dep)에 넣어둔다.
    6. CMake(cmake-gui) 실행 후, OpenCV 소스폴더를 지정(예 : D:\OpenCV/Source)해 주고, 빌드용 파일이 저장될 폴더를 지정(예 : D:\OpenCV/Builds)해 준다.
    7. Configure 버튼을 누른다. 그러면, 컴파일러를 지정하라는 대화상자가 뜨는데, 적절한 컴파일러(내 경우는 Visual Studio 9 2008)을 선택해 준다.
    8. 빌드 가능한 패키지들이 기본적으로 선택되어진 화면이 나타난다. 여기에 추가할 패키지를 선택하고, 다시 Configure 버튼을 누른다.
    9. 빌드 정보가 부족한 경우, 추가적인 정보를 입력할 수 있게 해당 필드가 빨갛게 하이라이트 되어서 나타난다(내 경우는, TBB의 INCLUDE폴더 경로). 해당 필드를 수동으로 입력해 준 다음, 다시 Configure버튼을 누른다. 이 과정을 빨간색 하이라이트가 나오지 않을 때까지 반복한다.
    10. Generate 버튼을 누르면, 빌드용 파일이 지정된 폴더에 저장된다.
    11. 해당 폴더로 가서, OpenCV.sln파일을 열면 VisualStudio에서 솔루션이 열린다. 이후로는, VisualStudio를 통해 빌드를 진행하면 된다.


반응형
반응형

HD 및 HDR의 이해

HD를 검색하는 중에 HDR이란 단어를 발견하게 되었다.

처음에는 HD와 관련있는 용어인가보다 싶었는데

전혀 그렇지 않을뿐더러, 나름 흥미로운 내용이라

그냥 넘어가기 아쉬워서, 간단하게나마 정리해 보려 한다.


1. HD(High-Definition)

HD는 High-Definition의 약자인데, 이미 대중화된 용어라서

누구나 대략적인 의미는 알고 있을 것이다.

위키백과에 보면, SD(Standard definition, 표준해상도)보다 더 높은 해상도를 의미한다고 나와 있다.

https://ko.wikipedia.org/wiki/고선명_비디오

또한, 다음 링크에는 LG 디스플레이에서 해상도 관련 용어를 풀어쓴 내용이 나온다.

http://blog.lgdisplay.com/2014/07/그림으로-쉽게-알아보는-hd-해상도의-차이

정리하자면, 다음과 같다.

 

 해상도

포맷 

 SD

720 X 480

480p 

 HD

1,280 X 720 

720p 

 FHD

1,920 X 1,080 

1080p, 1080i 

 QHD

3,840 X 2,160 

2160p 

 UHD

4,096 X 2,160 

2160p 


2. HDR(High Dynamic Range Imaging)

위키백과 링크는 다음과 같다.

https://ko.wikipedia.org/wiki/하이_다이나믹_레인지_이미징

보통 디지털 이미지는 8비트 3채널(RGB)로 이미지를 표현한다. 8비트로 표현할 수 있는 정수는 0~255까지이다.

하지만 HDR에서는 표현 범위를 8비트 이상으로 확대하는데, 보통 32비트까지 확대해서 표현한다고 한다.

일반적인 디지털 카메라 역시 8비트 3채널을 이용하여 이미지를 표현하기 때문에,

HDR 이미지를 얻기 위해서는 같은 대상을 서로 다른 노출값으로 찍음 다음,

각각의 노출값 및 이미지들을 가지고 32비트 값을 계산해 낸다.

하지만 일반적인 디스플레이 장치에는 32비트 이미지를 표시할 수 없기 떄문에 다시 8비트 이미지로 변환해야 하는데, 

이 작업을 '톤매핑(tonemapping)'이라고 한다.


한편, HDR 이미지를 만들지 않고 노출값이 다른 이미지들을 전체적으로 잘 보이도록 합성하기도 하는데,

이런 기법은 별도로 'Exposure Fusion'이라고 한다.


OpenCV를 이용하여 HDR이미지를 다루는 방법은,

다음 링크에 잘 설명되어 있다.

http://docs.opencv.org/3.0-last-rst/doc/tutorials/photo/hdr_imaging/hdr_imaging.html#hdrimaging

반응형

'영상처리 프로젝트' 카테고리의 다른 글

OpenCV 3.0 빌드 체험기2  (0) 2015.12.15
OpenCV 3.0 빌드 체험기  (0) 2015.12.10
OpenCV 속도 개선 방법  (2) 2015.12.04
OpenCV를 이용한 Blurring, Sharpening  (0) 2015.08.21
2차 개발 계획  (0) 2015.07.22
반응형

OpenCV 속도 개선 방법

영상처리 작업은 많은 연산을 해야 하기 때문에,

속도를 높일 수 있는 방법을 늘 고민하게 된다.

OpenCV에는 이미 연산 속도를 높이기 위한 기법들이 사용되고 있는데,

특히나 병렬처리(IPP, TBB) 및 GPU 사용 등을 통해 효과를 볼 수 있다.

이와 관련해서, 다음과 같은 블로그들에 참고할 만한 내용이 들어있어서,

여기에 소개하려 한다.


반응형

'영상처리 프로젝트' 카테고리의 다른 글

OpenCV 3.0 빌드 체험기  (0) 2015.12.10
HD 및 HDR의 이해  (0) 2015.12.04
OpenCV를 이용한 Blurring, Sharpening  (0) 2015.08.21
2차 개발 계획  (0) 2015.07.22
1차 개선 완료  (0) 2015.07.21
반응형

Image Blurring & Sharpening

Imaeg Sharpening은, 흐릿한 이미지를 보다 선명한 이미지로 개선해 주는

영상처리 기술이다.

반대로 Image Blurring은, 마치 안개라도 낀 것처럼 

영상을 흐릿하게 해 주는 기술이다.

구현 방법은 여러가지가 있겠지만,

그중의 하나가, GaussianBlur를 이용하는 방법이다.

OpenCV 함수를 이용하여 다음과 같이 구현할 수 있다.


1. Image Blurring

void imgSharpening(cv::Mat& img, float sigma ) 

{

    cv::Mat tmp;

    cv::GaussianBlur(img, img, cv::Size(0,0), sigma );

※ sigma를 통해, 흐려지는 정도를 조절할 수 있다.


2. Image Sharpening

void imgSharpening(cv::Mat& img, float sigma

{

    cv::Mat tmp;

    cv::GaussianBlur(img, tmp, cv::Size(0,0), sigma );

    cv::addWeighted(img, 1.5, tmp, -0.5, 0, img);

}

※ 1. 이미지가 흐린 정도에 따라, sigma 값을 조절한다.

※ 2. 1.5, -0.5등의 계수 역시 이미지의 흐린 정도에 맞게 조절한다..


위의 두가지 예에서 알 수 있듯이, Image Sharpening은 

선명한 이미지에 안개 등과 같은 흐린 레이어가 덧붙여졌다고 가정하고

덧붙여진 레이어를 제거하는 방법이다.


위 소스들을 테스트해 보면,

이미 흐려진 이미지를 원상태로 깨끗하게 되돌리기에는 한계가 있지만,

계수 조정을 통해 어느 정도 윤곽선이 뚜렷해 지는 것을 확인할 수 있다.


그리고 다음은, Image Deblurring과 관련된 사이트들이다.

참고 사이트


반응형

'영상처리 프로젝트' 카테고리의 다른 글

HD 및 HDR의 이해  (0) 2015.12.04
OpenCV 속도 개선 방법  (2) 2015.12.04
2차 개발 계획  (0) 2015.07.22
1차 개선 완료  (0) 2015.07.21
안개보정 개선  (4) 2015.07.21
반응형

Restart

이제 다시 2차 개발로 들어가야 할 시기이다.

1차에서 미비한 점들을 보완해서 개선된 결과물을 만들어 보려 한다.

1차 개발에서 마지막에 발목을 잡은 것은 성능 문제였다.

특히나 떨림보정에서 FPS가 많이 저하되었으며,

안개보정에서도 어느 정도 FPS 저하 현상이 발행하였다.

그래서, 2차 개발의 목표는 다음과 같이 설정하려 한다.

  • 떨림보정, 안개보정에서의 FPS향상
  • 객체 추적 보완

특히나, 이번에는 FPS향상을 위해서 GPU 및 병렬처리 등을 이용할 계획인데,

그러기 위해서는 OpenCV 환경을 다시 설정해야 한다.

따라서, 처음 한주는 새로운 환경 설정을 위해 사용할 것이고,

그 이후로는 각 1차와 마찬가지로 각 기능별 2주씩 잡을 것이다.

반응형

'영상처리 프로젝트' 카테고리의 다른 글

OpenCV 속도 개선 방법  (2) 2015.12.04
OpenCV를 이용한 Blurring, Sharpening  (0) 2015.08.21
1차 개선 완료  (0) 2015.07.21
안개보정 개선  (4) 2015.07.21
객체추적 개선  (0) 2015.07.21
반응형

review

계획한 일정에 맞추어, 1차 개선작업을 완료하였다.

물론, '완료'라고는 하지만 '완료'라고 할 수 없는 '완료'이다.

생각보다는 잘 된 측면도 분명히 있다. 

하지만 또한, 품질과 성능 면에서 새로운 과제를 부여받기도 하였다.

그 내용들을 점검해 보면, 다음과 같다.

  1. 떨림보정
    • 생각보다 잘된 측면이 있다. 이전 알고리즘과 비교해 보면, 확실히 보정이 잘 된다.
    • 하지만, 속도 측면에서 개선의 여지가 많다.
    • 또한, 여러가지 다양한 환경에서도 잘 작동하는지는 두고 볼 일이다.
  2. 객체 추적
    • 사실상 개선이라고 보기는 어려울 것 같다.
    • 템플릿 매칭의 한계를 넘어서기 위해, 다른 알고리즘을 검토해 봐야 할 것 같다.
  3. 안개보정
    • 역시 생각보다는 잘 되었다.
    • 문제는, 떨림보정 만큼은 아니지만 속도 문제가 좀 있다.
    • 또한, 보정 후 영상의 품질을 좀더 좋게 만들기 위한 연구가 필요하다.


반응형

'영상처리 프로젝트' 카테고리의 다른 글

OpenCV를 이용한 Blurring, Sharpening  (0) 2015.08.21
2차 개발 계획  (0) 2015.07.22
안개보정 개선  (4) 2015.07.21
객체추적 개선  (0) 2015.07.21
떨림보정 개선  (0) 2015.07.06
반응형

안개보정

안개보정은, Retinex 알고리즘을 응용하였다.

Retinex에 대한 설명은, 다음 블로그에 잘 나와 있다.

  • https://flowergom.wordpress.com/2011/11/01/retinex-algorithm/

이번 버전에서는, 속도 향상을 위해 몇가지 변형을 하였다.

테스트를 해 보니, 확실히 이전보다 개선된 결과를 얻을 수 있었다.

 

원본1

보정1

 

원본2

보정2

 

원본3

보정3

 

원본4

보정4

 

원본5

보정5

 

원본6

보정6

 

원본7

보정7

반응형

'영상처리 프로젝트' 카테고리의 다른 글

2차 개발 계획  (0) 2015.07.22
1차 개선 완료  (0) 2015.07.21
객체추적 개선  (0) 2015.07.21
떨림보정 개선  (0) 2015.07.06
기존 모듈 분석  (0) 2015.07.03
반응형

Tracking

객체추적은, 개선을 위해 노력했지만 큰 성과를 얻지 못했다.

일단, 이번에 시도했던 내용은 다음과 같다.

  • 기존 모듈의 문제점으로 생각했던 템플릿 변형을 해결하기 위해, 매 프레임마다 템플릿을 갱신하되, 최초 템플릿과의 거리가 일정치 이상 벌어지면 다시 최초 템플릿으로 복귀

결과는 다음과 같다.


샘플1. 기존 버전


샘플1. 신규 버전


샘플2. 기존 버전


샘플2.신규 버전


샘플3.기존 버전


샘플3.신규 버전


* 영상 출저

[VTD] http://cv.snu.ac.kr/research/~vtd/



반응형

'영상처리 프로젝트' 카테고리의 다른 글

1차 개선 완료  (0) 2015.07.21
안개보정 개선  (4) 2015.07.21
떨림보정 개선  (0) 2015.07.06
기존 모듈 분석  (0) 2015.07.03
영상처리 개발 계획  (0) 2015.07.03

+ Recent posts