2017-02-28 6 views
1
import tensorflow as tf 
import numpy as np 
import matplotlib.pyplot as plt 
from scipy.misc import imread 

img = imread('dog2.jpg') 
#img is a shape of (360, 480, 3) 

w = img.shape[0] 
h = img.shape[1] 
c = img.shape[2] 
k = 3 # for my convenience 

plt.subplot(1,2,1) 
plt.imshow(img) 
img = tf.cast(img, tf.float32) 
img4d = tf.reshape(img,[1,w,h,c]) 
diag = np.array([[1,1,1],[0,0,0],[1,1,1]]*k, np.float32) 
# diag = np.diag(diag) 
diag4d = tf.reshape(diag,[k,k,c,1]) 
convolved = tf.nn.conv2d(img4d, diag4d, strides=[1,1,1,1], padding='SAME') 

with tf.Session() as sess: 
    result = sess.run(convolved) 
    print result.shape 
    plt.subplot(1,2,2) 
    plt.imshow(np.squeeze(result)) 
    plt.show() 

私はちょうど畳み込みを使用し、最初にぼかし効果を適用しようとしています。うん、カーネルの値が正しくないことは分かっています。しかし、私の質問は、私は3つのチャンネルを持つ入力画像を与えている。どのようにして3チャンネルの出力画像を得ることができますか?まあ。私は試した。しかし、私が得るのは、チャネル化された値だけです。tf.nn.conv2dを介して1つのチャネル出力しか得られないのはなぜですか?

答えて

1

[3, 3, 3, 1]という形のカーネルをtf.nn.conv2d()に渡しています。畳み込みから3チャンネルの画像を出力したい場合、カーネルの第4次元(official documentationにあるout_channels)は、1の代わりに3でなければなりません。たとえば[3, 3, 3, 3]

Tensorflowのconv2dメソッドをよりよく理解するために、conv2d documentation,this questionおよびthis questionをご覧ください。

+0

それは働いた。ありがとう。 –

+0

私の答えがうまくいったら、それを受け入れることを検討してください。 [こちらは](http://stackoverflow.com/help/someone-answers)それを行う方法。 – jabalazs

関連する問題