You are on page 1of 51

교수

영상 내의 한점의 데이터 크기에 대해 생각해봅시다.

예) float32, int, byte 중에서 여러분이라면


어떤 데이터 타입을 선택하시겠습니까?


1
2
3
1
2
3

(이미지 확대 시 주의 필요)

(카메라 취득 영상 등)

Format:
2

5 3
1

(확대해도 열화가 되지 않음) Format:


가로×세로
=(32×32)
[[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 13 73 0 0 1 4 0 0 0 0 1 1 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 3 0 36 136 127 62 54 0 0 0 1 3 4 0 0 3]
[ 0 0 0 0 0 0 0 0 0 0 0 0 6 0 102 204 176 134 144 123 23 0 0 0 0 12 10 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 155 236 207 178 107 156 161 109 64 23 77 130 72 15]
[ 0 0 0 0 0 0 0 0 0 0 0 1 0 69 207 223 218 216 216 163 127 121 122 146 141 88 172 66]
[ 0 0 0 0 0 0 0 0 0 1 1 1 0 200 232 232 233 229 223 223 215 213 164 127 123 196 229 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 183 225 216 223 228 235 227 224 222 224 221 223 245 173 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 193 228 218 213 198 180 212 210 211 213 223 220 243 202 0]
[ 0 0 0 0 0 0 0 0 0 1 3 0 12 219 220 212 218 192 169 227 208 218 224 212 226 197 209 52]
[ 0 0 0 0 0 0 0 0 0 0 6 0 99 244 222 220 218 203 198 221 215 213 222 220 245 119 167 56]
[ 0 0 0 0 0 0 0 0 0 4 0 0 55 236 228 230 228 240 232 213 218 223 234 217 217 209 92 0]
[ 0 0 1 4 6 7 2 0 0 0 0 0 237 226 217 223 222 219 222 221 216 223 229 215 218 255 77 0]
[ 0 3 0 0 0 0 0 0 0 62 145 204 228 207 213 221 218 208 211 218 224 223 219 215 224 244 159 0]
[ 0 0 0 0 18 44 82 107 189 228 220 222 217 226 200 205 211 230 224 234 176 188 250 248 233 238 215 0]
[ 0 57 187 208 224 221 224 208 204 214 208 209 200 159 245 193 206 223 255 255 221 234 221 211 220 232 246 0]
[ 3 202 228 224 221 211 211 214 205 205 205 220 240 80 150 255 229 221 188 154 191 210 204 209 222 228 225 0]
[ 98 233 198 210 222 229 229 234 249 220 194 215 217 241 65 73 106 117 168 219 221 215 217 223 223 224 229 29]
[ 75 204 212 204 193 205 211 225 216 185 197 206 198 213 240 195 227 245 239 223 218 212 209 222 220 221 230 67]
[ 48 203 183 194 213 197 185 190 194 192 202 214 219 221 220 236 225 216 199 206 186 181 177 172 181 205 206 115]
[ 0 122 219 193 179 171 183 196 204 210 213 207 211 210 200 196 194 191 195 191 198 192 176 156 167 177 210 92]
[ 0 0 74 189 212 191 175 172 175 181 185 188 189 188 193 198 204 209 210 210 211 188 188 194 192 216 170 0]
[ 2 0 0 0 66 200 222 237 239 242 246 243 244 221 220 193 191 179 182 182 181 176 166 168 99 58 0 0]
[ 0 0 0 0 0 0 0 40 61 44 72 41 35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]
image = np.array(
[ [ 255, 0, 255],
[ 120, 200, 100],
[ 200, 128, 50] ]
)
print(image.shape) # 이미지 shape 확인 (row, column)
print(image[1][2]) # 이미지 값 확인 row = 1, col = 2

(3, 3)
100
image = np.array(
[ [ [255,255,255], [ 0, 0, 0], [128,128,128]], # white, black, gray
[ [255, 0, 0], [ 0,255, 0], [ 0, 0,255]], # r, g, b
[ [255,255, 0], [255, 0,255], [ 0,255,255] ] ] # yellow, magenta, cyan
)
print(image.shape) # 이미지 shape 확인 (row, column)
print(image[1][2]) # 이미지 값 확인 row = 1, col = 2
print(image[1][2][2]) # 이미지 값 확인 (blue channel)

(3, 3, 3)
[ 0 0 255]
255
# pillow
from PIL import Image
img = Image.open(img_path) # use Image.open(image_location)
image = np.array(img.convert('RGB')) # to convert img object to array value use np.array

# opencv
import cv2
image = cv2.imread(img_path)
# convert opencv RGB for opencv
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# matplotlib
from matplotlib import image as mp_image
img = mp_image.imread(image_path)
from tensorflow import keras
import matplotlib.pyplot as plt

fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
plt.imshow(train_images[0], cmap=plt.cm.binary)

MNIST 데이터셋이란?
# PIL
from PIL import Image
import numpy as np
PIL_image = Image.fromarray(np.uint8(image)).convert('RGB')
PIL_image.save(image_path)

# opencv
import cv2
# convert opencv RGB for opencv
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
cv2.imwrite(image_path, image)

# matplotlib
from matplotlib import pyplot as plt
img = plt.imsave(image_path, image)
𝑦1 𝑤11 𝑤12 ⋯ 𝑤1𝑛 𝑥1
𝑦2 𝑤21 𝑤22 ⋯ 𝑤2𝑛 𝑥2
⋮ = ⋮ ⋮ ⋱ ⋮ ⋮
𝑦𝑚 𝑤𝑚1 𝑤𝑚2 ⋯ 𝑤𝑚𝑛 𝑥𝑛
𝒚 = 𝒘𝒙
𝑦1 = 𝑤11 𝑥1 + 𝑤12 𝑥2 + ⋯ + 𝑤1𝑛 𝑥𝑛
𝑦2 = 𝑤21 𝑥1 + 𝑤22 𝑥2 + ⋯ + 𝑤2𝑛 𝑥𝑛

𝑦𝑚 = 𝑤𝑚1 𝑥1 + 𝑤𝑚2 𝑥2 + ⋯ + 𝑤𝑚𝑛 𝑥𝑛
𝒚 = 𝒘𝒙

𝑚 = (𝑚, 𝑛) ∙ (𝑛) 𝑚, 𝑙 = (𝑚, 𝑛) ∙ (𝑛, 𝑙)


import numpy as np
w = np.array([ [ 2, 1 ],
[ 0, 1 ] ])
x = np.array([ 3, 4 ])
y = np.dot(w,x)
print(y)

[10 4]
𝑥2 𝑥2′

𝑥1 𝑥1′
2 0
1 0 0 2
0 1

0.5 0 2 0
0 0.5 0 1
cos 𝜃 −sin 𝜃
sin 𝜃 cos 𝜃
1 0.5
0 1
𝝅
𝜽 = = 30
𝟔
−1 0
0 1
𝑨𝒇𝒍𝒊𝒑 ∙ 𝑨𝒓𝒐𝒕𝒂𝒕𝒊𝒐𝒏
𝑝3 𝑝3′

𝑣 = 𝑝3 − 𝑝1 𝑣 ′ = 𝑝2′ − 𝑝1′

𝑢′ = 𝑝2′ − 𝑝1′
𝑢 = 𝑝2 − 𝑝1
𝑝2′
𝑝1 𝑝2 𝑝1′

𝑤
𝑏 = 𝑝1′ − 𝑝1
𝑢′ = 𝑤𝑢
𝑣 ′ = 𝑤𝑣
𝑤
# 점3개를 변환 전과 변환 후로 나누어 지정
pts1 = np.float32([[200,100],[400,100],[200,200]])
pts2 = np.float32([[200,300],[400,200],[200,400]])

# Affine 변환 텐서 얻기
M = cv2.getAffineTransform(pts1, pts2)

# Affine 변환하기
dst = cv2.warpAffine(img, M, (cols,rows))
# 사이즈 변환
img = cv2.resize(img, dsize=(100,100), interpolation=cv2.INTER_AREA)

# 회전 변환
M = cv2.getRotationMatrix2D(center, angle, scale)
입력 이미지의 사이즈
입력 이미지의 픽셀값의 범위
blur filter (or kernel)
𝟏
[ 1, 1, 1 ]
𝟑

f(t) = [ 0, 0, 0, 1, 1, 1, 0, 0, 0 ]
conv(t) = [ 0, 1/3, 2/3, 1, 2/3, 1/3, 0 ]
f(t) f(t+1) f(t+2) f(t)+f(t+1)+f(t+2)
conv(t) = + + =
3 3 3 3

이 필터는 인접한 점3개의 평균값을 출력


kernel = np.array(
[ [ 1, 1, 1 ],
[ 1, 1, 1 ] ])
[ 1, 1, 1 ] ])/9
diff filter (or kernel)
[ -1, 0, 1 ]
f(t) = [ 0, 0, 0, 1, 1, 1, 0, 0, 0 ]
f(t) = [ 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0 ]
conv(t) = [ 0, 0, 1, 1, 0, -1, -1, 0, 0 ] ()
conv(t) = -f(t-1) + f(t+1)
diff convolution은
미분 값의 두 배가 됨
1972 playboy잡지에서 스캔
영상처리 분야에서 광범위하게 사용되었음
잡지사에서 저작권을 주장하려 시도하였으나,
사회현상이라는 이유로 포기하기로 결정
Who is she?
현재까지 영상처리분야에서 가장 많이 인용된
이미지로 각종 논문, 서적, 블로그 등에 등장
1988년 결혼해서 3명의 아이와 살고있던 Lenna는
스웨덴 기자로부터의 인터뷰를 통해
이 사진의 유행을 처음 듣게됨
1996년 영상학회 50주년 기념식 참가
2015년 ICIP에 초청
잡지의 성격으로 인한 비판이 있음
최근에 대체 가능한 이미지가 많으므로
대용을 권장
𝒀 𝟎 𝟐𝟗𝟗𝑹 𝟎 𝟓𝟖𝟕𝑮 𝟎 𝟏𝟏𝟒𝑩
영상처리 실습
컨볼루션 커널 적용해보기

다음의 컨볼루션 커널을 적용하여 이미지를 변환해 봅시다.

실제로 적용하기 전에 어떤 필터인지를 추측해 봅시다.


프로그램을 통해 적용 후에 추정이 맞았는지 확인해 봅시다.

서체 출처 : 에스코어드림체-㈜에스코어, 나눔글꼴체-㈜네이버, 배달의민족체-우아한형제들


이 강의록은 저작권법에 의해 보호받는 저작물로서 저작권자의 허락 없이 저작재산권 일체
(복제권, 배포권, 대여권, 공연권, 공중전송권, 전시권, 2차적 저작물 작성권)를 침해 시
저작권법에 의거 처벌받을 수 있습니다.

계동캠퍼스(03051)서울특별시 종로구 북촌로 106 안암캠퍼스(02841)서울특별시 성북구 안암로 145 고려대학교 안암캠퍼스내
www.cuk.edu T.02-6361-2000 F.02-6361-1800

You might also like