주요 개념
- 데이터 증대(Data Augmentation)
- Salt Pepper 노이즈
이미지 분류 수행을 위한 딥러닝 모델을 만들 때 항상 학습시킬 데이터가 부족하다. 라벨링도 굉장히 귀찮다. 따라서 데이터 증대(Data Augmentation) 작업을 통해 데이터 양을 늘려주는 것이 중요하다. 마구잡이로 오목렌즈, 볼록렌즈 효과 등을 사용해 데이터를 왜곡하기보단 지금 소개할 Salt Pepper 노이즈를 추가하거나 블러링(Blurring), 반전(Flip)과 화질 저하와 같은 여러 방법을 통해 데이터 증대를 수행할 수 있다. 물론 데이터 특성(feature)에 맞는 방식을 채택해야 한다.
만약 OCR을 수행해야하는데 5를 상하 반전하여 된 데이터셋을 사용하면 2와 혼동될 수 있어 원하지 않는 결과가 나올 수 있기 때문이다. 물론 잘 학습하면 이 또한 좋은 데이터가 될 수 있다. 항상 증대 작업 이전에 의도에 대해 명확히 하는 것이 좋다.
가장 기본적인 노이즈 추가 방법인 Salt-Pepper는 마치 소금 또는 후추를 뿌려놓은 것 같은 느낌의 노이즈이다. 만드는 순서는 아래와 같다.
1. Salt-Pepper Noise 넣을 픽셀 랜덤 선택
2. Noise 의 형태가 소금 또는 후추인지 랜덤하게 선택(색깔을 랜덤하게 정한다는 의미)
3. 선택된 픽셀에 Noise 삽입
4. 완성
아래는 python 소스 코드이다.
import cv2
import copy
from random import randint
def SaltPepper(img):
# Getting the dimensions of the image
if img.ndim > 2: # color
height, width, _ = img.shape
else: # gray scale
height, width = img.shape
result = copy.deepcopy(img)
# Randomly pick some pixels in the image
# Pick a random number between height*width/80 and height*width/10
number_of_pixels = randint(int(height * width / 100), int(height * width / 10))
for i in range(number_of_pixels):
# Pick a random y coordinate
y_coord = randint(0, height - 1)
# Pick a random x coordinate
x_coord = randint(0, width - 1)
if result.ndim > 2:
result[y_coord][x_coord] = [randint(0, 255), randint(0, 255), randint(0, 255)]
else:
# Color that pixel to white
result[y_coord][x_coord] = 255
# Randomly pick some pixels in image
# Pick a random number between height*width/80 and height*width/10
for i in range(number_of_pixels):
# Pick a random y coordinate
y_coord = randint(0, height - 1)
# Pick a random x coordinate
x_coord = randint(0, width - 1)
if result.ndim > 2:
result[y_coord][x_coord] = [randint(0, 255), randint(0, 255), randint(0, 255)]
else:
# Color that pixel to white
result[y_coord][x_coord] = 0
return result
img = cv2.imread('brokenEgg.jpg')
result = SaltPepper(img)
cv2.imshow('original', img)
cv2.imshow('result', result)
cv2.waitKey(0)
소금 후추간을 한 계란이 되었다.
소스 코드
https://github.com/sehoon787/Personal_myBlog/blob/main/Data%20Science/CV/SaltPepper.py