Etc/Deep Learning

5장 합성곱 신경망Ⅰ(+) - 이미지를 255로 나누는 이유(ELLIPSIS 객체, np.newaxis, 다차원 배열 슬라이싱, 255)

z.zzz 2021. 8. 8. 21:50

1. 이미지 정보를 보여주는 함수 정의

def print_image_summary(image, labels):
       print('--------------')
       print('Image Details:')
       print('--------------')
       print(f'Image dimensions: {image.shape}')
       print('Channels:')

       if len(labels) == 1
           image = image[ ... np.newaxis ] ------ ⓐ
    
       for i, lab in enumerate(labels):
           min_val = np.min(image[:,:,i]) ------ ⓑ
           max_val = np.max(image[:,:,i])
           print(f'{lab} : min={min_val:.4f}, max={max_val:.4f}')    #python f-string formating 

ⓐ image[..., np.newaxis]

① ELLIPSIS 객체

d array([[[ 0, 1, 2],
             [ 2, 3, 4],
             [ 4, 5, 6]],
             [[ 8, 9, 10],
             [10, 11, 12],
             [12, 13, 14]],
             [[16, 17, 18],
             [18, 19, 20],
             [20, 21, 22]]])

>>d[1 , ...]   //첫번째 차원의 두번째 인덱스를 선택
array([[ 8, 9, 10],
        [10, 11, 12],
        [12, 13, 14]])

>> d[... , 1]    //세번째 차원의 두번째 인덱스를 선택
array([[ 1, 3, 5]
        [ 9, 11, 13]
        [17, 19, 21]])

 

② np.newaxis; 차원을 확장하는 numpy 함수

arr1 = np.array([1, 2, 3, 4])

/* 행 부분에 newaxis 추가 : 행의 차원을 확장 */
print(arr1[np.newaxis])
>>[[1 2 3 4]]

/* 열 부분에 newaxis 추가 : 열의 차원을 확장 */
print(arr1[:, np.newaxis])
>> [[1]
      [2]
      [3]
      [4]]

 

ⓑ 다차원 배열 슬라이싱

- 배열의 부분 집합을 하위배열로 조회 및 변경하는 방식

ndarry[start : stop : step ]
  · start : 시작 인덱스(기본값 0)
  · stop : 끝 인덱스(기본값 마지막 index)
  · step : 증감 간격(기본값 1)

 

 

2. 이미지 호출

image_gs = imread('../chap5/data/bird.jpg', as_gray=True)
fig, ax = plt.subplots(figsize=(9, 16)) ----- ⓐ
imshow(image_gs, ax=ax) ----- ⓑ

fig : 그림

    ax : 그림에 그려질 그래프

ⓑ matplotlib.pyplot.imshow(X-image data, axis)

 

 

3. 이미지 정보 표현

print_image_summary(image_gs, ['G'])

Image dimensions: (703, 454) : 행, 열의 픽셀 개수

G : min=0.0000, max=1.0000 :  최솟값과 최댓값이 각각 0과 1

 

 

⇒ 255로 나누는 이유 : 이미지 값의 범위를 0~255에서 0~1 값의 범위를 갖도록 하기 위함

Q. 이미지 값의 범위는 0~255로 고정? 왜 이 값인지?

A. 픽셀 값이 0~255사이이므로


ELLIPSIS 객체 : https://tech.madup.com/python-ellipsis/

배열 슬라이싱 : https://velog.io/@mingki/Numpy-%EC%9D%B8%EB%8D%B1%EC%8B%B1%EA%B3%BC-%EC%8A%AC%EB%9D%BC%EC%9D%B4%EC%8B%B1%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%B0%B0%EC%97%B4%EC%9D%98-%EC%9B%90%EC%86%8C-%EC%A1%B0%ED%9A%8C