下記のページのコードをお試して実行してみています。
参考にしたページ
とりわけ、下記コードのわからないポイントの1)コメントアウトの文章の意味と2)cropしてbrightにx,yでfor文で回して配列を作っている箇所がわかりません。
この2点について、何かお気づきの点や、どう理解したらいいのか、この辺の情報をみてみるといいなど、ありましたらご回答頂けると助かります。
1)コメントアウトの文章の意味
- 1画素ずつといっていますが、例えば、xが1のときcrop(8,8,16,16)のピクセルがはいるはずです。1画素ずつではないと思っています。
- 1画素に縮小される範囲の明るさ、というのは、まず、1画素に縮小される範囲を指定する必要があると思いますが、コメントアウト直下のコードがそうなっている気がしていません。
- なぜ、二乗平均をとると白黒反転したことになるのか。
2)cropしてbrightにx,yでfor文で回して配列を作っている箇所
- 下記のようにcropしたあとにresizeの方がわかりやすそう。
python
1image = img.crop((left, upper, right, lower)).resize((64, 64))
- 下記の計算がなぜ、明るさの白黒反転になるのかが理解できていない。
255 - crop.mean()**2 / 255
- 最後に多次元配列をnp.r_を利用して一次元配列にしているのか。おそらく、scikit learnにインプットするだろうが、アウトプットが何を表しているのかがわからない。
一枚一枚の数字の手書き文字の何を表しているのかがわかっていない。
変数img_testのoutput
array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 2., 16., 0., 0., 0., 0., 0., 0., 11., 8., 2., 0., 0., 0., 0., 0., 8., 9., 2., 0., 0., 0., 0., 0., 8., 15., 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., 16., 0., 0., 0., 0., 0., 0., 0., 9., 0., 0., 0., 0., 0., 0., 0., 8., 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., 4., 4., 0., 0., 0., 0., 0., 0., 6., 4., 0., 0., 0., 0., 0., 0., 3., 4., 0., 0., 0., 0., 0., 0., 0., 5., 0., 0., 0., 0., 0., 1., 16., 10., 7., 0., 0., 0., 0., 2., 2., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], ... ...
質問対象のコード
python
1#画像の入っているフォルダを指定し、中身のファイル名を取得 2filenames = sorted(os.listdir('handwrite_numbers')) 3#フォルダ内の全画像をデータ化 4img_test = np.empty((0, 64)) 5for filename in filenames: 6 #画像ファイルを取得、グレースケールにしてサイズ変更 7 img = Image.open('handwrite_numbers/' + filename).convert('L') 8 resize_img = img.resize((64, 64)) 9 img_data256 = np.array([]) 10 11#ーーーーーーーーわからないポイント 12 #サイズを更に縮めて配列を作り、sklearnのdigitsと同じ型にする 13 #64画素の1画素ずつ明るさをプロット 14 for y in range(8): 15 for x in range(8): 16 #1画素に縮小される範囲の明るさの二乗平均をとり、白黒反転 17 crop = np.asarray(resize_img.crop( 18 (x * 8, y * 8, x * 8 + 8, y * 8 + 8))) 19 bright = 255 - crop.mean()**2 / 255 20 img_data256 = np.append(img_data256, bright) 21 22 #画像データ内の最小値が0、最大値が16になるように計算 23 min_bright = img_data256.min() 24 max_bright = img_data256.max() 25 img_data16 = (img_data256 - min_bright) / (max_bright - min_bright) * 16 26 #加工した画像データの配列をまとめる 27 img_test = np.r_[img_test, img_data16.astype(np.uint8).reshape(1, -1)] 28#ーーーーーーーーー
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/05 15:44