tensorflow计算psnr与ssim

加载mnist进行测试

import math

import tensorflow as tf
import numpy as np

load_engine = tf.keras.datasets.mnist
# load_engine = tf.keras.datasets.fashion_mnist
(x_train, y_train), (x_test, y_test) = load_engine.load_data()
print(x_train.shape)

#将标签转one_hot编码
y_train = tf.one_hot(y_train,10)
y_test = tf.one_hot(y_test,10)

#扩展一维,将灰度图变成单通道图
x_train = np.expand_dims(x_train.astype(np.float32) / 255.0, axis=-1)  # [60000, 28, 28, 1]
# x_train = tf.expand_dims(x_train,axis=-1)
# x_train = tf.reshape(x_train,(-1,28,28,1))

方便的预处理操作

洗牌、批量、转换等操作都可以。

mnist_dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train))
mnist_dataset = mnist_dataset.batch(4)

计算指标

#自定义计算psnr
def get_psnr2(img1, img2):
   mse = np.mean((img1/1.0 - img2/1.0) ** 2 )
   if mse < 1.0e-10:
      return 100
   return 10 * math.log10(1.0/mse)

测试1

for images, labels in mnist_dataset:    # image: [4, 28, 28, 1], labels: [4]
    print(labels.shape)
    print(images.shape)

    print(images[0].shape)
    print(images[1].shape)
    print(get_psnr2(images[0], images[1]))
    psnr = tf.image.psnr(images[0], images[1], 1)
    print(psnr)
    break

在这里插入图片描述
结果正常!

测试2

for images, labels in mnist_dataset:    # image: [4, 28, 28, 1], labels: [4]
    print(labels.shape)
    print(images.shape)

    print(images[0].shape)
    print(images[1].shape)
    print(get_psnr2(images[0], images[0]))
    psnr = tf.image.psnr(images[0], images[0], 1)
    print(psnr)
    break

在这里插入图片描述
不会吧不会吧,不会tensorflow连除数为0都不考虑吧。。。
计算psnr需要计算mse,当两张一样的图片时,mse几乎为0,在计算psnr那就无穷大了。
tensorflow万万没想到我会计算两张一样的图片???。。。

测试3,批量计算

bath=[]
i = 0
for images, labels in mnist_dataset:    # image: [4, 28, 28, 1], labels: [4]
    i = i + 1
    bath.append(images)
    if i>2:
        break

    # psnr = tf.image.psnr(images, images, 1)
    # print(psnr)
    # break

print(tf.image.psnr(bath[0],bath[1],1))
print(tf.image.ssim(bath[0],bath[1],1))

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值