用python遍历读取images文件夹里的图片和image_enbeded文件夹里的图片,根据序号一一对应,用tensorflow库进行PSNR峰值信噪比计算
时间: 2023-05-28 17:06:44 浏览: 47
以下是可能的实现:
```python
import os
import tensorflow as tf
# 定义图片文件夹路径
img_folder = 'images'
img_embed_folder = 'image_enbeded'
# 获取图片文件夹和图片编码文件夹中的所有文件名
img_filenames = sorted(os.listdir(img_folder))
img_embed_filenames = sorted(os.listdir(img_embed_folder))
# 检查文件名是否一一对应
assert len(img_filenames) == len(img_embed_filenames)
# 创建计算PSNR的TensorFlow图
with tf.Graph().as_default(), tf.Session() as sess:
# 创建输入placeholder
img_ph = tf.placeholder(tf.uint8, [None, None, 3])
img_embed_ph = tf.placeholder(tf.uint8, [None, None, 3])
# 转换为float类型
img = tf.image.convert_image_dtype(img_ph, tf.float32)
img_embed = tf.image.convert_image_dtype(img_embed_ph, tf.float32)
# 计算PSNR
psnr = tf.image.psnr(img, img_embed, max_val=1.0)
# 循环遍历所有图片
for i in range(len(img_filenames)):
# 读取图片
img_path = os.path.join(img_folder, img_filenames[i])
img_embed_path = os.path.join(img_embed_folder, img_embed_filenames[i])
img_data = tf.gfile.FastGFile(img_path, 'rb').read()
img_embed_data = tf.gfile.FastGFile(img_embed_path, 'rb').read()
img_tensor = tf.image.decode_jpeg(img_data)
img_embed_tensor = tf.image.decode_jpeg(img_embed_data)
# 运行计算PSNR的图
psnr_value = sess.run(psnr, feed_dict={img_ph: img_tensor, img_embed_ph: img_embed_tensor})
# 输出结果
print('Image {}: PSNR = {:.2f}'.format(i+1, psnr_value))
```
这段代码首先定义了图片文件夹的路径和图片编码文件夹的路径,然后获取所有文件名并检查它们是否一一对应。接下来,创建了一个TensorFlow图,用于计算PSNR。该图包含了两个输入placeholder,用于传递两张图片的数据。首先将图片的数据转换为float类型,然后计算PSNR。在循环遍历所有图片时,读取图片数据并将其传递给计算PSNR的图。最后,输出结果。