이미지를 흑백으로만 표현한 것을 이진화 이미지(binary image)라고 한다. 이미지에서 원하는 부분을 더욱 정확하게 판단하기 위해서 이를 활용하며, thresholding이라는 방법을 통해서 이진화 이미지를 만들 수 있다. Thresholding이란 입력된 자료군을 임계값과 비교하는 데이터 변환 기법으로, 합격/불합격 여부처럼 새롭게 입력된 자료군이 임계값보다 큰지 작은지에 따라 두 부류로 나누는 것을 의미한다. 1. 전역 thresholding Binary 이미지를 만들기 위해서는 Color 이미지를 Gray scale로 변환해서 각 pixel이 임계값을 넘으면 255(흰색), 그렇지 않으면 0(검은색)이 되도록 한다. 이러한 기능은 cv2.threshold()를 통해 구현한다. import cv..
데이터 분석 & 시각화 검색 결과
불린 인덱싱 매우 편리한 데이터 추출 방식이다. iloc[ ], loc[ ] 을 사용하기 보다는 불린 인덱싱을 이용하여 데이터를 가져오는 경우가 더 많다. Why? 데이터 세트의 데이터 수는 일일이 수작업으로 인덱스를 적어서 처리하기에는 너무 많다. 따라서, 조건을 확인하고 인덱스를 적기보다는 해당 조건을 만족하는 데이터들을 바로 추출하는 불린 인덱싱을 이용하는 것이다. loc[ ] 을 사용하면서도 불린 인덱싱을 할 수 있다. ex> #두 코드는 동일한 기능을 가지고 있다. titanic_df[titanic_df['Age'] > 60][['Name','Age']] titanic_df.loc[titanic_df['Age'] > 60, ['Name','Age']] ※ 복수개의 조건들을 사용하는 경우 [ ](..
모폴로지(morphology)란 한글로는 형태학을 의미하며, 일반적으로 생물의 구조나 외형을 연구하는 생물학의 한 분야를 뜻한다. NLP 분야에서의 모폴로지는 문맥에 따라 단어와 형태소에 관해 연구하는 것을, Computer Vision에서 모폴로지는 Noise를 제거하거나 영역 간 경계를 허물어뜨리는 형태학적인 연산을 수행하는 것을 의미한다. Computer Vision에서의 모폴로지를 위한 대표적인 연산 방법으로는 침식과 팽창이 있다. 1. 침식 연산 침식(erosion)은 기존에 있던 영역을 깎는 것이다. 침식 연산의 구조화 요소 커널이 해당 픽셀에 온전히 적용되지 않으면 그 픽셀을 없애버린다는 것이다. 행렬로 표현하면 다음과 같이 나타낼 수 있다. 구조화 요소 커널이 입력 영상의 pixel 내부에..
Pandas : 데이터 처리를 위한 라이브러리 / 많은 부분이 numpy로 작성되어 있다. / 고수준 API 제공 / csv 파일 등 외부 데이터도 DataFrame으로 변경하는 것이 용이하다. import pandas as pd pandas를 불러오는 코드. numpy를 코드에서 np로 적는 것 처럼 pandas에서도 마찬가지로 pd라고 사용하는 경우가 대부분이다. 판다스의 기본적인 함수들 pd.read_csv() : csv 파일을 dataframe으로 만드는 함수(csv파일은 이해하기 쉽게 엑셀 파일과 거의 동일한 형태라고 보면 된다. ) pd.head / tail() : DataFrame의 첫/마지막 데이터들을 제공한다. 샘플을 보여주는 기능을 하는 함수라고 생각하면 된다. 괄호 안에 숫자를 집어넣..
에지 탐지란 배경과 전경을 분리하는 작업이며, 객체 인식을 위해서는 에지 탐지가 필수적이다. 이전 글에서 살펴본 블러링이 영상을 흐릿하게 했다면, 에지 탐지를 통해 경계에 있는 pixel만 골라서 영상을 선명하게 하는 것을 Sharping(샤프닝)이라고 한다. 1. 기본 미분 필터 경계를 검출하기 위해서는 pixel 값이 급격하게 변하는 지점을 찾아야 하는데, 이는 미분 연산을 통해 찾을 수 있다. 그러나 pixel 값은 이산적인 데이터를 지니기 때문에 정확하게 미분 연산을 수행할 수 없다. 따라서, 근사화를 거쳐 계산이 이루어진다. 이를 컨볼루션 커널로 만들면 다음과 같다. 좌측은 세로 방향의 경계를, 우측은 가로 방향의 경계를 탐지한다. import cv2 import numpy as np img =..
0. 필터 처리 영상 처리에서는 필요한 값만 얻기 위한 필터가 사용된다. 필터를 활용하면 영상을 흐릿하게 하거나 선명하게 해서 edge(경계)를 검출하는 등 객체 인식도 할 수 있다. 영상 처리는 기존에 있던 pixel 값에 연산을 적용해서 새로운 pixel을 얻는 작업이다. 이 때, 연산을 수행할 pixel과 그 주변의 pixel을 활용하는 방법을 공간 영역 필터라고 한다. 공간 영역 필터에서 주변 pixel의 범위와 결과 산출을 위해 kernel이라는 n x n 행렬을 사용한다. 커널 행렬 값과 그에 대응하는 pixel 값을 곱해서 모두 합한 값이 결과 pixel값으로 출력되고, 이것을 처음부터 끝까지 반복한 것을 Convolution이라 한다. 커널의 값에 따라 블러링, 에지 탐지 등을 수행한다. ..
앞선 내용에서 영상의 이동, 회전 및 스케일링에 대해 다룬 적이 있다. 이미지 변환 - 이동, 회전, 스케일링 1. What is OpenCV? OpenCV란 Computer Vision을 위한 프로그래밍 라이브러리이며, TensorFlow나 PyTorch등의 Deep Learning Framework를 지원한다. 자바, 매트립 등 다양한 언어에서 개발환경을 지원하며, 여기서.. dsbook.tistory.com 위와 같은 경우는 이미지의 변환 후에도 기존 형태가 유지되지만, 이미지에 뒤틀기(Wariping) 변환을 주면 기존 형태와는 다르게 나타난다. 1. Affine Transform 아핀 변환(Affine Transform)이란 이동이나 회전 등을 포함하는 변환으로, 길이의 비율과 평행성이 보존되며..
이미지의 특정 영역을 지정하는 것에 대해 ROI(Region Of Interest)라고 한다. OpenCV가 Python언어에 대해서는 관심영역을 지정하도록 지원하는 별도의 API는 없지만, NumPy의 slicing을 통해서 이와 관련된 작업을 할 수 있다. img라는 이미지의 관심 영역의 시작 좌표가 (x, y)이고 해당 영역의 폭이 w, 높이가 h라고 하면 관심 영역을 지정하는 코드는 ROI = img[y:y+h, x:x+w] 와 같이 작성할 수 있다. 이는 img의 y행에서 y+h행까지, x열에서 x+w열까지 slicing한 것을 의미한다. 1. 좌표 지정 import cv2 import numpy as np img = cv2.imread('image.jpg') x = 350; y = 125 w ..
마우스의 입력을 통해 이벤트 처리를 수행할 함수를 작성해서 마우스 입력 상태에 따라 이미지의 출력 결과가 다르게 나타나도록 할 수 있다. import cv2 import numpy as np img = np.full((300,300,3), 255, dtype = np.uint8) title = "Mouse Event" cv2.imshow(title, img) def Mouse(event, x, y, flag, param): if event == cv2.EVENT_LBUTTONDOWN: # 왼쪽 버튼 클릭 cv2.circle(img, (x,y), 15, (255,0,0), -1) cv2.imshow(title, img) cv2.setMouseCallback(title, Mouse) while True: i..
OpenCV에서는 객체나 얼굴을 인식해서 해당하는 영역을 사각형으로 표시하는 것이 자주 사용된다. 여기서는 직선, 사각형을 포함한 다각형, 그리고 원 등의 도형을 그리는 방법에 대해 다루고자 한다. 1. 직선 그리기 이미지에 직선을 그리는 함수로 cv2.line()을 사용한다. import cv2 import numpy as np img = np.full((350,350,3), 255, dtype = np.uint8) # 350 x 350 크기의 흰 이미지 cv2.line(img, (50,50), (100,50), (0,0,255)) # Red cv2.line(img, (150,50), (200,50), (0,255,0)) # Green cv2.line(img, (250,50), (300,50), (25..
최근댓글