Pride Power P 3 in VISION laboratory … Passion 5th week Presentation Vision System Lab, Sang-Hun Han
OpenCV(Open Computer Vision) – 오픈 소스 컴퓨터 비전 C 라이브러리이다. 원래는 인텔이 개발하였다. – 윈도우, 리눅스 등의 여러 플랫폼에서 사용할 수 있으며 실시간 이미지 프로세싱에 중점을 둔 라이브러리이다. OpenCV
IplImage 구조체 OpenCV
IplImage 구조체 – 실제 픽셀에 접근 방법 –color(3ch) ex) IplImage* Img; –unsigned char B = Img->imageData[i * Img->width * 3 + j * 3]; –unsigned char G = Img->imageData[i * Img->width * 3 + j * 3 + 1]; –unsigned char R = Img->imageData[i * Img->width * 3 + j * 3 + 2]; OpenCV (0,0) (1,0) (0,1)
IplImage 구조체 – 실제 픽셀에 접근 방법 –gray(1ch) ex) IplImage* Img; –unsigned char Intensity = Img->imageData[i * Img->width + j]; OpenCV (0,0)(0,1)(0,2)(0,3)(0,4) (1,0)(1,1) (2,0)(2,2) (3,0)(3,3) (4,0)(4,4)
Gray Image – 일반적으로 흑백사진을 말함 – 일반적으로 흑백사진은 unsigned 8-bit values(0~255) 로 구성 OpenCV
–Source Code OpenCV 버튼 구현 타이머 구현
–Source Code OpenCV 클래스 함수 생성 클래스 함수 구현
–Result OpenCV
Sobel Edge –Sobel Operator 는 1968 년 스탠포드 인공지능 연구소에서 어윈 소벨이 고안해낸 가 장자리 검출 알고리즘 –3x3 크기의 행렬을 사용하여 연산을 하였을 때, 중심을 기준으로 각 방향의 앞뒤의 값을 비교하여서 변화량을 검출하는 알고리즘 OpenCV
–ex) –y 축 필터를 이용 – 각 부분에 맞은 y 축 필터의 값을 곱한 값을 모두 더하면 중심 픽셀의 변화량이 나옴 ( 행렬의 곱이 아님, 각 위치의 값들끼리 곱한 뒤 모두 더한 값 ) – 계산한 결과를 모두 더하면 중심 픽셀의 변화량이 나옴 –y 축 필터의 경우 -1020, x 축 필터의 경우 0 OpenCV
–Source Code OpenCV 타이머 구현 클래스 함수 구현
–Result OpenCV
Canny Edge – 에지 (Edge) 는 영상 요소를 기술하기 때문에 중요한 시각 정보를 포함 – 하지만 Sobel 함수나 Laplacian 과 같은 단순 이진 에지 맵을 사용한다면 두 가지 주 요 결점 때문에 손해를 봄 첫째, 검출한 에지가 필요 이상으로 두꺼워 객체를 훨씬 더 식별하기 어렵게 만듬 둘째, 영상의 모든 중요한 에지를 검출하기 위한 명확한 경계 값을 찾기란 불가능 –Canny Edge 검출 알고리즘 1. 가우시안 필터링을 하여 영상을 부드럽게 함 2. Sobel 연산자를 사용하여 기울기 (Gradient) 벡터의 크기 (Magnitude) 를 계산 3. 가느다란 에지를 얻기 위해 3x3 윈도우를 사용하여 기울기 벡터 방향에서 기울기의 크기가 최대값인 화 소값인 화소만 남기고 나머지는 0 으로 억제 4. 연결된 에지를 얻기 위해 두 개의 임계값을 사용. 높은 값의 임계값을 사용하여 기울기 방향에서 낮은 값의 임계값이 나올 때까지 추적하며 에지를 연결하는 히스테리시스 임계값 (Hysteresis Thresholding) 방 식을 사용 OpenCV
Canny Edge –Non-Maxima Suppression( 비 최대 억제법 ) : 최대가 아닌 부분을 억제 –2 개의 Threshold t1, t2 가 존재 1. 픽셀 하나하나를 다 검사하여 그 픽셀의 값이 t1 보다 클 경우 2 단계로 넘어가고 아니면 다음 픽셀로 넘 어감 2. t1 보다 큰 경우이므로 Sobel Operator 를 통해 얻은 sobel_x 와 sobel_y 값을 이용하여 방향을 찾음 3. 픽셀이 급변하는 방향의 수직인 방향이 Edge 의 연결선상이므로 기울기 방향에 수직인 방향에 있는 픽 셀을 살펴봄 ( 양방향 ) 4. 그 픽셀의 기울기 값이 t2 를 넘는 경우 Edge, 아닌 경우 0 OpenCV
–Source Code OpenCV 타이머 구현 클래스 함수 구현
–Result OpenCV
Erode & Dilation – 모폴로지 연산은 영상의 분리, 영상처리에 앞선 전처리 과정 ( 노이즈 제거, 특징 추출 등 ) 에 사용 – 디지털 영상처리에 있어서 수학적 모폴로지라 하면 이미지의 기하학적 형태를 분석 하는 것을 의미 – 기본적으로 두 가지의 모폴로지 연산이 존재, 침식 (Erosion) 연산과 팽창 (Dilation) 연 산 – 각 화소 주변의 화소 집합에서 정의된 구조 요소로 연산 – 침식 연산은 주로 잡음 제거에 주로 사용하며, 팽창 연산은 잡음 제거 후 줄어든 객 체의 크기를 다시 원상복구 시키고자 할 때 주로 사용 OpenCV > 예제 ) 침식 연산
Erode & Dilation –Opening & Closing 연산 영상을 보정하는 다른 방법은 먼지가 들어간 작은 입자나 오브젝트의 구멍을 제거하는 것 이러한 작업은 보통 열기와 닫기 연산에 의해 보정 열기와 닫기 연산은 각 픽셀값을 인접 픽셀과의 기하학적인 관계에 의해 결정하기 때문에 Morphology 연 산으로 알려진 광범위한 연산의 일부임 이진화 영상에 대해 가장 유효하게 동작 – 열기 연산 (Opening) 작은 입자 제거 이외에도 접촉하는 오브젝트의 지협 (isthmuses) 또는 접하고 있는 부분을 제거 침식 연산 후 팽창 연산 수행 – 닫기 연산 (Closing) 오브젝트의 홀을 채우는데 매우 유효 팽창 연산 후 침식 연산 수행 OpenCV 닫기 연산 예제
–Source Code 라디오박스 프로젝트명 Dlg.h 에 라디오 버튼을 컨트롤할 변수 추가 ( 컨트롤 변수 ) 프로젝트명 Dlg.cpp 에 컨트롤 변수와 실제 리소스 ( 라디오 버튼 ) 의 ID 를 연결 OpenCV
–Source Code OpenCV 버튼 구현
–Source Code OpenCV 타이머 구현 클래스 함수 구현
–Result OpenCV Erosion 연산 Dilation 연산
Color Extraction –Color Model 어떤 특정 상황에서 컬러의 특징을 설명하기 위한 방법을 위한 모델 하나의 컬러 모델을 사용하여 컬러의 모든 성질을 설명하기는 불가능 일반적으로 컬러의 특성을 표현하기 위하여 여러 종류의 컬러 모델을 정의 –RGB 모델 컬러 CRT 모니터와 컴퓨터 그래픽스 시스템들에서 사용 빛은 여러 색깔의 빛이 더해질수록 흰색을 나타내며, 빛이 전혀 없으면 검은색을 나타냄 RGB 모델은 이러한 빛의 성질을 이용하여 색을 표현하는 모델 기본이 되는 세 가지 색을 더하여 색을 만들어 내기 때문에 가산 모델 (Additive Model) 이라 함 적색, 녹색 그리고 청색의 요소들은 상호상관성 (Cross Correlation) 이 너무 크기 때문에 몇몇 영상처리 알 고리즘들은 수행이 어려움 히스토그램 평활화와 같은 많은 영상처리 기술들은 영상의 밝기 값만으로 영상을 처리 OpenCV
Color Extraction –YUV(YCbCr) Color Model YCbCr 은 컬러 정보로부터 밝기값과 색차 신호를 분리하여 표현하는 컬러 모델 밝기값은 Y 로 기호화하고 색차신호는 CbCr 로 기호화함 Subsampling 이나 양자화 과정에서 압축을 하게 되는데, 사람의 눈이 컬러 정보에 둔감하기 때문에 사람의 눈으로 화질의 차이를 별로 느끼지 않으면서 압축율을 높일 수 있게 됨 RGB 컬러 모델은 3 개의 요소가 시각적으로 균일한 정보를 가지는 반면, YUV 는 밝기값과 색차 신호로 서 로 다른 정보를 가지고 있기 때문에 JPEG 압축과 MPEG 비디오 압축에서 주로 이용 즉, YUV 는 중복되는 정보가 없음 OpenCV
Color Extraction –HSI Color Model HSI 는 Hue( 색상 ), Saturation( 채도 ), Intensity( 명도 ) 를 의미하며 이 3 가지를 가지고 색을 표현하는 방법 색상은 그 색의 원색을 나타내며 채도는 색의 순수도를 나타내는 것으로서 원색에 어느 정도의 흰색이 혼 합되었는지를 나타냄 HSI 컬러 모델은 색의 변환을 용이하게 해줌, 예를 들면 빨간색을 분홍색으로 만들기 위해서는 단순히 채 도만 조절하면 되고, 어두운 색을 밝게 하기 위해선 명도를 높여주면 됨 HSI 컬러 모델은 원뿔 모양의 좌표계로 표현, 색상은 원뿔 둘레를 따라 0 도에서 360 도의 범위를 가진 각도 로 표현 채도는 0 에서 1 까지의 값을 가지며 원뿔 중심으로부터의 수평거리로 표현 명도는 세로축으로 가장 아래쪽이 명도가 0 이고, 검정색을 나타내며 가장 위쪽이 명도가 1 이고 흰색을 나 타냄 OpenCV
–Source Code OpenCV 버튼 구현 타이머 구현
–Source Code OpenCV 클래스 함수 구현
–Result OpenCV
그 밖의.. –Camshift( 색 추적 ) –Hough Transform( 직선, 원 검출 등 ) –Kalman Filter( 예측 ) – 차영상 – 등등. OpenCV 허프 변환을 통한 직선 검출