영상을 처리할 때, 영상의 각 pixel intensity에 대해 다양한 통계처리가 필요함.
NumPy는 자체적으로 다양한 통계처리 함수들 (집계함수, 또는 Aggregation Function 이라고 불림) 을 제공함.
참고로, 영상 데이터에서는 pixel (or element)의 값이 NaN인 경우가 거의 없으나
다른 matrix나 tensor 데이터의 경우에는 NaN 인 원소를 가질 수 있음.
이 경우, NaN Safe Aggregation Functions를 사용하여 NaN은 무시하고 값을 구할 수 있음.
[Tensor] NaN Safe Aggregation Functions
NaN (Not a Number) 값을 포함하는 Tensor 인스턴스에서 Aggregation Function을 사용할 때, NaN을 무시 또는 특정값으로 처리하는 기능을 제공하는 함수. NumPy 기존의 aggregaton function의 이름에 nan을 앞에 붙인
ds31x.tistory.com
numpy.sum
: 총합을 구함.
Sum of array elements over a given axis.
numpy.sum(
a,
axis=None,
dtype=None,
out=None,
keepdims=<no value>,
initial=<no value>,
where=<no value>
)
아래의 경우, 이미지의 전체 pixel intensity를 더한 값을 구함..
import numpy as np
a = np.arange(20).reshape(5,-1)
sum = np.sum(a)
print(sum)
이미지의 각 행(row)에서의 합은 다음과 같이 구할 수 있음.
import numpy as np
a = np.arange(20).reshape(5,-1)
row_sum_array = np.sum(a,axis=1)
print(a)
print(row_sum_array.shape)
print(row_sum_array)
결과는 다음과 같음
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]
[16 17 18 19]]
(5,)
[ 6 22 38 54 70]
- 이미지
a
는 $5 \times 4$ 이므로, 각 행별로 합을 구하면 5개의 값이 나옴.(5,)
Ref. : NumPy API
numpy.mean
: 평균 구하기.
Compute the arithmetic mean along the specified axis.
numpy.mean(a, axis=None, dtype=None, out=None, keepdims=<no value>, *, where=<no value>)
아래의 경우, 이미지의 전체에 대한 평균 pixel intensity를 반환함.
import numpy as np
a = np.arange(20).reshape(5,-1)
mean = np.mean(a)
print(mean)
이미지의 각 열(column)에서의 평균은 다음과 같이 구할 수 있음.
import numpy as np
a = np.arange(20).reshape(5,-1)
col_mean_array = np.mean(a,axis=0)
print(a)
print(col_mean_array.shape )
print(col_mean_array )
결과는 다음과 같음
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]
[16 17 18 19]]
(4,)
[ 8. 9. 10. 11.]
- 이미지
a
는 $5 \times 4$ 이므로, 각 열별로 평균을 구하면 4개의 값이 나옴.(4,)
Ref. : NumPy API
numpy.std
: 표준편차 구하기.
Compute the standard deviation along the specified axis.
numpy.std(a, axis=None, dtype=None, out=None, ddof=0, keepdims=<no value>, *, where=<no value>)
아래의 경우, 이미지의 전체에 대한 표준편차를 구함.
import numpy as np
a = np.arange(20).reshape(5,-1)
std = np.std(a)
print(std)
이미지의 각 열(column)에서의 표준편차는 다음과 같이 구할 수 있음.
import numpy as np
a = np.arange(20).reshape(5,-1)
col_std_array = np.std(a,axis=0)
print(a)
print(col_std_array.shape )
print(col_std_array )
결과는 다음과 같음
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]
[16 17 18 19]]
(4,)
[5.65685425 5.65685425 5.65685425 5.65685425]
- 이미지
a
는 $5 \times 4$ 이므로, 각 열별로 표준편차를 구하면 4개의 값이 나옴.(4,)
Ref. : NumPy API
기타 중요한 함수들
numpy.max
: 특정 축을 따라 최대값을 구함.numpy.min
: 특정 축을 따라 최소값을 구함.numpy.median
: 특정 축을 따라 median을 구함.
같이 읽어보면 좋은 자료들
tensor 와 관련된 NumPy, PyTorch, Tensorflow에서의 다양한 vectorized operatoni을 소개.
[Tensor] vectorized op. (or universal func)
Numpy에서 제공하는 ufunc. (Universal Functions)은 homogeneous and contiguous tensor 에서 모든 elements에 같은 연산을 적용하여 기존의 반복 loop에 기반한 연산에 비해 압도적인 속도를 보이면서 간편한 연산자
ds31x.tistory.com
'Programming > DIP' 카테고리의 다른 글
PIL과 opencv에서의 image 변환. (1) | 2021.11.22 |
---|---|
Conda backup for DIP 2021 (0) | 2021.09.18 |
NumPy 검색 (0) | 2021.09.11 |
NumPy 배열 나누기: 영상 자르기 (0) | 2021.09.11 |
NumPy 배열 병합 : 영상 붙이기 (0) | 2021.09.11 |