Computer Vision
[OpenCV] 동영상 분할(Video Segmentation)
이미지, 동영상 분할(image/video segmentation)이란? 주어진 디지털 이미지, 비디오를 여러 개의 영역으로 나누는 것으로, chroma-keyin이나 surveillance camera 등 다양한 분야에서 활용되고있다. 1. Background subtraction - image/video segmentation 의 대표적인 방법 비디오가 주어지면, 해당 비디오의 foreground object를 식별하는 것으로, 대부분의 경우 배경이 아닌 물체나 움직이는 객체에 관심이 있다. t 시간의 현재 영상 f(x,y,t)이 있고, 그 시간대에 맞는 배경 영상 B(x,y,t)이 있다고할때, 그 두 영상의 차이를 구해서 그 차이가 특정한 T(threshold)를 넘는다면 배경 영상에 없던 특정한 ..
[OpenCV] 영상 분할(Image Segmentation)
영상분할(image/video segmentation)이란? 어떤 디지털 이미지가 주어져있을때, 그 영상을 여러개의 영역으로 분할하는 것이다. 영상분할은 보통 object classification(물체 분류)에 활용되는데, 우리 눈에는 배경과 어떤 물체 영역이 구별되어 보이지만 실제로 밝기값의 차이가 크거나 미미할 수 있다. 이런 이미지를 0과 255같이 2가지의 값으로 분리시켜 물체의 분류가 용이해지도록 하는 것이다. 입력: gray-scale 이미지 출력: binary image(0과 255 또는 0과 1 같이 2개의 값으로만 이루어진값) 1. Thresholding 영상분할에는 다양한 방법들이 있는데, 그 중 대표적인 방법으로 Thresholding이 있다. 가정 - 분할, 추출하고 싶은 물체와 ..
[OpenCV] 컬러영상처리(Color Processing)
먼저 컬러영상을 처리할 때, RGB 색공간에서 컬러 프로세싱을 하면 영상의 톤이 달라진다던지, 화질 저하 등의 문제가 발생할 수 있기 때문에 HIS나 yCbcR 공간으로 변환 후 I값이나 Y값을 건드려서 컬러 프로세싱을 한다. Usage of HSI - intensity 이미지를 분리시킨다. 이 때는 intensity 값만 변경 가능하다. - Color Slicing(컬러 슬라이싱). Hue(색조)-channel에서 원하는 색상의 픽셀값을 찾고, Saturation(채도)-channel 다른 모든 픽셀의 값을 0으로 설정한다. - Color Conversion(색상변환). Hue-channel에 접근해서 색상 영역를 변경 가능하다. Pseudo Coloring 사람의 눈은 gray 이미지에서, 약 30~..
[OpenCV] 공간 도메인 필터링(Spatial Filtering)
Spatial Filtering Spatial Filtering는 spatial filters을 이용해 전처리를 하는것으로, spatial mask, kernel, templates, windows 등으로 불린다. Spatial filtering하는 방법은 간단하다. 영상의 좌상단부터 이동하면서 saptial 필터를 적용한다. Spatial filters을 수행하고 싶은 특정한 픽셀을 가운데로 놓고 필터를 위치시킨다. 이 때 필터는 보통 3x3, 5x5, 7x7크기이다. 영상의 픽셀값과 그에 위치하는 필터값을 곱한 값을 모두 더한값으로 변환시킨다. 만약 3x3 saptial filters를 사용한다면, f(x,y)값에 g(x,y) = w(-1,-1)f(x-1,y-1)+w(-1,0)f(x-1,y) +…w(..
[OpenCV] 히스토그램 평활화(Histogram Equalization)
히스토그램(=도수분포도) intensity levels의 범위가 [0, L-1]인 영상의 히스토그램에서 - ℎ (𝑟𝑘) = 𝑛𝑘 - 𝑟𝑘: 𝑘^𝑡ℎ intensity value(k번째 인텐시브 값), 𝑛𝑘 : the number of pixels with intensity 𝑟𝑘 (인텐시브 rk의 픽셀 수) - 이 경우 bin의 개수는 L이다. 히스토그램의 bin의 개수가 256개, 이미 픽셀 값도 0~255라고 할때, 제일 첫번째 bin에 해당하는 값은 intensity 값(픽셀 값)이 0인 픽셀의 개수로 결정된다. Histogram normalization(히스토그램 정규화) - 각 구성 요소를 총 픽셀 수로 나눔. 즉, 각각의 bin에 있는 값을 영상을 포함하고 있는 전체 픽셀 값으로 나눠준다. 영상..
[OpenCV] 밝기값 변환(Intensity Transformation)
밝기값 변환(Intensity Transformation)이란? 입력 영상의 픽셀 값을 사전에 정의한 매핑 관계를 토대로 다른값으로 매핑시키는 것. Image negatives(이미지 반전, 색상반전) 영상의 intensity level 이 [0, L-1] 사이일 때, 이미지를 반전시키는 것. s= L-1-R (r: 입력, s : 출력) 이미지의 어두운 영역에서의 흰색 또는 회색 디테일을 찾아내는데 적합하다. 어두운 색상의 이미지를 반전시켜서, 보기 용이하도록 함 Log transformation (로그 변환) s=c log(1+r) (c: constant(상수), r: 입력, s: 출력) 낮은 intensity 값의 범위가 좁을 경우에, intensity 값을 넓혀줄 때 활용하는데, 이때 어두운 영역(..
[OpenCV] 메모리 관리 및 픽셀 액세스(Memory Management/Pixel Access)
목표 openCV에서 메모리를 어떻게 관리하는지 영상의 각각의 픽셀을 어떻게 접근하는지 Memory Management 1. shallow copy mat은 헤더 부분/ 데이터 부분으로 구성 헤더에 포함되있는 데이터의 주소값 부분만 copy됨 = 라는 기호를 등호로 사용해 copy copyTo()라는 함수 이용. 특정한 경우에서는 shallow copy로 작용됨. 입력(source) matrix와 결과 matrix의 데이터타입과 크기가가 같을 경우 주소값만 복사되고, 그렇지 않은 경우에는 deep copy로 이루어진다. m1 메트릭스가 데이터와, 데이터를 가르키는 주소값으로 구성되어있을 때, m1에 대한 shallow copy를 통해서 m2를 만들었다면 m2에 대한 데이터가 다시 만들어지는 것이 아니라 ..
[OpenCV] Drawing 함수(Drawing Function)
목표 openCV 활용해서 영상 내에 다양한 도형 그리기 및 글자 쓰기 Rectangle (사각형그리기) void rectangle(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=8, int shift=0) - Pt1, Pt2 : 사각형을 구성하는 꼭지점 (pt2는 pt1의 반대방향에 있는것) - Color : 색상 - thickness : 두께 - lineType: 선의 타입 - shift : 사각형을 정교하게 그리고 싶을 때 사용함 void rectangle(Mat& img, Rect rec, const Scalar& color, int thickness=1, int lineType=8, int sh..