質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

414閲覧

Random_Erasingした際に霧がかかっているような画像でなくしたい

semisemi

総合スコア18

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2023/01/16 14:56

編集2023/01/17 06:50

前提

Random_Erasingする際の画像とマスクを合成したあとの画像が、元の画像に霧がかかっているような画像になってしまうため霧がからないようにしたいです。

実現したいこと

イメージ説明
図1 元の画像
イメージ説明
図2 Random_Erasingした画像
イメージ説明
図3 被マスク画像の値
・図1にRandom_Erasingするだけで図2のようなRandom_Erasing+霧がかったような画像にはしたくないです。

該当のソースコード

python

1def random_erasing(img, p=1.0, sl=0.02, sh=0.4, r1=0.3, r2=3.3): 2 target_img = img.copy() 3 4 if p < np.random.rand(): 5 # RandomErasingを実行しない 6 return target_img 7 8 H, W, _ = target_img.shape 9 S = H * W 10 11 while True: 12 Se = np.random.uniform(sl, sh) * S # 画像に重畳する矩形の面積 13 re = np.random.uniform(r1, r2) # 画像に重畳する矩形のアスペクト比 14 15 He = int(np.sqrt(Se * re)) # 画像に重畳する矩形のHeight 16 We = int(np.sqrt(Se / re)) # 画像に重畳する矩形のWidth 17 18 xe = np.random.randint(0, W) # 画像に重畳する矩形のx座標 19 ye = np.random.randint(0, H) # 画像に重畳する矩形のy座標 20 21 if xe + We <= W and ye + He <= H: 22 # 画像に重畳する矩形が画像からはみ出していなければbreak 23 break 24 mask = np.random.randint(0, 255, (He, We, 3)) # 矩形がを生成 矩形内の値はランダム値 25 target_img[ye:ye + He, xe:xe+ We,:] = mask# 画像に矩形を重畳 26 27 return target_img

試したこと

上記のコードは、https://qiita.com/takurooo/items/a3cba475a3db2c7272fe
のコピペです。
原因がtarget_img[ye:0 + He, xe:0 + We,:] = maskにあると考え、別の合成方法を模索しましたができませんでした。
このような状態になっている記事もないため、もしかしたら私の環境が悪いのでしょうか。

補足情報(FW/ツールのバージョンなど)

windows11(64bit)
anacondaを使用
python 3.8.13
TensorFlow 2.3
Spyder 5.3.3を利用

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PondVillege

2023/01/17 00:14

マスクの値域が0~255なのに対して,被マスク画像の値域がそれより小さい,とかではないでしょうか
can110

2023/01/17 00:19

参考元の関数をそのまま利用した場合の結果は意図通りでしょうか。 > 原因がtarget_img[ye:0 + He, xe:0 + We,:] = maskにあると考え 上記の部分は元の関数と異なるようですが、あえて変更している理由は何でしょうか。
semisemi

2023/01/17 06:51 編集

コメントありがとうございます。 ・matplotlibのimshowで画像表示しているためvmin=0, vmax=255をつけてみましたが霧がかった画像が表示されました。 ・被マスク画像は、/255で正規化して0~1の範囲でおさめています。また、正規化を無くしても霧がかった画像になりました。画像に質問に被マスク画像の値を一部ですが載せておきます。 ・参考元の関数を使っても霧がかったような画像になったため、色々試して0にしたら変わるかもとなんとなく思い変えてみましたが結果は同じでした。
can110

2023/01/17 06:56

> ・参考元の関数を使っても霧がかったような画像になったため 了解しました。なお - 関数の呼出元の処理も含めた再現コード - PNG形式などできるだけ元そのままの画像 - (もしあるなら)正常に変換できる画像 をアップすると第三者が検証し回答しやすくなるかと思います。
PondVillege

2023/01/17 07:26 編集

> 被マスク画像は、/255で正規化して0~1の範囲でおさめています。 では,np.random.randint(0, 255)で生成したマスク画像の値域が0~255,被マスク画像が0~1と値域が違うために,生じている現象ではないでしょうか.np.random.randint(0, 255)を0~1に正規化するか,np.random.random()を利用してそもそも0~1の値を生成するなどの対処をとってみてください.
jbpb0

2023/01/17 11:10 編集

処理前の画像にも「vmin=0, vmax=255」を付けたら、処理前の時点でも「霧がかった画像」が表示されるのではないかな、と思って、 > 「vmin=0, vmax=255」を付けてみてください と書きました ただし、 > 被マスク画像は、/255で正規化して0~1の範囲でおさめています。 の場合は、「vmin=0, vmax=1」です 解決したみたいなので、まあいいのですが
guest

回答1

0

自己解決

他の画像で試して元の画像で試してみたら何故かできました。
こんな解決方法ですごく申し訳ないですが、
コメントしてくださった方々ありがとうございました。

投稿2023/01/17 08:09

semisemi

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問