データの水増しについて検討しています。
そこで、mnistデータのような手書き文字データを使って画像を拡大するコードに挑戦しました。
現在、行っていることは
1.matplotlibでデータをpngファイルで保存
2. Augmentationで画像を変形
3.その画像をもう一度,mnistと同じデータ形式に変形する
です。
そこで問題点と・質問として、
・ (1.)の項目で画像表示・保存するときに画像の端に境界線として黒い線が表示・保存されます。
もともとの画像
データを変えた画像
このような周りの黒い線を消したいです。
・ (3.)の項目で保存した文字画像をmnistデータのように784ピクセルの画像データに変形できない
があります。
宜しくお願いします。
以下がコードとなります。
python
1import Augmentor 2from PIL import Image 3import shutil 4import os 5 6# data : トレーニングデータ label : ラベルデータ 7 8# カタカナの「セ」のデータ 9img_0 = data[20] 10 11# matplotlibのデフォルト設定では、目盛り線などが表示される。余分な線などを削除する。 12plt.tick_params(labelbottom=False, labelleft=False, labelright=False, labeltop=False) 13plt.tick_params(color='white') 14 15# img_0 を画像として表示 16plt.imshow(img_0[0,:,:],cmap="gray") 17 18# あるフォルダに保存 19plt.savefig('フォルダの場所') 20 21# Augmentorを用いて画像データを変える 22p = Augmentor.Pipeline("フォルダの場所") 23p.rotate(probability=0.7, max_left_rotation=10, max_right_rotation=10) 24p.zoom(probability=0.5, min_factor=1.1, max_factor=1.5) 25p.sample(1) 26 27 28# 新たな画像データを取得する 29img_ = Image.open("フォルダの場所") 30print(img_) 31 32# 新たな画像データの形式を確認 33img_ = np.array(img_) 34img_.shape 35# (288,432,4)←もともとは(1,28,28) この形に直したいが、、、、
第三者が検証できるよう、提示されている処理のソースコードを提示ください。
カタカナの「セ」ですか?それを構成するドットの太さと、「周りの黒い線」の太さが明らかに異なっています。「周りの太い線」がデータの一部であることを、どのようにして確認しましたか。
「mnistデータのように784ピクセルの画像データに変形できない」とのことですが、MNISTデータのフォーマットを、どのように理解されていますか。それに対して、どのようなデータを、どのようにしてMNISTデータに「変換しようと」されましたか。
ソースコードを提示しました。
また、画像を回転させると、「周りの黒い線」も回転してしまいます。
これより「周りの黒い線」もデータの一部になってしまっていると考えました。
matplotlib はグラフ表示ライブラリなので、今回の目的で plt.savefig() で画像を保存するというのは間違っています。
OpenCV の imwrite() を使えば、画像データのまま保存されます。
今回用いた手書き文字データは、画像がなく、0~255までのデータ配列のものとなっています。そのような場合、OpenCVは使用できるのでしょうか。
できますよ。PIL でもいいです。
回答に書きました。
回答1件
あなたの回答
tips
プレビュー