[CNN] 컴퓨터 비전 기초

지승훈·2024년 11월 26일
0

1. 컴퓨터의 이미지 처리 형태


컬러의 경우는 RGB의 3차원 형태.


0~255까지의 값을 이용해 밝기를 표현, 2차원 형태의 gray scale.

2. 이미지 데이터를 처리하는 과정

2.1 데이터 전처리

  • 이미지를 픽셀 값(RGB)로 변환.
  • 정규화(Normalization): RGB 값을 0 ~ 255 범위에서 0 ~ 1 사이의 값으로 변환하여 딥러닝 모델에 적합하게 만듦.
  • 이미지 크기 조정(Resizing): 네트워크에 맞는 입력 크기로 변환.

2.2 특징 추출

  • 딥러닝 모델(특히 CNN)에서 이미지를 처리하며 특징(feature)을 학습.
    • Ex: 에지(Edge), 패턴(Pattern) 등.
  • 기존 방법(딥러닝 이전의 방법): 수작업으로 특징을 추출하거나, 필터와 머신러닝 알고리즘을 활용.
    • 에지 검출 필터: Sobel 필터, Canny Edge Detector 등을 사용하여 이미지의 윤곽선을 추출.
    • 추출된 특징을 사용하여 SVM(Support Vector Machine)이나 KNN(K-Nearest Neighbors) 같은 머신러닝 모델로 분류 작업 수행.

2.3. 모델 적용

  • 이미지 분류(Classification), 객체 탐지(Object Detection), 이미지 분할(Segmentation) 등 다양한 컴퓨터 비전 작업 수행.

3. OpenCV를 사용한 이미지 읽기

import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from PIL import Image
import requests
from io import BytesIO
url = 'https://cdn.pixabay.com/photo/2023/12/14/20/24/christmas-balls-8449616_1280.jpg'

response = requests.get(url)
pic = Image.open(BytesIO(response.content))

필요 라이브러리 로드후 pic에 저장

pic_arr = np.asarray(pic) # PIL 이미지를 array 형태로 변환
# R channel 분포 확인
pic_red = pic_arr.copy()
pic_red[:,:,1] = 0
pic_red[:,:,2] = 0

# G channel 분포 확인
pic_green = pic_arr.copy()
pic_green[:, :, 0] = 0
pic_green[:, :, 2] = 0

# B channel 분포 확인
pic_blue = pic_arr.copy()
pic_blue[:, :, 0] = 0
pic_blue[:, :, 1] = 0

plt.figure(figsize=(20,5))
plt.subplot(1,4,1)
plt.imshow(pic_arr)
plt.subplot(1,4,2)
plt.imshow(pic_red)
plt.subplot(1,4,3)
plt.imshow(pic_green)
plt.subplot(1,4,4)
plt.imshow(pic_blue)
plt.show()

채널은 R, G, B의 순서. 결과는 다음과 같다.

3.1 유의할 점

from google.colab.patches import cv2_imshow
cv2_imshow(pic_arr)

결과가 이상하게 나오는데, 이는 OpenCV와 matplotlib의 색공간 순서가 다르기 때문.

  • OpenCV 순서는 B G R
  • matplotlib은 R G B 형태를 가지고 있음.
  • cv2.cvtColor(image arrary, 변경할 색공간) 함수를 이용하여 색공간을 변경해주면 정상적으로 시각화가 가능함.
  • 예시 :image = cv2.cvtColor(pic_arr, cv2.COLOR_RGB2BGR)

0개의 댓글