페이지

2012년 12월 23일 일요일

캐니 엣지(Canny Edge)

캐니 엣지는 영상처리에서 폭넓게 사용되는 특징 추출 방법중의 하나로, 영상에서 물체의 경계를 찾기 위한 알고리즘입니다.

장점
  1. 명확하게 하나의 선으로 엣지를 찾을 수 있다.
  2. 상, 하한 임계값 설정을 통하여 다양한 환경에 적용할 수 있다.

입력
  1. 입력 영상
  2. 소벨 커널의 크기
  3. 상/하한 임계값

절차
  1. 소벨 엣지(Sobel Edge)를 통하여 엣지의 방향과 크기를 구함.
  2. Non-Maximum Suppression
    엣지의 방향에서 가장 강한 엣지를 선택.
  3. Hysteresis Thresholding
    높은 임계값을 이용하여 엣지를 선택하고, 엣지라면 이후에는 낮은 임계값을 이용하여 계속해서 엣지를 탐색해 나감.
code
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"

using namespace cv;

int main(){
 Mat src, src_gray;
 Mat detected_edges;

 int lowThreshold = 50;
 int ratio = 3;
 int kernel_size = 3;

 /// Read an image
 src = imread("lena.png");
 if( !src.data )
 { return -1; }
 

 /// Convert the image to grayscale
 cvtColor( src, src_gray, CV_BGR2GRAY );

 /// Reduce noise with a kernel 3x3
 blur( src_gray, detected_edges, Size(3,3) );

 /// Canny detector
 Canny( detected_edges, detected_edges, lowThreshold, lowThreshold*ratio, kernel_size ); 

 /// Show result
 imshow( "source", src );
 imshow( "canny edge", detected_edges );

 /// Wait until user exit program by pressing a key
 waitKey(0);

}


결과


링크

2012년 12월 18일 화요일

OpenCV 설치 완전 정복

OpenCV 설치에 어려움을 겪으시는 분들을 위하여 한번 정리해봤습니다.

1. 프로그램 다운받기
http://opencv.org/ 사이트 가셔서 자신의 운영체제에 맞는 파일을 다운 받으시면 됩니다. 저는 윈도우 버전을 다운 받겠습니다.

2. 설치 경로 지정
설치 경로는 자신이 원하는 곳으로 하시면 되겠습니다. 저는 C:\OpenCV-2.4.3으로 지정하였습니다. 그리고 Extract 버튼을 누르시면 되겠죠.



3. 설치된 경로에 가서 한번 확인해 보겠습니다.
doc - OpenCV에서 제공하는 레퍼런스 문서가 담겨있는 디렉토리
samples - 예제 소스들이 있는 디렉토리
build - 프로그램에서 사용될 라이브러리 파일들이 있는 디렉토리




여기까지 하시면 설치가 다 된겁니다. 참 쉽죠잉~
2.x 초기 버전에서는 cmake를 이용하여 전체 소스를 운영체제와 컴파일러에 맞춰서 빌드해야 하는 어려움이 있었는데 여기에서 절망하시는 분들이 많아서 그런지 요즘에는 빌드된 파일을 제공하고 있습니다.

4 비주얼 스튜디오 설정

이 부분 부터는 프로그래밍을 안해보신 분들은 조금 헷갈릴수도 있으니 주의를 기울여 주시길 부탁드립니다. 여기서는 비주얼 스튜디오 2008을 기본으로 하고 밑에 비주얼 스튜디오 2010 설명도 첨부하였습니다.

비주얼 스튜디오에는 크게 2가지 설정이 있습니다. 첫번째는 비주얼 스튜디오 프로그램 설정, 두번째는 우리가 생성한 프로젝트에 대한 설정으로 나눌 수 있습니다. 프로그램 설정은 한번만 하면 되는 것이고, 프로젝트 설정은 프로젝트를 생성 할 때 마다 해주셔야 합니다.

가. 새 프로젝트 생성


우선 여기서는 간단하게 설정과 설치 확인만 할 것이기 때문에 win32 콘솔 프로그램을 선택하겠습니다. 확인하시고 다음, 마침을 누르시면 프로젝트가 생성됩니다.

나. 프로그램 설정
상단 메뉴에 보시면 도구 > 옵션을 클릭하시면 됩니다.

1) 포함 파일 지정

주의1 : 밑에 두 디렉토리를 헷갈리시는 분들이 많으신데 밑의 경로를 지정해 주셔야 합니다.
X  C:\OpenCV-2.4.3\opencv\include
O  C:\OpenCV-2.4.3\opencv\build\include

주의2 : include 안에 보시면 opencv, opencv2 디렉토리 2개로 나누어져 있는데 이것은 opencv 1 버전과 2 버전의 헤더 파일이 다르기 때문에 분리 되어 있는 것입니다. 그런데 간혹 어떤 분들은 두 경로를 추가적으로 포함 파일에 추가하시는 분들이 있는데 이것은 잘못된 사용방법입니다.



2) 라이브러리 파일 지정

앞에서 설명 드렸던 build 디렉토리에 들어가 보겠습니다.
x86/x64 - 64비트 or 32비트 프로그램에 따라서 라이브러리 파일이 나누어져 있습니다. 잘 모르시면 거의 대부분이 x86에 있는 라이브러리를 사용하시면 됩니다.
그리고 x86 디렉토리에 들어가 보시면
vc9 - 비주얼 스튜디오 2008용
vc10 - 비주얼 스튜디오 2010용
라이브러리가 따로 있습니다.

그리고 다시 vc9 디렉토리에 들어가 시면
bin - 동적라이브러리 사용시 런타임 중에 참조할 dll 파일
lib - 동적라이브러리를 위한 lib 파일
staticlib - 정적라이브러리를 위한 lib 파일

이렇게 계층적으로 분리 되어 있습니다.

32비트 환경, 비주얼 스튜디오 2008을 사용하고 동적 라이브러리를 사용한다면 
C:\OpenCV-2.4.3\opencv\build\x86\vc9\lib 이 경로를 라이브러리 파일에 추가하시면 됩니다.



여기 까지가 프로그램 설정입니다.

다. 프로젝트 설정

프로젝트 > 설정 (HelloCV 설정)
을 선택하셔서 다음 메뉴로 들어가시면 추가 종속성 항목에 자신이 사용할 라이브러리들을 추가 하시면 됩니다.

라이브러리는 "이름 + 버전 + 모드.lib" 형식을 가지게 되는데 이때 모드는 Relaese 일때는 아무것도 없고 Debug 일때는 d 가 붙게 됩니다.


저는 다음과 같은 라이브러리를 추가하였습니다.

Release : opencv_core243.lib opencv_imgproc243.lib opencv_highgui243.lib
Debug : opencv_core243d.lib opencv_imgproc243d.lib opencv_highgui243d.lib


주의 : Debug 모드와 Release 모드를 확인하세요.

확인을 누르시면 됩니다.


참고 : 비주얼 스튜디오 2010 설정
vs2010에서는 프로젝트 설정과 프로그램 설정이 한곳에 모여 있습니다.

디렉토리 설정

프로젝트 > 속성 으로 가시면 됩니다.

포함 파일 디렉토리(앞과 동일) : C:\OpenCV-2.4.3\opencv\build\include
라이브러리 디렉토리 : C:\OpenCV-2.4.3\opencv\build\x86\vc10\lib


라이브러리 설정

추가 종속성 항목에 추가해 주세요

Release : opencv_core243.lib;opencv_imgproc243.lib;opencv_highgui243.lib;
Debug : opencv_core243d.lib;opencv_imgproc243d.lib;opencv_highgui243d.lib;




그리고 HelloCV.cpp 파일에 다음과 같은 소스 코드를 입력합니다.

간단하게 이미지 파일을 불러서 화면에 출력해주는 코드입니다.

주의 : 당연히 이미지 파일은 프로젝트 디렉토리에 있어야 겠죠?


#include "stdafx.h"
#include "opencv2/opencv.hpp"

using namespace cv;

int _tmain(int argc, _TCHAR* argv[])
{

 Mat image;
 image = imread("test.png");
 imshow("image",image);
 waitKey(0);
 return 0;
 
}


라. 컴파일, 빌드
그냥 F5번 눌러 주시면 두가지 과정이 한번에 이루어 집니다.

하지만 여기서 오류!!

분명히 소스코드에 에러는 없었기 때문에 컴파일과 빌드는 무사히 끝났지만 관련 dll 파일이 없다는 오류가 발생합니다.

이것은 저희가 동적라이브러리를 사용하기 때문에 exe파일이 실행 되는 동안 필요한 dll파일을 못찾아서 발생하는 문제입니다.




해결 방법 1. 관련 dll 파일을 프로젝트 경로에 복사해 준다.
해결 방법 2. PATH 환경 변수에 dll 파일이 있는 경로를 추가해 준다.

일반적으로는 2번 방법을 많이 사용합니다. 왜냐하면 편하니까요. ^^


5. 환경변수 설정

제어판 > 시스템 및 보안 > 시스템

편집을 누르시고

Path 에
vs 2008 : C:\OpenCV-2.4.3\opencv\build\x86\vc9\bin;
vs 2010 : C:\OpenCV-2.4.3\opencv\build\x86\vc10\bin;  를 추가해주시면 됩니다.


6. 확인

다시 한번 F5를 눌러서 실행하면 최종적으로 이미지를 출력해 볼 수 있습니다.


Computer Vision

컴퓨터 비전(Computer Vision)

컴퓨터 비전은 이미지를 획득, 처리, 분석, 이해하는 전반적인 과정을 포괄하는 개념이다. 이 때 말하는 이미지는 한장의 사진일 수도 있고 비디오와 같은 연속적인 데이터가 될 수도 있다. 한국에서는 이미지 프로세싱(image processing) 또는 머신 비전(machine vision)이라고 불리기도 하지만 컴퓨터 비전이 더 넓은 의미에서 두 용어를 포함한다고 생각하면 되겠다.

이 분야가 어려운 가장 큰 이유는 데이터의 크기가 매우 크기 때문에 여러가지 문제가 발생한다는 것이다. 예를 들면 비디오에서 640 X 480 컬러 이미지가 1초 당 30장이 들어온다면 컴퓨터에서 처리해야 하는 데이터의 수는 27,648,000(640 X 480 X 3 X 30) 개가 된다. 이렇게 큰 데이터에서 의미 있는 결론을 도출하는 것은 쉽지 않다. 따라서 컴퓨터 비전에서는 데이터를 분석하는 패턴인식(pattern recognition) 기술이 폭 넓게 사용된다.

2012년 11월 21일 수요일

교통량 측정


Vehicle count and classification with CUDA, OpenCV and particle filters





출처

Object Tracking in Computer Vision



  1. 소개
    1. 컴퓨터 비전 분야에서 tracking이 적용되는 경우는 상당히 많습니다.
      1. motion-based recognition, automated surveillance, video indexing, human-computer interaction, traffic monitoring, vehicle navigation
    2. tracking이 어려운 이유
      1. noise, complex object motion, partial and full object occlusions, complex object shapes, scene illumination changes, real-time processing requirements
  2. Object Representation
    tracking에 앞서 대상 물체를 어떻게 표현 할 지를 정해야 합니다. 그 방법들은 크게 다음과 같습니다.
    1. Points
      1. 물체의 중심을 점으로 표현하는 방법으로 물체가 작을 경우 유용.
      2. 여러개의 점으로 물체를 표현
    2. Primitive geometric shapes
      물체를 사각형이나 타원으로 표현하는 방법으로 단순한 물체의 추적에 용이함.
    3. Object silhouette and contour
      물체의 외곽선을 표현하는 방법으로 복잡하고 변형이 있는 물체의 추적에 용이함.
    4. Articulated shape models
      물체의 관절들을 모델링하는 방법으로 관절로 이루어진 물체를 추적하는데 용이
    5. Skeletal models
    6. appearance features

      1. Probability densities of object appearance.
        가우시안 또는 과같은 확률 밀도 함수를 이용하여 물체를 표현
      2. Templates
        이미지의 간단한 패치를 이용하는 경우
      3. Active appearance models
        landmarks를 이용하여 물체의 모양을 정의
      4. Multiview appearance models
        다양한 각도에서 물체를 정의
  3. Feature Selection for Tracking
    visual feature를 정의
    1. Color
    2. Edges
    3. Optical Flow
    4. Texture
  4. Object Detection
    추적에 앞서, 초기에 물체를 탐지해야하며 추적과 결합하여 더 좋은 성능을 발휘한다.
    1. Point detectors
      SIFT, SURF, KLT, Harris corner
    2. Background Subtraction
      카메라가 고정되어 있는 경우 배경을 제거함으로 대상물체를 쉽게 탐지 할 수 있다.
    3. Segmentation
      1. Mean-Shift Clustering
      2. Graph-Cuts
      3. Active Contours
    4. Supervised Classifiers
      기계학습 방법을 이용하여 물체를 탐지
      1. Apdative Boosting
      2. SVM
      3. Random Forest
  5. Object Tracking


이 문서는 다음 survey를 바탕으로 정리된 문서입니다.

Object tracking: A survey

A Yilmaz, O Javed, M Shah - Acm Computing Surveys (CSUR), 2006 - dl.acm.org