2017-04-13 11 views
0

テンソルフローが初めてです。私はファイルから画像を読み取り、tf.image.decode_jpegでそれらをデコードしています。そして、私はmatplotlibでデコードされた画像をプロットしています。しかし、何とかオリジナル画像とデコードされた画像は異なっています。Tensorflowが正しく画像をデコードしていない

This is original Image

This is decoded image plotted with matplotlib

filenames = ['/Users/darshak/TensorFlow/100.jpg', '/Users/darshak/TensorFlow/10.jpg'] 
filename_queue = tf.train.string_input_producer(filenames) 

reader = tf.WholeFileReader() 
filename, content = reader.read(filename_queue) 

image = tf.image.decode_jpeg(content, channels=3) 

image = tf.cast(image, tf.float32) 

resized_image = tf.image.resize_images(image, [256, 256]) 

image_batch = tf.train.batch([resized_image], batch_size=9) 

sess = tf.InteractiveSession() 

coord = tf.train.Coordinator() 
threads = tf.train.start_queue_runners(sess=sess, coord=coord) 

plt.imshow(image.eval()) 
plt.show() 
sess.close() 
+0

あなたは私たちにあなたがプロットに使用しているコードを表示することができます画像? – Suever

+1

私は、OpenCVを使って画像を読み込み、BGRとmatplotlibをロードして問題を起こすRGBとしてプロットしています。 –

答えて

1

plt.imshow(image.eval())imageの要素の種類に応じて異なる画像データを解釈するため、問題が生じます。

  • imagetf.uint8テンソル(すなわち、それは、tf.image.decode_jpeg()によって生成されるように)、それはR、Gため0から255に値を含み、Bチャンネルであろうし、plt.imshow()が白として黒及び(255, 255, 255)として(0, 0, 0)を解釈した場合。

  • は、それがR、G、及びBチャネル、及びブラック等plt.imshow()解釈(0.0, 0.0, 0.0)ため255.00.0からの値を含むであろう、tf.float32テンソルであることimageをキャストするとき、それは白色(1.0, 1.0, 1.0)を解釈します。 1.0より大きいすべての値は1.0と同じに扱われ、その結果、画像は変色して見えます。

あなたはtf.float32テンソルとして画像を表現し、それを視覚化する場合は、あなたが255.0で画像値を分割する必要があります。

image = tf.image.decode_jpeg(content, channels=3) 
image = tf.cast(image, tf.float32)/255.0 
+0

ありがとうございました。 –

+0

'tf.image.decode_jpeg'が画像を生成するために使用するアルゴリズム、すなわちdctメソッドです。ドキュメントによると、dctメソッドは 'Defaults to"となります。解凍に使用されるアルゴリズムについてのヒントを指定する文字列。デフォルトは ""で、システム固有のデフォルトに対応します。現在有効な値は["INTEGER_FAST"、 "INTEGER_ACCURATE"] 'です。システムがINTEGER_ACCURATEまたはINTEGER_FASTを使用しているかどうかを知るにはどうすればよいですか? – dpk

関連する問題