Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何正确应用带有卷积层的3x3滤波器?_Python_Tensorflow_Convolution - Fatal编程技术网

Python 如何正确应用带有卷积层的3x3滤波器?

Python 如何正确应用带有卷积层的3x3滤波器?,python,tensorflow,convolution,Python,Tensorflow,Convolution,我试图将一个简单的拉普拉斯滤波器(3x3)应用于图像,但得到的输出非常嘈杂 import tensorflow as tf import PIL.Image as pil import numpy as np k = tf.constant([[1, 1, 1],[1, -8, 1],[1, 1, 1]], dtype=tf.float32) image = tf.placeholder(dtype=tf.float32, shape=[None, None, None, 1]) kern

我试图将一个简单的拉普拉斯滤波器(3x3)应用于图像,但得到的输出非常嘈杂

import tensorflow as tf
import PIL.Image as pil
import numpy as np

k = tf.constant([[1, 1, 1],[1, -8, 1],[1, 1, 1]], dtype=tf.float32)

image = tf.placeholder(dtype=tf.float32, shape=[None, None, None, 1])

kernel = tf.reshape(k, [3, 3, 1, 1], name='kernel')

res = tf.squeeze(tf.nn.conv2d(image, kernel, [1, 1, 1, 1], "SAME"))
with tf.Session() as sess:
    img = pil.open('grey.png')
    array = np.asarray(img).reshape(1, img.size[0], img.size[1], 1)

    out = sess.run(res, feed_dict={image:array})
    reverted = ((pil.fromarray(np.uint8(out))).convert('L')).save('testing.png')

卷积应用正确。问题在于图像反向转换。也就是说,你应用一个带有一些负值的过滤器,中间的<强> -8 < /强>。这意味着许多卷积像素将有一个负的结果值,然后在完成后将其转换为
np.uint8
。因此,-1将变为255,因此1-1将具有与之相关的截然不同的光值。这导致了这种模式

更改以下两行:

array = np.asarray(img, dtype = np.float32 ).reshape(1, img.size[0], img.size[1], 1) / 2

你会得到一个有意义的图像。当然,您可能会想出更好的方法来处理负值,将原始像素强制转换为[0127.5],然后将128添加到结果中是一个快速而肮脏的解决方案,但它解决了问题。您确实需要考虑这一点,因为如果中间像素为零,而其他像素具有重要值,也可能会出现溢出

使用更改后的代码,Angelina Jolie的随机图像会产生以下结果:


卷积应用正确。问题在于图像反向转换。也就是说,你应用一个带有一些负值的过滤器,中间的<强> -8 < /强>。这意味着许多卷积像素将有一个负的结果值,然后在完成后将其转换为
np.uint8
。因此,-1将变为255,因此1-1将具有与之相关的截然不同的光值。这导致了这种模式

更改以下两行:

array = np.asarray(img, dtype = np.float32 ).reshape(1, img.size[0], img.size[1], 1) / 2

你会得到一个有意义的图像。当然,您可能会想出更好的方法来处理负值,将原始像素强制转换为[0127.5],然后将128添加到结果中是一个快速而肮脏的解决方案,但它解决了问题。您确实需要考虑这一点,因为如果中间像素为零,而其他像素具有重要值,也可能会出现溢出

使用更改后的代码,Angelina Jolie的随机图像会产生以下结果: