Python
[OpenCV with Python] 이진 영상 처리 : 지역 이진화 - cv2.adaptiveThreshold
지역 이진화 균일하지 않은 조명 환경에서 찰영된 영상에서 사용할 수 있다. 불균일한 조명이 있는 영상에서는 이진화 결과가 지저분하게 나온다. 이를 해결하기 위해서는 지역 이진화 방법을 이용해야 한다. 위의 문제 해결하기 불균일한 조명 성분 보상 후 이진화 수행 픽셀 주변에 윈도우 설정하여 지역 이진화 수행 윈도우 크기 윈도우 형태 : Uniform? Gaussian? 윈도우 겹칠건가? Overlap? Non-overlap? 원도우 안에 배경 혹은 객체만 존재 import sys import numpy as np import cv2 # 입력 영상 불러오기 src = cv2.imread('rice.png', cv2.IMREAD_GRAYSCALE) if src is None: print('Image load ..
[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 원에서 검출된 에지의 원주 점의 정보를 이용한다. 원 에지 픽셀에서 그래디언트를 계산한다. 그래디언트 크기 방향으로 직선을 그리면서 값을 누적시킨다. 그래디언트 크기는 원의 중심을 향하므로 직선은 원의 중심에서 모이게 된다. 원의 중심을 찾은 후 반지름을 찾고, 원의 중심에서 반지름을 점점 키워가면서 원주와 만나는지를 확인한다. 단점은 여러 개의 동심원을 검출 못하고 가장 작은 원 하나만 검출한다. ✔︎ 허프 변환 원..