pythonの配列の操作の仕方は記事が多数ありますが
画像とかkerasに特化した
作業に対してどう記述すればいいのかをまとめてみました
ええ、自分用メモです
#画像を1枚だけNumpy配列にする(3次元)
(224,224,3)で入力
リサイズの時は**target_size=(224,224)**を変更
jpg,bmpは読込確認済み
裏でPILが動いているらしいのでおそらくpngも平気なはず
※2018.10.23 pngも読み書きOKでした
from keras.preprocessing.image import load_img, img_to_array
img_path = ('./' + ファイル名 + '.jpg')
img_3 = img_to_array(load_img(img_path, target_size=(224,224)))
#3次元のNumpy配列をベクトル化する
3次元(224,224,3)をベクトル(1次元)化(150528)
import numpy as np
img_1 = np.ravel(img_3)
#3次元のNumpy配列を4次元にする
Kerasで使用する、最初にサンプル数のついた4次元配列にする(1,224,224,3)
img_4 = img_3[None, ...]
#4次元のNumpy配列を3次元にする
4次元配列(1,224,224,3)からサンプル数の位置を指定して3次元配列に(224,224,3)
#iはサンプル数の指定、0から始まるので注意
i=0
img_3 = img_4[i,:,:,]
#フォルダ内の画像を全部まとめて4次元のNumpy配列にする【ex.(10,224,224,3)】
import glob
import numpy as np
from keras.preprocessing.image import load_img,img_to_array
#image array size
img_size = (224,224)
#load images Folder
dir_name = 'test1'
#File type
file_type = 'jpg'
#load images and image to array
img_list = glob.glob('./' + dir_name + '/*.' + file_type)
temp_img_array_list = []
for img in img_list:
temp_img = load_img(img,grayscale=False,target_size=(img_size))
temp_img_array = img_to_array(temp_img) /255
temp_img_array_list.append(temp_img_array)
temp_img_array_list = np.array(temp_img_array_list)
細かい話は下記参照
https://qiita.com/tom_eng_ltd/items/286a8012527a3dd3c542
#4次元のNumpy配列を2次元にする
4次元配列【ex.(10,224,224,3)】から2次元配列に【ex.(10,150528)】
SVMへの入力とかに使用できます
#保存先の配列を確保
temp_img_array_list = []
for i in range(10):
#4次元データから3次元データを取り出し
temp_img = img_4[i,:,:,]
#3次元をベクトル(1次元)化
temp_img = np.ravel(temp_img)
#変換したNumpy配列を末尾に追加
temp_img_array_list.append(temp_img)
#Numpy配列をリスト化
img_list = np.array(temp_img_array_list)
#フォルダ内の画像を全部まとめて2次元配列化【ex.(10,150528)】
import glob
import numpy as np
from keras.preprocessing.image import load_img,img_to_array
#image array size
img_size = (224,224)
#load images Folder
dir_name = 'test1'
#File type
file_type = 'jpg'
#load images and image to array
img_list = glob.glob('./' + dir_name + '/*.' + file_type)
temp_img_array_list = []
for img in img_list:
temp_img = load_img(img,grayscale=False,target_size=(img_size))
temp_img_array = img_to_array(temp_img) /255
temp_img_array = np.ravel(temp_img_array)
temp_img_array_list.append(temp_img_array)
temp_img_array_list = np.array(temp_img_array_list)
#Conv2Dの特長量から1ch抜き出す
特長量マップの4次元配列は「layer_output」とする(ex.1,14,14,512)
そこから2次元(14,14)を抽出
#iはチャンネル数で、この場合0-511
img_res = layer_output[0,:,:,i]
#Conv2Dの特長量からマップの行列サイズとチャンネル数を取得する
特長量マップの4次元配列は「layer_output」とする(ex.1,14,14,512)
#G:行 R:列 ch:チャンネル数
G, R, ch = layer_output.shape[1:]
#G = 14
#R = 14
#ch = 512
#4次元の画像配列から一部分を取り出し
cifar10とかのデータセットから必要数だけ取り出したい時とかに
x_train(50000,32,32,3)からx_train(1000,32,32,3)へ
#1000枚目まで
x_train = x_train[:1000]
#49000枚目以降の1000枚
x_train = x_train[49000:]
#1000-2000枚目の1000枚
x_train = x_train[1000:2000]