본문 바로가기

CV

(9)
영상의 모폴로지 연산 - Morphological Image Processing 모폴로지 - Morphology - 모폴로지는 형태학이라는 의미를 갖고 있다. - 영상을 형태학적인 측면으로 접근하는 것이 모폴로지 이다. - 모양에 대한 정보에 더 집중을 한다. - 모폴로지 연산은 이미지를 분할하여 단순화, 제거, 보정을 통해 형태를 파악하려는 목적으로 사용이 된다. - 일반적으로 binary나 grayscale image에 사용이 된다. - 사용하는 방법으로는 Dilation(팽창), Erosion(침식), 그리고 2개를 조합한 Opening과 Closing이 있다. - 여기에는 2가지 Input값이 있는데, 하나는 원본 이미지 또 다른 하나는 structing element이다. 구조 요소(structuring element) - 구조 요소(structuring element)는 ..
이미지 블러링(Images Smoothing/Blurring) 1. Image Filtering - image smoothing은 이미지 처리나 컴퓨터 비전에 사용되는 기본적인 이미지 변형 방법이다. - 이것은 이미지에 필터를 합성하는 것을 통해 이루어 진다. - 즉 원본 이미지보다 크기가 작은 필터를 이미지 전체에 걸쳐 이동하며 원본 이미지의 픽셀값을 바꾼다. - 블러링은 노이즈를 제거하는데 유용한 방법이며, 이미지를 좀 더 매끈하게 보이도록 만드는 효과를 낸다. 2D Convolution - opencv에서는 cv2.filter2D() 함수를 이용하여 이미지에 kernel(filter)를 적용하여 이미지를 Filtering 할 수 있다. - kernel은 행렬을 의미하는데 크기가 크면 이미지 전체가 blur처리가 많이 된다.(일반적으로 5*5 행렬을 사용하여 적..
이미지의 기하학적 변환(Geometric Transformations of images) 1.Scaling(보간법) - 크기 조절은 단지 이미지의 크기를 조절하는 것이다. - opencv는 scaling을 위해 cv2.resize()함수를 제공한다. - 이미지의 크기는 수동으로 지정하거나 배율 인수를 지정할 수 있다. 이미지의 크기를 늘리거나 줄이더라도 픽셀의 수는 일정하므로 빈공간이 생기게 된다. 그 빈공간을 잘 채울 수 있게 하는 방법을 다음과 같이 소개하겠다. cv2.INTER_AREA : 크기 줄일 떄 사용 cv2.INTER_CUBIC : 크기 늘릴떄 사용 (속도 느림, 퀄리티 좋음) cv2.INTER_LINEAR : 크기 늘릴떄 사용(기본값) 보간법을 적용하여 축소 import cv2 img = cv2.imread('catImg.jpg') dst = cv2.resize(img, No..
OpenCV 기본 연산 1. 픽셀 정보 가져오기 1) (100, 200)에 위치한 pixel의 Blue, Green, Red값 가져오기 px = img[100,200] print(px) 2) (100,200)에 위치한 pixel의 Blue 값 가져오기 - OpenCV에서는 RGB순이 아닌 BGR이다. - 즉 Blue는 0, G는 1, R은 2의 인덱스에 위치하게 된다. b = img[100,200,0] print(b) -item() 함수를 사용하여 픽셀의 컬러값을 가져올 수 있다. # (20,20)에서의 red값 img.item(20,20,2) 3) pixel 값 변경하기 (흰색으로) img[100,200] = [255,255,255] 2.영상의 속성 - 영상의 형태 정보 img.shape #(h,w,channel)값을 리턴받..
도형 그리기(직선, 사각형, 원, 타원, 다각형, 텍스트) 도형 그리기 - 도형 그리기는 동영상이나 사진에서 어떠한 특정 위치를 표시하고자 할때 사용된다. 1. 빈 스케치북 만들기 import cv2 import numpy as np #세로 480 x 가로 640, 3Channel (RGB) 에 해당하는 스케치북 만들기 img = np.zeros((480,640,3), dtype=np.uint8) img[:] = (255,255,255) #전체 공간을 흰색으로 채우기 cv2.imshow('img',img) cv2.waitKey(5000) # 지정된 시간 동안 사용자 키 입력 대기 cv2.destroyAllWindows() 2.직선 그리기 import numpy as np import cv2 img = np.zeros((512,512,3),np.uint8) img..
연결 요소 1. 화소의 모양 - 화소는 어떤 모양일까? - 위 사진과 같이 많은 형태의 화소가 존재한다. 프린터나 모니터와 같이 화소를 물리적으로 다루어야 하는 경우 모양이 중요하다. 하지만 - CV에서 화소는 추상적인 것에 불과하기 때문에 가장 편리한것을 선택하면된다. 육각형은 좌표를 지정하기 어려워 대부분 사각형의 모양을 사용한다. 2. 화소의 연결성 -화소의 이웃에 대해 생각해 보자. - 보통 동서남북 네 개 화소를 이웃으로 간주하는 4-연결성과, 여덟게 화소를 모두 이웃으로 삼는 8-연결성을 보여 준다. - 이진 영상을 살펴보면 서로 연결된 화소의 집합이 여럿 나타난다. - 이들 집합 각각을 연결 요소(Connected Component라 부른다.) - 보통 연결 요소는 별도로 다루기 때문에. 이들 각각에 ..
이진화, 오츠 알고리즘(Binarization, Thresholding, Otsu Algorithm) 1. 이진화 - 명암 영상을 흑과 백만 가진 이진 영상으로 변환하는 것. 이때 백은 0, 검은색은 255를 의미한다. - 영상을 이진화하는데 이유는 여러가지의 이유가 있지만, 가장 중요한 이뉴는 어떠한 경계값을 기준으로 이진화를 시키면 물체가 뚜렷해지기 때문이다. - 그럼 어떻게 화소의 명암값을 흑과 백 중 하나로 결정할 수 있을까? - 간단히 생각해보자면 어떠한 임계값(T)을 지정해 두고, 그 화소의 값이 임계값보다 크다면 백, 작으면 흑으로 바꾸는 것이다. cv2.threshold(이진화할 이미지경로, 임계값(T), x>T일때 적용할 값, thresholding type) import cv2 img = cv2.imread('book.jpg', cv2.IMREAD_GRAYSCALE) #threshold..
히스토그램 평활화, 역투영(Equalized, Back-Projection) 1. 히스토그램 - 히스토그램은 해당 값에 대한 빈도수를 시각화하여 나타낸 그래프이다. - 영상처리에서 히스토그램은 명암값에 대한 빈도수를 나타내기 위해 사용되었다. - 주로 영상의 특성을 파악하기 위해 사용한다. 더보기 히스토그램의 용도 영상의 명암값의 분포를 보여준다. 조작을 통한 영상의 품질을 개선한다. 컬러 분포가 비슷한 영역을 검출하여 물체를 검출한다. - 다음 그래프처럼 왼쪽에 치우칠수록 어두운 영상임을 알 수 있다. - 다음 그래프는 명암의 범위가 넓으며 밝기 분포가 비교적 균일하다. - 다음 영상의 그래프를 보면 두개의 봉우리가 선명하게 나타난 영상으로 이런 사진은 이진 영상으로 변환하기 쉽다. 히스토그램 OpenCV로 표현하기 - OpenCV와 Matplotlib을 이용하여 Histogr..