0413 DeepLearning_CNN_tensorflow1.15

wldnjswldnjs·2022년 5월 11일
0

딥러닝

목록 보기
3/10
post-custom-banner

1. CNN

2. DNN

3. 이미지 좌표계

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt

# 이미지 처리 module
# => 가장 대표적인 module : opencv
# => 쉽게 사용할 수 있는 module : Pillow
img = Image.open('../images/justice.jpg')

# 해당 이미지 파일에 대한 객체
print(type(img)) # <class 'PIL.JpegImagePlugin.JpegImageFile'>

plt.imshow(img)
plt.show()

4. Pillow를 이용한 이미지 처리

1. Cropping (이미지 잘라내기)

crop(좌상,우하)

crop_img = img.crop((30,110,140,330))
plt.imshow(crop_img)
plt.show()

2. Image Resize

print(img.size) # (640, 426)
                # 가로 세로
int(img.size[0] / 8)
    
resize_img = img.resize((int(img.size[0] / 8), int(img.size[1] / 8)))
plt.imshow(resize_img)
plt.show()

# crop(좌상,우하)
crop_img = img.crop((30,110,140,330))
plt.imshow(crop_img)
plt.show()

3. Image Rotate

rotate_img = img.rotate(180)

plt.imshow(rotate_img)
plt.show()

rotate_img.save('../images/rotate_justice.jpg') # 이미지 저장

5. Digital Image 형태

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt

color_img = Image.open('../images/fruits.jpg')

plt.imshow(color_img)
plt.show()

# pixel data 추출

color_pixel = np.array(color_img)
print(color_pixel.shape) # (426, 640, 3)

1. gray-scaled image로 변환

color image의 pixel값을 조절해서 변환
가장 쉬운 방법 : color image의 각 pixel을 구성하고 있는 RGB 값들의 평균값으로 
이미지의 각 pixel의 RGB값을 다시 설정
ex) (0,0) 픽셀의 RGB 값이 [100,200,60] 일 때 RGB 평균 : 120
    (0,0) 픽셀의 값을 [120,120,120]으로 변경하면 흑백처리
gray_pixel = color_pixel.copy()
print(gray_pixel.shape) # (426, 640, 3)

for y in range(gray_pixel.shape[0]):
    for x in range(gray_pixel.shape[1]):
        gray_pixel[y,x] = int(np.mean(gray_pixel[y,x]))
        # scalar = 각 pixel당 값 3개의 평균이므로 1개 (1차원)
        # broadcasting
        
plt.imshow(gray_pixel)
plt.show()

print(gray_pixel.shape) # (426, 640, 3) => 3 channel 흑백

2. 흑백이미지를 2차원으로 표현

gray_2d_pixel = gray_pixel[:,:,0] # 세로, 가로, 0 => 1번째에 있는 r값만 가져옴

print(gray_2d_pixel.shape)        # (426, 640) => 2차원

        
# plt.imshow(gray_2d_pixel, cmap='Greys') # color map
plt.imshow(gray_2d_pixel, cmap='Greys_r')
plt.show()

6. 합성곱 연산

zero padding

padding : 'VALID'(no padding) or "SAVE"

(convolution 결과가 원본 이미지의 크기와 같다)

import numpy as np
import tensorflow as tf

# 입력이미지의 형태
# (이미지 개수, height , weight, channel)
# (1, 3, 3, 1)

image = np.array([[[[9],[8],[7]],
                   [[6],[5],[4]],
                   [[3],[2],[1]]]], dtype=np.float64) # 실수여야 연산 가능
print(image.shape)

# filter의 형태
# filter의 channel수는 이미지의 channel수와 같다
# (filter height, filter width, filter channel, filter 개수)
# (2, 2, 1, 1)
weight = np.array([[[[2]],[[2]]],
                   [[[2]],[[2]]]])
print(weight.shape)

# stride : 1
con2d = tf.nn.conv2d(image,
                     weight,            # image를 weight로 conv한다.
                     strides=[1,1,1,1], # 4차원이므로 stride=1의 값을 4개 줌
                     padding='VALID')   # no padding

# 결과 : (이미지 개수, 이미지 height, 이미지 width, channel)

sess = tf.Session()
result = sess.run(con2d)
print(result) # activation map

post-custom-banner

0개의 댓글