Fundamental 12 - 파이썬으로 이미지 파일 다루기
♣ 12.7은 실습 기반이므로 AI-REMEMBER에서는 생략합니다.
★ 성취 목표 ★
1. 컴퓨터에서 이미지가 표현되는 방식을 이해할 수 있다.
2. Pillow와 OpenCV를 활용 (이미지 파일 열기 + 정보 추출)
3. CIFAR-100 환경에서 히스토그램을 기반으로 유사 이미지를 찾아낼 수 있다. (12.7 내용)
12.2 디지털 이미지
- 디지털 화면은 수많은 점들의 집합이며 색상을 가지는 점 하나를 화소(pixel) 라고 한다.
- 각각의 화소는 RGB라 하여 각각의 단일 색 강도를 조절하여 다양한 색상을 표현한다.
- 화소의 색이 RGB 3개인 이유 : 망막에 있는 시세포가 대부분 이들 3가지로 이루어져 있다.
참고자료
- Raster 또는 Bitmap 방식의 이미지는 보통 색상별로 점당 8비트를 사용하고 0~255 사이의 값으로 색의 감도를 표시한다.
- Vector 방식의 이미지는 상대적인 점이나 선의 위치를 방정식으로 기록해 두었다가 디지털 화면의 각 화소에 어떻게 표현할지를 확대나 축소를 통해 다시 계산하므로 깨짐 현상이 없다.
- (참고) YUV 방식 : grayscale 흑백 TV에서 컬러 TV로 넘어가는 시점에, 기존 흑백 채널에다 25% 수준의 해상도를 가진 두 색상 채널을 덧입혀 송출하는 방식
- 컬러 스페이스 : 색 공간, 색을 표현하는 다양한 방식
- 채널 : 컬러 스페이스를 구성하는 축(R, G, B..)
12.3 Pillow 사용법
- Pillow : Numpy와 결합하여 간단한 이미지 작업을 간편하게 하는 도구
- 이미지는 Array 형태의 데이터이다.
- 가로 세로 각 n 픽셀에 RGB 색상 채널이 있다면 Numpy로 [n, n, 3] 차원의 배열을 생성할 수 있다.
- uint8 데이터 타입 : 부호가 없는(unsigned) 8비트 정수 즉, 0부터 255 사이의 값을 나타낸다.
- np.zeros() : 모든 픽셀의 모든 채널의 값을 0으로 초기화시킨다. 이는 검은색을 나타낸다.
12.4 Pillow를 활용한 데이터 전처리
- np.reshape() 에 order라는 인자를 'F' 라고 주면 원하는 형태로 reshape할 수 있다.
- np.swapaxes(0, 1) : 이미지의 축을 바꾸는 메서드
12.5 OpenCV - 안녕, OpenCV
- OpenCV는 오픈소스로 제공되는 컴퓨터 비전용 라이브러리이다.
- Python뿐만 아니라 C++, Java, MATLAB 등의 다양한 프로그래밍 언어에서 호출하여 사용할 수 있다.
- 영상 처리에 관한 고급 기능들을 사용하기 용이하도록 구현되어 있다.
- 결국 이미지는 [너비, 높이, 채널] 형태를 가지는 배열(Array)이자 숫자 행렬이고 컴퓨터 비전(Computer Vision)이란 배열 형태의 데이터를 처리하는 것이 주요 골자가 된다.
- OpenCV에서는 RGB가 아닌 BGR 방식을 사용한다.
12.6 (12.5)에 대한 코드리뷰
- OpenCV의 imread() : 지정된 파일에서 이미지를 로드하고 반환하는 메서드
- 가로 300, 세로 300 픽셀짜리 이미지에 대하여 frame과 hsv는 각각 픽셀 당 BGR, HSV 세 개의 색상 채널별 값에 대응하여 300 × 300 × 3의 크기를 갖는 배열이 되고, mask는 픽셀마다 1 또는 0만을 값으로 가졌기에 300 × 300 × 1의 크기를 갖는다. 여기서 0과 1은 흰색과 검정색을 나타내며, 이들을 묶어 1개의 채널로 간주되어 2가 아닌 1이 곱해지는 것이다. 참고링크
TF Master - 밑바닥부터 시작하는 딥러닝 (퍼셉트론)
- 퍼셉트론은 신경망(딥러닝)의 기원이 되는 입출력을 갖춘 알고리즘이다.
- 퍼셉트론은 다수의 신호를 입력받아 정해진 규칙에 의해 하나의 신호를 출력한다.
- 신호가 흐르는 경우 1, 그 반대의 경우는 0으로 간주한다.
- 전류에서의 가중치는 저항에 해당하여 이 값이 작을수록 전류는 크게 흐른다.
- 퍼셉트론에서의 가중치는 값이 클수록 신호는 크게 흐른다. 전류와 작용 방향이 반대이다.
- 퍼셉트론에서는 가중치와 편향을 주요 매개변수로 한다.
- 단층 퍼셉트론으로 AND, NAND, OR 논리 회로를 표현할 수 있다. 좌표상에 (x,y)에 대응하는 점을 찍고 직선을 그어 보면 쉽게 파악할 수 있다.
- XOR 게이트는 2층 퍼셉트론 구조를 활용하면 표현할 수 있다.
- 다층 퍼셉트론이 되면 비선형 영역도 표현할 수 있다.
- 다층 퍼셉트론은 이론상 컴퓨터를 표현할 수 있다.