Computer Vision 99

[49] 2) 모멘트 기반 객체 검출

모멘트(moments) 란? 영상의 형태를 표현하는 일련의 실수값 특정 함수 집합과의 상관관계(correlation) 형태로 계산 모양 비교 함수 cv2.matchShape(contour1,contour2,method,parameter) -> retval • contour1: 첫 번째 외곽선 또는 그레이스케일 영상 • contour2: 두 번째 외곽선 또는 그레이스케일 영상 • method: 비교 방법 지정 . cv2.CONTOURS_MATCH_I1, cv2.CONTOURS_MATCH_I2, cv2.CONTOURS_MATCH_I3 중 하나 사용 . • parameter: 사용되지 않음 . 0 지정 • retval 두 외곽선 또는 그레이스케일 영상 사이의 거리 (distance) hug의 불변모멘트를 이용..

[48] 8.영상 분할과 객체 검출 1)그랩컷

그랩컷(GrabCut) 이란? 그래프 컷(graph cut) 기반 영역 분할 알고리즘 영상의 픽셀을 그래프 정점으로 간주하고, 픽셀들을 두 개의 그룹으로 나누는 최적의 컷을 찾는 방식 그랩컷 영상 분할 동작 방식 사각형 지정 자동 분할 사용자가 지정한 전경/배경 정보를 활용하여 영상 분할 그랩컷 함수 cv2.grabCut(img,mask,rect,bgdModel,fgdModel,iterCount,mode=None) -> mask, bgdModel, fgdModel • img: 입력 영상 . 8 비트 3 채널 . • mask: 입출력 마스크 . cv2.GC_BGD(0), cv2.GC_FGD(1), cv2.GC_PR_BGD(2),cv2.GC_PR_FGD(3) 네 개의 값으로 구성됨 . cv2.GC_INIT_..

[47] 9) 명함 인식 프로그램

명함 인식 프로그램 영상에서 명함을 검출하고, 명함 안의 텍스트를 인식하는 프로그램 가정: 명함은 흰색이고, 충분히 크게 촬영되었고, 각지 사각형 모양이다 명함 검출 import cv2 import sys import numpy as np import random import pytesseract def reorderPts(pts): idx=np.lexsort((pts[:,1],pts[:,0])) #칼럼0 -> 칼럼 1 순으로 정렬한 인덱스를 반환 [0,3,1,2]가 나올것임 pts=pts[idx] #x좌표로 정렬 if pts[0,1]> pts[1,1]: pts[[0,1]]=pts[[1,0]] #두 점을 스와핑 하는 코드 if pts [2,1]1: filename=sys.argv[1] src=cv2.im..

[46] 8) 다양한 외곽선 함수

외곽선 관련 함수 외곽선 길이 구하기 cv2.arcLength(curve,closed) -> retval • curve: 외곽선 좌표 . numpy.ndarray . shape=(K, 1, 2) • closed: True 이면 폐곡선으로 간주 • retval: 외곽선 길이 면적 구하기 cv2.contourArea(contour,oriented=None) -> retval • contour: 외곽선 좌표 . numpy.ndarray . shape=(K, 1, 2) • oriented: True 이면 외곽선 진행 방향에 따라 부호 있는 면적을 반환 기본값은 False. • retval: 외곽선으로 구성된 영역의 면적 바운딩 박스(외곽선을 외접하여 둘러싸는 가장 작은 사각형) 구하기 cv2.boundingRe..

[45] 7) 외곽선 검출

외곽선 검출이란? 객체의 외곽선 좌표를 모두 추출하는 작업. Boundary tracking. Contour tracing. 바깥쪽 & 안쪽(홀) 외곽선 -> 외곽선의 계층 구조도 표현 가능 외곽선 객체 하나의 표현 방법 numpy.ndarray shape=(K,1,2) (K는 외곽선 좌표 개수) dtype=numpy.int32 여러 외곽선 표현 방법 "객체 하나의 외곽선(numpy.ndarray)"을 원소로 갖는 리스트 len(리스트)=전체 외곽선 개수(N) 외곽선 검출 함수 cv2.findContours(image,mode,method,contours=None,hierarchy=None,offset=None) -> contours,hierachy • image: 입력 영상 . non zero 픽셀을 ..

[44] 6) 레이블링

객체 단위 분석 (흰색) 객체를 분할하여 특징을 분석 객체 위치 및 크기 정보, ROI추출, 모양 분석 등 레이블링(Connected Component Labeling) 서로 연결되어 있는 객체 픽셀에 고유한 번호를 지정(레이블맵) 영역 기반 모양 분석 레이블맵, 바운딩 박스 ,픽셀 개수, 무게 중심 좌표를 반환 외곽선 검출(Contour Tracing) 각 객체의 외곽선 좌표를 모두 검출 외곽선 기반 모양 분석 다양한 외곽선 처리 함수에서 활용 가능(근사화, 컨벡스힐 등) 레이블링 이란? 동일 객체에 속한 모든 픽셀에 고유한 번호를 매기는 작업 일반적으로 이진 영상에서 수행 Connected component labeling 픽셀의 연결 관계 4-이웃 연결 관계 8-이웃 연결 관계 레이블링 알고리즘의 ..

[43] 모폴로지(2): 열기와 닫기

이진 영상의 열기(opening) 연산 이진 영상의 닫기(closing) 연산 범용 모폴로지 연산 함수 cv2.morphologyEx(src,op,kernel,dst=None,anchor=None,iteration=None,borderType=None,borderValue=None) -> dst 열기 연산을 이용한 잡은 제거 예제 import sys import numpy as np import cv2 src = cv2.imread('rice.png', cv2.IMREAD_GRAYSCALE) if src is None: print('Image load failed!') sys.exit() #src영상에 지역 이진화 수행(local_th.py참고(지역이진화 구현 부분)) dst1=np.zeros(src.s..

[42] 4) 모폴로지 (1): 침식과 팽창

모폴로지(Morphology) 연산이란? 영상을 형태학적인 측면에서 다루는 기법 다양한 영상 처리 시스템에서 전처리(pre-processing) 또는 후처리(post-processing) 형태로 널리 사용 수학적 모폴로지(mathematical morphology) 구조 요소(Structuring element) 모폴로지 연산의 결과를 결정하는 커널, 마스크, 윈도우 이진 영상의 침식(errosion) 연산 구조 요소가 객체 영역 내부에 완전히 포함될 경우 고정점 픽셀을 255로 설정 침식 연산은 객체 외각을 깍아내는 연산 --> 객체 크기는 감소 & 배경은 확대 이진 영상의 팽창(diliation) 연산 구조 요소와 객체 영역이 한 픽셀이라도 만날 경우 고정점 픽셀을 255로 설정 팽창 연산은 객체 외..

[41] 3) 지역 이진화

균일하지 않은 조명 환경에서 촬영된 영상의 이진화 균일하지 않은 조명의 영향을 해결하려면? 불균일한 조명 성분을 보상한 후 전역 이진화 수행 픽셀 주변에 작은 윈도우를 설정하여 지역 이진화 수행 윈도우의 크기는? 윈도우 형태는? 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 failed!') sys.exit() #전역 이진화 by Otsu's meth..

[40] 2) 자동 이진화: otsu 방법

임계값 자동 결정 방법 Ostu 이진화 방법 입력 영상이 배경(background)과 객체(object) 두 개로 구성되어 있다고 가정 -> Bimodal histogram 임의의 임계값 T에 의해 나눠지는 두 픽셀 분포 그룹의 분산이 최소가 되는 T를 선택 일종의 최적화 알고리즘 (optimization algorithm) Otsu 방법을 이용한 자동 이진화 import sys import numpy as np import cv2 src = cv2.imread('rice.png', cv2.IMREAD_GRAYSCALE) if src is None: print('Image load failed!') sys.exit() th,dst=cv2.threshold(src,0,255,cv2.THRESH_BINARY..