• 지난 시간에는 image가 일종의 number로 생각하는 과정이었다.
https://chan4im.tistory.com/74
이번에는 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: 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
'Deep Learning : Vision System > 영상처리 ~ 최신비전' 카테고리의 다른 글
[Vision System]. Transformation (rotation, scale, transition) (0) | 2023.01.22 |
---|---|
[Vision System]. Scaling & Rotation (0) | 2022.12.29 |
[Vision System]. Interpolation(with vectorization) (0) | 2022.11.30 |
[Vision System]. image blending & image masking (0) | 2022.11.23 |
[Vision System]. 컴퓨터비전의 소개, prev_ pixel과 RGB, HSV (0) | 2022.11.10 |