科学技術計算 画像の幾何学的変換(lena)
Python3(3.10)で動くソースコード(.pyファイル .ipynbファイル)あります
「anaconda3」on .py「PyCharm」.ipynb「Jupyter Notebook」
課題 画像の幾何学的変換(lena) 超有名な画像 lena を読み込み, トリミング,シフト,回転,ズーム,マスクなどの変換処理をしなさい. for文や if文を使わないようにしよう.
(2023-11-14)Python3.10で動作確認済み
【オリジナル画像 lena 】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
# -*- coding: utf-8 -*- # 画像の幾何学的変換(lena) import numpy as np from matplotlib import pyplot as plt from scipy import ndimage # モノクロ画像を読み込む lena = plt.imread('lena.png') print(type(lena)) # <class 'numpy.ndarray'> print(lena.shape) # (512, 512) plt.imshow(lena) plt.show() # 疑似カラーになっているのでモノクロに戻す plt.imshow(lena, cmap=plt.cm.gray) plt.show() # トリミング(50px) lena_trim = lena[50:-50,50:-50] plt.imshow(lena_trim, cmap=plt.cm.gray) plt.show() plt.imsave('lena_trim.png', lena_trim, cmap=plt.cm.gray) # シフト(50px) lena_shift = ndimage.shift(lena,(50, 50)) plt.imshow(lena_shift, cmap=plt.cm.gray) plt.show() plt.imsave('lena_shift.png', lena_shift, cmap=plt.cm.gray) # 回転 lena_rotate = ndimage.rotate(lena, 30) plt.imshow(lena_rotate, cmap=plt.cm.gray) plt.show() plt.imsave('lena_rotate.png', lena_rotate, cmap=plt.cm.gray) # ズーム lena_zoom = ndimage.zoom(lena, 2) print(lena_zoom.shape) # (1024, 1024) plt.imshow(lena_zoom, cmap=plt.cm.gray) plt.show() plt.imsave('lena_zoom.png', lena_zoom, cmap=plt.cm.gray) # locket y, x = np.ogrid[0:512,0:512] # x and y indices of pixels print(y.shape, x.shape) # ((512, 1), (1, 512)) centerx, centery = (256, 256) # center of the image mask = ((y - centery)**2 + (x - centerx)**2) > 230**2 # circle lena[mask] = 0 plt.imshow(lena, cmap=plt.cm.gray) plt.show() plt.imsave('lena_locket.png', lena, cmap=plt.cm.gray)