• 지난 시간에는 image가 일종의 number로 생각하는 과정이었다.

https://chan4im.tistory.com/74

 

[Computer Vision].prev_ pixel과 RGB, HSV

※ Computer Vision • Computer Vision -> 자연어 처리 -> 오디오 부분 순으로 발전하였기에 가장 발전된 분야 • 시각적 세계를 해석하고 이해하도록 컴퓨터에 학습시키는 인공지능 분야로 컴퓨터를 이

chan4im.tistory.com

이번에는 image가 하나의 array라고 생각한다면 할 수 있는 방법들에 대해 배워볼 것이다.

 

 

※ image crop

• image는 일종의 "array"이므로 이런 image를 배열단위를 자르는 방식을 통해 자를 수 있다.

• 그렇다면 배열을 자르기 위해 어떤 방식을 사용할 수 있을까?

바로 slicing을 이용해 image 배열을 자를 수 있다.

구현방식: a = [1,2,3,4]  -->  a = [1, 4]로 만들려면?   =>   a[1:3]   (by. slicing) 

 

[실습] - crop

<import 부분>

 

 

 

 

 

 

 

 

※ image padding

원본 image의 바깥부분에 덧대는 방식으로 4가지 padding 기법을 소개한다.

zero-padding : 원본 image의 주위 값을 0으로 배치

mean-padding : 원본 image의 주위 값을 평균값으로 배치 (단, RGB는 R따로, G따로, B따로 평균)

reflect-padding : 데칼코마니 하듯이 뒤집어서 가져옴

symmetric-padding : 대칭되듯이 가져옴

1. zero-padding&nbsp; &nbsp;2. reflect-padding&nbsp; &nbsp; 3. symmetric-padding

 

구현방식 1: frame을 그대로 두고 이어 붙일 것을 concat 시킨다.

장점: memory 절약가능 (학습 시 많이 사용)

단점: 느리다.

 

구현방식 2: 새로 비어있는 큰 배열을 만들어 가운데 부분에 frame을 대입시킨다.

장점: 빠르다. (inference(추론), 즉 학습이 끝난 후 결과를 낼 때 많이 사용)

단점: memory가 비교적 많이 필요하다.

 

 

 

※ 배열의 축, axis이해하기.

배열에는 축이라는 개념이 있는데, 이 축이 헷갈리는 이유는 행렬개념과는 조금 다르게 받아들여야 하기 때문이다.

1차원 배열
먼저 1차원 배열의 경우, 축은 axis 0 하나뿐이다. (행열의 개념이 없음)
array([0, 1, 2, 3, 4 ,5])


2차원 배열
다음으로 2차원 배열의 경우, 축은 axis 0, axis 1 두 가지가 있다.
array([[0, 1, 2],
          [3, 4 ,5]])
위의 경우, 우리는 2행 3열로 배열을 해석하는데 행과 열에 대한 축의 매칭은 아래와 같다.
행: axis 0        열: axis 1
이때, 무작정 axis0을 행이라 외우는 것은 주의해야 한다. 고차원으로 갈수록 규칙이 깨지기 때문이다.


3차원 배열
다음으로 3차원 배열의 경우, 축은 axis 0, axis 1, axis 2  세 가지가 있다.
array([[[ 0, 1, 2, 3],
           [ 4 ,5, 6, 7],
           [ 8, 9, 10, 11]],

          [[12, 13, 14, 15],
           [16, 17, 18, 19],
           [20, 21, 22, 23]]]
)

위의 경우,  3행 4열의 행렬이 2층으로 배열을 해석하는데 행과 열, 높이에 대한 축의 매칭은 아래와 같다.
높이: axis 0        행: axis 1       열: axis 2
import numpy as np

arr1 = np.array([ [1, 2, 3], [10, 20, 30] ])
arr2 = np.array([ [4, 5, 6], [40, 50, 60] ])

np.concatenate((arr1, arr2), axis = 0)
array([[ 1,  2,  3],
       [10, 20, 30],
       [ 4,  5,  6],
       [40, 50, 60]])

np.concatenate((arr1, arr2), axis = 1)
array([[ 1,  2,  3,  4,  5,  6],
       [10, 20, 30, 40, 50, 60]])

 

 

 

 

 

[실습] - padding

 

 

 

 

 

 

※ translation

crop과 padding을 이용하여 사진을 옮길 수 있음 (정석적 방법은 아님)

• image를 100 pixel만큼 왼쪽으로 옮기고 싶다면?

-  frame을 slicing을 이용한 crop으로 자름 => [:, 100:]

- 그 후 padding

 

[실습] - translation

+ Recent posts