opencv 8

[Python 영상처리 기초 8] Affine Transformations

Affine transformations 은 하나의 이미지 공간에서 다른 공간으로의 매핑으로써 영상처리에서 흔하게 쓰이는 변환중의 하나입니다. 이미지의 확대/축소, 회전, 이동, 반사 등이 affine transformations 의 예입니다. 밑의 affine transformation (T) (출처1)에서 보듯이 입력공간 또는 이미지 [x, y]을 대상으로 사용자가 지정한 2x3 크기의 transformatin matrix (M)의 값에 따라 회전, 반사 등의 변환 또는 매핑을 수행할 수 있습니다. 본 포스트에서는 이미지의 (확대/축소를 제외한) 변환을 transformation matrix인 M에 의해 연산할수 있음을 보입니다. OpenCV에서의 afffine transformations의 모양은 ..

[Python 영상처리 기초 7] 이미지의 화질개선 Contrast-Brightness-Gamma - part1

앞서 [Python 영상처리 기초 4] 이미지의 픽셀값 다루기 - Crop, 선형연산 에서 보았듯이, 픽셀값을 증가시키면 이미지의 밝기가 밝아짐을 알 수 있습니다. import cv2 import numpy as np import matplotlib.pyplot as plt %matplotlib inline img_color = cv2.imread('national-cancer-institute-jdfn7Z03Qa4-unsplash.jpg',cv2.IMREAD_COLOR) img_gray = cv2.cvtColor(img_color,cv2.COLOR_BGR2GRAY) start_pt = [1210, 753] # [y, x-axis] or (y, x-axis), both are fine end_pt = [..

[Python 영상처리 기초 6] 선형 공간 필터링 - Average, Laplacian, Sobel filters

Image processing (영상처리)에서 가장 흔하게 사용되는 기법중의 하나가 이미지 필터링 (image filtering) 입니다. OpenCV에서 기본 제공하는 필터 - Average, Sobel filter 등 - 또는 사용자가 제작한 필터를 이용해 대상 이미지와의 연산(convolution 등)을 통해 새로운 이미지를 생성하는 것을 이미지 필터링(image filtering) 이라고 합니다. 흔히 이미지상의 지정된 부분을 흐릿하게 하거나 대상의 윤곽선(edge)에 강조를 주어 더 선명하게 해주는 기능은 이미지 필터링의 직접적인 역할 입니다. 또한 간접적인 역할로써는, 딥러닝 (deep learning) 네트워크 중 이미지에서 원하는 물체 혹은 대상을 자동으로 검출하는 기능을 하는 CNN (C..

[Python 영상처리 기초 5] 이미지의 화질개선 - Normalization, Standardization

앞의 글 [Python 영상처리 기초 3] 이미지의 픽셀값 다루기 에서 BGR 컬러채널을 갖는 이미지의 gray scale 변환을 수행하였습니다. 그리고 gray scale 변환된 이미지 데이터는 기본적으로 uint8 형식을 가짐을 알 수 있었습니다. Normalization 보통 Image Processing은 float (혹은 소숫점) 형식의 이미지 데이터를 다룹니다. 만일 정수형(int 또는 uint)의 픽셀값을 대상으로 사칙연산(곱셈, 나눗셈 등)을 한다면 연산후 소수점 이하의 값은 제거된다거나 표현가능 범위(여기서 uint8는 0 부터 255까지) 를 넘어서는 경우등 연산결과가 이미지상에 제대로 표현할 수 없기 때문입니다. float 등의 소수점 형식의 이미지 데이터는 최소 0부터 최대 1.0 ..

[Python 영상처리 기초 4] 이미지의 픽셀값 다루기 - Crop, 선형연산

본 글에서는 이미지의 특정부분을 잘라내기(Crop) 혹은 추출하여 이미지 프로세싱을 수행후 본래 이미지에 붙여넣기 하는 작업을 해보겠습니다. 자동으로 이미지상의 ROI (Region of Interest) 를 추출하여 연산을 수행하는것은 중급과정에서 다룰 예정입니다. 우선 위의 이미지 에서 보이는 특정부분 (흰색 네모상자)을 잘라내기(Crop) 하여 새로운 변수로 지정하여 보겠습니다. 임의로 지정한 좌표 - tuple ( x좌표, y좌표 ) 형식 ( 753, 1210 ) 부터 ( 2115, 2110 ) - 를 입력 파라메터로 하는 cv2.rectangle( ) 명령어를 이용하였습니다. 여기에서 주의할 점은 cv2.rectangle( ) 명령어에서는 ( x좌표, y좌표 ) 순서의 입력 파라메터를 갖지만, ..

[Python 영상처리 기초 3] 이미지의 픽셀값 다루기 - Gray scale, Histogram, Binarization

픽셀 (pixel)은 이미지를 구성하는 기본요소로써 한 그룹의 픽셀들이 점, 선, 면 등을 나타낼 수 있고, 각 픽셀 값에 의해 이미지의 밝기, 명암 등을 나타낼 수 있습니다. (모자이크가 좋은 예 입니다.) 이미지 데이터는 높이(세로) x 폭(가로)의 2차원, 혹은 높이(세로) x 폭(가로) x 색상채널의 3차원 픽셀값 모임이라고 볼 수 있습니다. 3차원 이미지 데이터의 구조는 아래의 오른쪽 그림에 묘사되어 있으며, 앞선 글에서 대상이 되는 3차원의 BGR컬러 이미지 파일을 Jupyter Notebook 에 불러들여 Blue, Green, Red 각각의 색상채널로 분리하는것을 수행하였습니다. 대상 이미지의 픽셀값은 uint8 형식을 따르며 이는 최소 0 부터 최대 255까지 256가지 범위를 갖고, 픽..

[Python 영상처리 기초 2] BGR컬러 이미지의 색상채널분리 - cv2.split( ), cv2.merge( )

위의 대상 이미지는 3차원의 BGR컬러 데이터 (세로픽셀 x 가로필셀 x 색상채널: 4500 x 6000 x 3)를 나타내고, 색상채널은 R(빨강색) G(초록색) B(파랑색)의 데이터를 표현합니다. 위 이미지는 본 블로그 맨밑 출처 1에 가셔서 다운로드 받을 수 있습니다. 위의 대상 이미지가 이미 Jupyter Notebook에 "img_color" 라는 변수에 저장되어 있다고 가정합시다. ( 이미지 파일 불러오기는 본 블로그의 [Python 영상처리 기초 1] 이미지 파일 불러오기 참조 ) import cv2 import matplotlib.pyplot as plt %matplotlib inline # img_color = cv2.imread('path/filename', cv2.IMREAD_COLOR..

[Python 영상처리 기초 1] 이미지 파일 불러오기 - cv2.imread( ), plt.imshow( )

위의 이미지는 3차원의 RGB컬러 데이터 (세로x가로x채널수: 4500 x 6000 x 3)를 나타냅니다. 만일 이미지가 gray scale 혹은 black & white 이라면 2차원 (세로픽셀 x 가로픽셀) 의 데이터를 가지고, 컬러 이미지 라면 3차원 (세로픽셀 x 가로필셀 x 색상채널)의 데이터를 가지며, 색상채널은 B(파랑색) G(초록색) R(빨강색)의 데이터를 표현합니다. ( 주의 하세요! Python에서는 RGB가 아닌 BGR의 순서로 이미지 데이터를 나타냅니다. ) 위 이미지는 본 블로그 맨밑 출처 1에 가셔서 다운로드 받을 수 있습니다. Python에서 이미지 데이터를 다루기 위해 다양한 패키지들이 존재하는데 앞으로 OpenCV를 중심으로 Jupyter Notebook 환경에서 설명하겠습..