이미지 데이터를 표현하는 방식과 이미지 데이터를 처리하기 위한 파이썬 패키지 Pillow, Scikit-Image, OpenCV 패키지에 대해 알아본다.

 

픽셀

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

 

이미지 데이터를 저장할 때는 픽셀의 색을 표현하는 스칼라 값이나 벡터를 2차원 배열로 표현한다.

-> 파이썬에서는 NumPy의 ndarray 클래스 배열로 표현한다.

 

 

색공간

픽셀의 색을 숫자로 표현하는 방식을 색공간(color space)이라고 한다. 

대표적인 색공간 : 그레이스케일(gray scale), RGB(Red-Green-Blue), HSV(Hue-Saturation-Value)

 

그레이스케일

- 그레이스케일에서는 모든 색이 흑백.

- 각 픽셀은 명도를 나타내는 숫자로 표현된다.

- 0은 검은색을 나타내고 숫자가 커질수록 명도가 증가하여 하얀색이 된다.

- 숫자는 보통 0~255의 8비트 부호없는 정수로 저장된다.

 

SciPy 패키지의 misc 서브 패키지의 face 명령은 이미지 처리용 샘플 이미지를 제공한다.

인수로 gray=True를 입력하면 그레이스케일 이미지를 반환한다. 이미지의 크기는 배열의 shape 속성으로 볼 수 있다.

 

이 이미지 데이터는 768x1024 크기의 unit8 자료형 2차원 배열이다. 좌측 상단의 225개(15x15) 픽셀의 데이터를 보기 위해 아래와 같은 코드를 실행한다.

 

RGB

RGB 색공간에서 색은 적(Red), 녹(Green), 청(Blue)의 3가지 색의 명도를 뜻하는 숫자 3개가 합쳐진 벡터로 표현됨

8비트 부호없는 정수를 사용하는 경우 (255,0,0)은 빨간색, (0,255,0)은 녹색, (0.0.255)는 파란색

 

픽셀 데이터가 스칼라가 아닌 벡터이므로 이미지 데이터를 (세로픽셀수 x 가로픽셀수) 형태의 2차원 배열로 표현하지 못하고 (세로픽셀수 x 가로픽셀수 x 색채널) 형태의 3차원 배열로 저장 (세 번째 축을 색채널(channel)이라고 부름)

 

 

이미지 파일 형식

.bmp 확장자를 가지는 비트맵(bitmap) 파일은 지금까지 설명한 다차원 배열정보를 그대로 담고 있다.

하지만 비트맵 파일은 파일 용량이 크기 때문에 압축을 통해 용량을 줄인 JPG, GIF, PNG 등의 압축 파일 형식을 많이 사용한다.

 

- JPEG : Joint Picture Experts Group의 약자. 웹상 및 멀티미디어 환경에서 가장 널리 사용되고 있는 포맷. 

JPG라는 확장자도 같이 사용됨

 

- GIF : Graphics Interchange Format. 하나의 파일에 여러 비트맵을 저장하여 다중 프레임 애니메이션 구현

 

- PNG : Portable Network Graphics. GIF 포맷을 대체하기 위해 개발된 파일 포맷

문자 혹은 날카로운 경계가 있는 이미지인 경우 JPG보다 PNG가 효과적

 

 

Pillow를 이용한 이미지 처리

- Pillow는 이전에 사용되던 PIL(Python Imaging Library)패키지를 대체하기 위한 것.

- JPEG, BPM, GIF, PNG, PPM, TIFF 등의 다양한 포맷을 지원하고 초보자가 다루기 쉬움

- PIL 패키지의 대체이므로 임포트의 이름이 PIL 패키지와 같다는 점 주의

 

이미지 읽고 쓰기

 

Scikit-Image 

이 패키지도 이미지 처리에 많이 사용됨

 

OpenCV

- OpenCV(Open Source Computer Vision)은 이미지 처리, 컴퓨터 비전을 위한 라이브러리

- Windows, Linux, Mac OS, iOS, Android 등 다양한 플랫폼을 지원

- 실시간 이미지 프로세싱에 중점을 둔 라이브러리

 

- 2,500개가 넘는 알고리즘으로 구성되어 있음

 1. 영상 처리, 컴퓨터 비전, 기계 합습과 관려된 전통적인 알고리즘

 2. 얼굴 검출과 인식, 객체 인식, 객체 3D 모델 추출, 스테레오 카메라에서 3D 좌표 생성

 3. 고해상도 영상 생성을 위한 이미지 스티칭, 영상 검색, 적목 현상 제거, 안구 운동추적

 

 

 

 

참고 사이트

https://datascienceschool.net/03%20machine%20learning/03.02.02%20%EC%9D%B4%EB%AF%B8%EC%A7%80%20%ED%95%84%ED%84%B0%EB%A7%81.html

 

https://opencv-python.readthedocs.io/en/latest/doc/11.imageSmoothing/imageSmoothing.html

'Project > Image Handling' 카테고리의 다른 글

이미지 블러링  (0) 2021.06.03
이미지 필터링  (2) 2021.06.03
이미지 임계처리  (0) 2021.06.02

+ Recent posts