이미지 처리 기초

yuns_u·2022년 5월 2일
0

픽셀(Pixel)

이미지 데이터는 픽셀(pixel)이라고 하는 작은 이미지를 직사각형 형태로 모은 것이다.
각 픽셀은 단색의 직사각형으로 전체 이미지의 크기를 표현할 때 흔히 사용하는 가로픽셀수*세로픽셀수의 형식으로 그 수를 셀 수 있다.

컴퓨터에서 이미지 데이터를 저장할 때에는 픽셀의 색을 표현하는 스칼라 값이나 벡터를 2차원 배열로 표현한다.
파이썬에는 NumPy 패키지의 ndarray 클래스 배열로 표현한다.

색공간(Color Space)

픽셀의 색을 숫자로 표현하는 방식을 색공간(color space)라고 한다.
대표적인 색공간으로는 그레이 스케일(gray scale), RGB(Red Green Blue), HSV(Hue-Saturation-Value) 방식이 있다.

Gray Scale

그레이스케일에서는 모든 색이 흑백이기 때문에 각 픽셀은 명도를 나타내는 숫자로 표현된다.
0은 검은색이고 숫자가 커질수록 명도가 높아져 흰색이 되며 보통 0~255의 8비트의 부호없는 정수로 저장된다.

RGB

RGB 색공간에서는 Red, Green, Blue의 세 가지 명도를 뜻하는 숫자 3개가 합쳐진 벡터로 표현된다.
8비트 부호없는 정수를 사용하는 경우 각각 (255,0,0),(0,255,0),(0,0,255)로 나타낼 수 있다.
픽셀 데이터가 그레이스케일과 달리 스칼라가 아닌 벡터이므로 이미지 데이터는 (세로픽셀수가로픽셀수)의 2차원 배열로 표현하지 못하고 (세로픽셀수가로픽셀수*색채널) 형태의 3차원 배열로 저장한다. 세번째 축을 색채널이라고 부른다.

HSV

HSV 색공간에서는 색이 다음 세 가지 값으로 표현된다.

  • Hue(색상) : 가시광선 스펙트럼을 주파수 별로 고리모양으로 배치했을 때의 각도이다.
    0~360도의 범위를 갖고 360도와 0도는 빨강을 가리킨다.
  • Saturatio(채도): 채도값은 특정한 색상의 진한 정도를 나태낸다. 가장 선명한 색상의 상태를 100%이고 0%는 같은 명도의 무채색이 된다.
  • Value(명도) : 명도값 V는 밝은 정도를 나타낸다. 순수한 흰색과 빨간색은 100%이며 검은색은 0%이다.

HSV 색공간으로 표현된 파일은 imshow 명령으로 바로 볼 수 없다.
이외에도 RGB, HSV 색공간에 투명도(transparency)를 표현하는 A(Alpha)채널이 추가된 RGBA, HSVA 등의 색공간도 있다.

이미지 파일 형식

.bmp확장자를 가지는 비트맵(bitmap)파일은 지금까지 설명한 다차원 배열정보를 그대로 담고 있다. 하지만 비트맵파일은 파일 용량이 크기 때문에 압축을 통해 이미지파일의 용량을 줄이는 다양한 확장자(즉 저장방식)이 존재한다. 이 중 대표적인 JPEG, GIF, PNG를 살펴보고자 한다.

  • JPEG : JPEG는 Joint Picture Experts Group의 약자로 이미지 압축 기술자 모임인 JPEG 위원회에서 개발한 이미지 파일 형식이다. JPEG 파일은 웹상 및 멀티미디어 환경에서 가장 널리 사용되고 있는 포맷이다. JPG라는 확장자도 같이 사용된다.

장점
RGB모드와 CMYK모드를 둘 다 지원한다.
RGB 이미지의 모든 컬러 정보를 유지한다.
이미지를 만드는 사람이 이미지의 질과 파일의 크기를 손실압축방식을 통해 조정할 수 있다.

단점
투명 이미지를 지원하지 않는다.
압축율을 높일 수록 이미지의 질이 손상된다.
레이어와 알파채널을 지원하지 않는다.


  • GIF : GIF는 Graphics Interchange Format의 약자로 1987년 미국의 통신업체인 컴퓨서브(Compuserve)에서 개발한 포맷이다.

장점
하나의 파일에 여러 비트맵을 저장하여 다중 프레임 애니메이션을 구현 할 수 있다.
투명 이미지를 지원한다.
애니메이션을 특별한 플러그인 없이 여러 환경에서 쉽게 적용할 수 있다.

단점
8비트 256 컬러로 제한된다.


  • png : PNG는 Potable Network Graphics의 약자이다. GIF 포맷을 대체하기 위해 개발된 파일 포맷이다.

PNG의 장점
비손실 압축방식으로 원본에 손상 없이 파일의 크기를 줄여준다.
이미지의 모든 컬러정보와 알파 채널을 보존하고 있으므로 포토샵에서 활용하기 용이하다.
문자 혹은 날카로운 경계가 있는 이미지인 경우 JPG보다 PNG가 효과적이다.

PNG의 단점
애니메이션을 만들 수 없다.
JPG 와 GIF보다 용량이 크다.

이미지 처리

내가 주로 사용하는 python에서 이미지를 처리하는 패키지는 다양하다.
Pillow, Scikit-Image, OpenCV 등 다양한 라이브러리가 있다.
이 중 OpenCV에 대해 알아보고자 한다.

OpenCV는 Opensource Computer Vision의 약자로 이미지 처리, 컴퓨터 비전을 위한 라이브러리이다. Windows, Linux, MacOS, iOS, Android 등 다양한 플랫폼을 지원한다. 실시간 이미지 프로세싱에 중점을 둔 라이브러리로 많은 영상처리 알고리즘을 구현할 수 있다.

참고자료
https://datascienceschool.net/03%20machine%20learning/03.02.01%20%EC%9D%B4%EB%AF%B8%EC%A7%80%20%EC%B2%98%EB%A6%AC%20%EA%B8%B0%EC%B4%88.html#opencv

profile
💛 공부 블로그 💛

0개의 댓글