딥 러닝과 물리학으로 Python을 공부하는 ① (이미지 처리)

1. 소개



numpy를 사용하여 이미지를 처리합니다.

2.목차



1. 소개
2.목차
3. 어떤 사고 실험
4. 코드
5. 정리
참고

2. 어떤 사고 실험



이 책에는 몇 가지 사고 실험이 있습니다. 그 내용은 요정이 눈앞의 버튼을 1분마다 누르거나 누르지 않는 것을 선택하는 것을 반복해 5일간, 철야로 작업시켜 그 결과를 행렬로 표현하면 사람의 얼굴이 되어 있다고 하는 것 이다. 이 요정은 물리학에서 말하는 맥스웰의 악마이다.



이 노동은 노동 기준법을 분명히 위반했다.

제32조
사용자는 노동자에게 휴식시간을 제외하고 일주일에 대해 40시간을 넘어 노동시켜서는 안 된다.
사용자는 일주일의 각 날에 대해서는 근로자에게 휴식시간을 제외하고 하루에 대해 8시간을 넘어 노동시켜서는 안 된다.

그러나 요정에 노동 기준법이 적용되는지 불분명하기 때문에 신경 쓰지 않는다. 이번에 요정이 만든 이미지는 lenna 이미지라고 불리는 샘플 데이터이다. 이번에는 이 사이트의 것을 사용했다. 이것을 사용하여 이미지 처리를 수행합니다.

4. 코드



Pillow (PIL)와 numpy를 사용하여 이미지를 numpy 배열로 만듭니다.
from PIL import Image
import numpy as np


# PILでcat.jpgを開いてグレースケール画像に変換し、NumPy配列に変換
im = np.array(Image.open("画像のパス名").convert('L'))

# NumPy配列のshapeと、要素のデータ型を表示
print(im.shape, im.dtype)

# グレースケール化した画像のNumPy配列に変換したものを表示
print(im)

# 上記NumPy配列をテキストで保存
np.savetxt('im_lenna.txt', im)
(150, 150) uint8
[[164 163 161 ... 132 154 164]
 [160 160 159 ... 136 146 141]
 [157 157 156 ... 105  80  61]
 ...
 [ 54  55  54 ...  53  58  64]
 [ 51  49  50 ...  59  72  83]
 [ 49  48  52 ...  71  89 100]]

150×150=22500이므로
im2 = im.reshape([1, 22500])#一次元配列に変更
np.savetxt('im_lenna.txt', im2)# 上記NumPy配列をテキストで保存
lenna = np.loadtxt('im_lenna.txt')# 上記で保存したNumPy配列を読み出す
print(lenna)
[164. 163. 161. ...  71.  89. 100.]

이것을 이미지로 출력합니다.
import matplotlib.pyplot as plt
%matplotlib inline
plt.imshow(lenna.reshape(150,150), cmap=plt.cm.gray_r)



또한이를 비교하기 위해 무작위로 숫자를 곱한 이미지를 출력합니다.

첫째,이 이미지는
print(lenna)
print(lenna.shape)
print(max(lenna))
[164. 163. 161. ...  71.  89. 100.]
(22500,)
236.0

를 사용하여 무작위로 값을 할당합니다.

import random

random_lenna = [random.randint(0, 236) for i in range(len(lenna))]
random_lenna_n = np.array(random_lenna, dtype=float)

print(random_lenna_n)
[117.  92.   1. ...  88.  12.  55.]

이것을 이미지로 출력합니다.
plt.imshow(random_lenna_n.reshape(150,150), cmap=plt.cm.gray_r)



5. 정리



책 중에서는 요정이 버튼을 누르거나 누르지 않는 두 가지 값이었지만, 이번 코드는 0에서 236까지의 값을 넣는 작업을 한 것에 대응한다. 요정이 적당히 숫자를 선택해 가면 2장째의 이미지와 같은 전형적인 상태가 될 것이다. 지적, 코멘트 등을 주시면 다행입니다.

참고

딥 러닝과 물리학 원리를 아는 응용이 가능

좋은 웹페이지 즐겨찾기