OpenCV
[OpenCV with Python] 이진 영상 처리 : 자동 이진화 - Otsu 방법
자동 이진화 영상 이진화 처리시 임계값은 경험에 의존해 임계값을 설정하는 것이 일반적이다. 하지만 영상이 조명이나 환경에 따라서 픽셀 값이 미세하게 변화한다. 영상마다 사용할 수 있는 임계값이 있는데 임계값을 자동으로 설정해주는 방법이 있다. 가장 유명한 방법인 Otsu 이진화 방법에 대해 알아보자. Otsu 이진화 방법 이진화의 임계값을 구분하는 가장 좋은 방법으로 많이 이용하고 있다. 입력 영상이 배경(background)과 객체(object) 두 개로 구성되어 있다고 가정하면, 이를 Bimodal histogram 이라고 한다. Otsu 이진화는 Bimodal histogram인 경우에 적용이 가능하다. 임의의 임계값 T에 의해 나눠지는 두 픽셀 분포의 분산이 최소가 되는 T를 선택하는 방법이다. ..
[OpenCV with Python] 이진 영상 처리 : 영상의 이진화 - cv2.threshold
영상의 이진화 Binarization 란? 영상의 이진화는 영상의 픽셀 값을 0 또는 255(1)로 만드는 연산이다. 0은 검정색, 255는 흰색을 의미한다. 이진화를 하는 이유는 배경과 객체를 구분 관심 영역과 비관심 영역 구분 마스크 영상도 이진 영상의 한 형태라고 볼 수 있다. 그레이스케일 영상의 이진화 그레이스케일 영상의 이진화는 픽셀 값이 임계값을 넘으면 0(검은색) 임계값 보다 낮으면 255(흰색)으로 표현한다. 히스토그램을 보고 적절한 임계값을 설정하는 것이 중요하다. ✔︎ 임계값 함수 - cv2.threshold retval, dst = cv2.threshold(src, thresh, maxval, type, dst=None) src : 입력 영상. 다채널, 8비트 또는 32비트 실수형 t..
[OpenCV with Python] 영상의 특징 추출 : 영상에서 원 검출하기 - 허프 변환
허프 변환을 응용하여 원을 검출할 수 있다. 직선 검출과 같이 원의 방정식을 파라미터 좌표평면에 표현하면 3차원 축적 평면이 되므로 연산속도가 너무 오래 걸리게 된다. 속도를 더 빠르기 위해 제안된 방법이 Hough gradient method 이다. Hough gradient method 원에서 검출된 에지의 원주 점의 정보를 이용한다. 원 에지 픽셀에서 그래디언트를 계산한다. 그래디언트 크기 방향으로 직선을 그리면서 값을 누적시킨다. 그래디언트 크기는 원의 중심을 향하므로 직선은 원의 중심에서 모이게 된다. 원의 중심을 찾은 후 반지름을 찾고, 원의 중심에서 반지름을 점점 키워가면서 원주와 만나는지를 확인한다. 단점은 여러 개의 동심원을 검출 못하고 가장 작은 원 하나만 검출한다. ✔︎ 허프 변환 원..
[OpenCV with Python] 영상의 특징 추출 : 영상에서 직선 검출하기 - 허프 변환
허프 변환(Hough transform) 직선 검출이란? 에지(윤곽선) 영상은 검정색 배경에 에지부분만 흰색이다. 이 입력 영상에서 에지가 있는 좌표를 추출하는 것이다. 에지 영상에서 좀 더 고차원적인 정보를 얻기 위해 에지 영상의 분포를 보고 직선, 사각형 등 고차원적인 형태 정보를 추출한다. 직선을 추출해내는 가장 유명한 알고리즘이 허프 변환이다. 축적 알고리즘을 이용하여 내가 원하는 파라미터를 찾아낸다. 허프 변환 직선 검출은 2차원 영상 좌표에서의 직선의 방정식을 파라미터(parameter) 공간으로 변환하여 직선을 찾는 알고리즘이다. 축적 배열 accumulation array 축적 배열은 직선 성분과 관련된 원소 값을 1씩 증가시키는 배열이다. x, y 좌표평면에서의 직선의 한 점을 a, b ..