본문 바로가기
[Public] 신호처리/OpenCV 다루기

[OpenCV] #2 OpenCV에서 코드 명명 규칙

by 차출발 2010. 3. 3.
반응형




OpenCV를 접하면서 제공하는  래퍼런스 명명에는 일정한 규칙이 있다.

이런 래퍼런스 명명 규칙을 알고  OpenCV에 접근하면 유익한 정보가 될 수 있을거 같아 글을 남겨 놓는다.

=================================================================================================
1. 접두사가 cv Cv CV  다 다른 의미를 가지는 접두사이다.

cv   :  함수명을 뜻한다
Cv   :  데이터 구조에 대한 명칭이다.
CV  :  정의된 상수의 명칭

=================================================================================================
2. 함수의 명명 규칙

  <cv> <Action> <Target> <Mode> 순서이다.

  예를 들면 cvNormalizeHist 라는 함수가 있다.

  <cv> 이기 때문에 함수를 뜻하고
  <Nomalize> 액션을 뜻하는데 평활화를 뜻한다.
  <Hist> 는 액션을 취하는대상이기에 Histogram을 뜻한다.

한마디로 히스토그램을 평활하 하는 함수이다. 


=================================================================================================
3. IPL로시작하는 상수 명명 규칙

   IPL_DEPTH_<bit_depth> (S | U | F)

bit_depth : 1, 8, 16, 32

S : singed integer
U : unsinged integer
F : float

예를 들면 IPL_DEPTH_1U 라는 상수가 있다.

<1> 이다 이는 1비트의 양을 뜻한다.

<U> 이다 이는 Unsigned integer image 를 나타낸다. 

즉 1비트 양의 정수 영상을 나타내는 것이다.



=================================================================================================
4. 기타로 시작하는 상수 명명 규칙

 CV_<bit_depth>(S | U | F)<number_of_channels>

bit_depth : 1, 8, 16, 32

S : singed integer
U : unsinged integer
F : float

number_of_channels : 채널의 개수


예를 들어보면 CV_8UC1 가 있다.

이는 8 비트 양의 정수형을 갖는 단일 채널 행렬을 나타낸다.



=================================================================================================
5. 데이터 구조 명명 규칙

Cv<Data Structure>

Data Structure : 데이터 구조 명칭

예를 들어 보면
Cv + Matrix(행렬) = CvMat
Cv + Array(배열) = CvArr
Cv + Point(좌표) = CvPoint


=================================================================================================
6. OpenCV 라이브어리는 크게 6가지로 나눈다. (1.0 기준)

cv          :  영상처리 알고리즘 함수, 컴퓨터 비전 알고리즘 함수 (cv100.dll)
cvaux     : 전문 컴퓨터 비젼 알고리즘 함수 (cvaux100.dll)
cxcore    : 데이터 구조 지원 함수 (cxcore100.dll)
highgui   :  GUI 지원 함수 (highgui100.dll)
ml          : 기계학습 알고리즘 함수 (ml100.dll)
cvcam    : DirectX 기반 카메라 제어 함수 (cvcam100.dll)



아래는 OpenCV 2.0 이 나오면서 추가된 내용을 번역한것이다. (OpenCV Korea 펌)

2.0은 직접 해보면서 해봐야 할것 같다

 필요하면 읽어 보면 좋을거 같다.


===============   아래   ==================

- General:
    --> 새로운 C++ 인터페이스 적용으로 OpenCV의 수많은 기능들(cxcore, cv, highgui)이 좋아졌다.
        똑같은 결과를 얻기위해 코딩에 대한 시간을 줄여주고, 메모리 관리등 수많은 장점이 있다.
        opencv/doc/opencv.pdf와 헤더파일(*.hpp)를 참고하라.
        이전 버전의 인터페이스는 여전히 사용가능하다.

    --> 소스 디렉토리 구조가 변경되었다.; 모든 개발환경에 대해서 외부 헤더 파일 전체가 하나의 디렉토리에 들어있다.     

    --> 우선적인 컴파일 시스템은 CMake이다. http://www.cmake.org(추천하는 버전은 2.6.x이다.)
        +윈도우즈는 Visual Studio의 MSVC와 Borland C++와 MinGW는 지원한다.; CMake를 이용하여 생성하길 바란다.
        +MaxOSX 사용자는 Xcode를 위한 프로젝트 파일을 만들수 있다.
        +리눅스와 기타 다른 OS는 Eclipse/Code Blocks/커맨드 라인으로 OpenCV를 컴파일 할 수 있다.

  - CXCORE, CV, CVAUX:
    --> CXCORE는 Lapack(CLapack 3.1.1.1)을 사용하여 다양한 선형함수을 계산할 수 있다.
    --> 수많은 특징추출과 물체검출과 분류방법이 추가되었다.
        (이것들에 대해서는 문서가 없다.). cv.hpp와 cvaux.hpp파일을 참고
    --> FAST - corner detector 속도 향상(Edward Rosten)
    --> MSER - 최대한 안정적으로 영역분류-extremal regions- (Liu Liu)
    --> LDetector - 원 형태를 기반으로 한 고속 특징 추출(V. Lepetit (a.k.a. YAPE))
    --> Fern을 기반으로 한 point 분류법과 평면 물체 검출(M. Ozuysal and V. Lepetit)
    --> One-Way 연산자 : PCA를 기반으로 한 강력한 특징 추출 연산자
        (S. Hinterstoisser, O. Kutter, N. Navab, P. Fua, and V. Lepetit,
        "Real-Time Learning of Accurate Patch Rectification").
        Contributed by Victor Eruhimov
    --> 3차원 특징 연산 이미지 회전  (based on the A. Johnson PhD thesis; implemented by Anatoly Baksheev)
    --> Self-simularity 특징추출(Rainer Leinhart)
    --> HOG 사람들과 물체 추출 - Navneet Dalal framework의 재실행
        (http://pascal.inrialpes.fr/soft/olt/). Currently, only the detection part is ported,
        but it is fully compatible with the original training code.
        See cvaux.hpp and opencv/samples/c/peopledetect.cpp.
    --> Haar 특징을 기반으로 한 물체 추출의 기능 향상(by Maria Dimashova.)
        Haar features와 LBPs (local binary patterns)등 다른 특징을 좀 더 쉽게 추가 가능함
    --> 적응적인 피부 검출과 퍼지 Meanshift 추적(contributed by Farhad Dadgostar)
        see cvaux.hpp and opencv/samples/c/adaptiveskindetector.cpp 참고
    --> HAAR+LBP 물체 추출 추가된 새로운 traincascade 적용
        See opencv/apps/traincascade.
    --> 가장 가까이 있는 것을 검색하는 FLANN(Marius Muja)을 위한 라이브러리 지원
        cxcore.hpp and opencv/samples/c/find_obj.cpp
    --> bundle adjustment 엔진 추가(PhaseSpace) --> 멀티뷰 Geometry 알고리즘
    see cvaux.hpp
    --> dense optical flow 추정 함수("Two-Frame Motion Estimation Based on Polynomial Expansion" by G. Farnerback).
      See cv::calcOpticalFlowFarneback and the C++ documentation
    --> 영상 warping 연산자 (resize, remap, warpAffine, warpPerspective)
      now all support bicubic and Lanczos interpolation.
    --> 대부분의 선형/비선형 필터 연산자는(filter2D, sepFilter2D, erode, dilate ...) 임의의 외곽선 모드와 ROI 바깥 Pixel 연산을 지원
      (i.e. the ROIs are not "isolated" anymore), see the C++ documentation.
    -->  XML/YML 파일을 GZip 압축하여 데이터를 저장하고 읽는다.
      cvSave("a.xml.gz", my_huge_matrix);

  - MLL:
    --> 극단적인 무작위 트리를 추가하여 아주 빠르게 트리를 무작위 비교하여 Train시킨다.(by Maria Dimashova).
    --> 결정 트리 엔진과 재귀형 결정 트리, Boost, 무작위 트리를 기반으로 된 클래스는 새롭게 수정되었다.
    * The decision tree engine and based on it classes
      (Decision Tree itself, Boost, Random Trees)
      have been reworked and now:
      + 메모리 효율 증가(이전대비 200% 상승)
      + 멀티 Thread방식으로 train한다.(OpenMP 사용시)
      + 특별한 low-overhead branch때문에 숫자 변수에 의한 boosting 분류는 특히 더 빨라짐
    * mltest가 추가됨. 완료된때까지, MLL 클래스의 몇가지 테스트를 수정하도록 한다.

  - HighGUI:
    --> [Linux] 스테레오 카메라 지원(현재 Videre만 지원)하며 n개 카메라 영상을 캡쳐할 수 있는 인터페이스 제공
    --> 영상들은 메모리 버퍼에서 압축또는 해제 할 수있다.
      see the C++ HighGUI reference manual

  - Documentation:
    --> 레퍼런스 매뉴얼은 HTML형식을 LaTex형식으로 변환할 수 있음(by James Bowman and Caroline Pantofaru),
      + opencv.pdf 오프라인 매뉴얼
      + 최신 온라인 매뉴얼
        (as the result of LaTeX->Sphinx->HTML conversion) available at http://opencv.willowgarage.com/documentation/index.html

  - Samples, misc.:
    --> 눈 검출 예제 추가(Shiqi Yu)
      see opencv/data/haarcascades/*[lefteye|righteye]*.xml
    --> 얼굴 앞면 검출하기 위한 LBP Cascade 예제 추가(Maria Dimashova)
      see opencv/data/lbpcascades/lbpcascade_frontalface.xml
    --> 고화질 몸체 인식과 얼굴 검출 예제 추가(Modesto Castrillon-Santana)
      see opencv/data/haarcascades/haarcascade_mcs*.xml
  
>>> Optimization:
    --> 수많은 기초 함수와 영상 처리 연산자(수치연산, 기하학적 변환, 필터링)들이 SSE2 최적화하여 속도가 향상됨
    --> IPP 지원의 모델이 변경됨. IPP는 CMake에 의해 설정되며, OpenCV와 연결되어 검출된다.
      (Beta에서는 여전히 지원하지 않는다.)
    --> 변수를 조정하여 PNG 인코딩이 향상되었다.

>>> Bug fixes: <<<
    TBD
    (see http://sourceforge.net/tracker/?group_id=22870&atid=376677 of the list
    of the closed and still opened bugs).
   
    Many thanks to everybody who submitted bug reports and/or provided the patches!

>>> Known issues:주의점
    --> 설정과 autotools 기반한 컴파일은 현재 적용안됨. CMake 사용
    --> SF에서 Tracker를 약 150개 생성하면 버그 발생 - 추후 수정 예정(2.0 Gold)
    --> 수많은SSE2 코드를 지원하기 때문에 IPP 지원하지 않음.- 추후 수정 예정(2.0 Gold)
    --> 문서작업 추가
        - cvaux의 새로운 기능 설명 없음
    - 서적목록 없음
    - 알려진 버그 내용 미비
    - 문서에 포함된 링크(하이퍼링크)가 동작하지 않음
    * 이전 버전(1.x)에 대해 새로운 기능에 대한 테스트가 일부만 되었음
    * 새로운 형식의 Python을 포함하지 않음