是否有针对TensorFlow的SSIM甚至MS-SSIM实现?
SSIM(结构相似性指数度量)是用于测量图像质量或图像相似性的度量.它受人类感知的启发,根据一些论文,与l1/l2相比,它具有更好的损失功能.例如,请参阅用于图像处理的神经网络的损失函数.
到目前为止,我在TensorFlow中找不到实现.在尝试通过从C++或python代码(例如Github:VQMT/SSIM)移植它来自己做之后,我陷入了将高斯模糊应用于TensorFlow中的图像的方法.
有人已经试图自己实施吗?
Stackoverflow 社区,
我正在尝试bmp
在 Python 上的两个图像之间计算 SSIM(结构相似性)。我发现了在python 库中实现的structure_similarity()函数skimage
和来自此处托管的原始MatLab
实现的等效代码。含义如下:
def structuralSimilarityIndex(ref_image, impaired_image, cs_map=False):
window = Metric.fSpecialGauss(constant.SSIM_FILTER_SIZE,
constant.SSIM_FILTER_SIGMA)
C1 = (constant.SSIM_Constant_1 * constant.PIXEL_MAX) ** 2
C2 = (constant.SSIM_Constant_2 * constant.PIXEL_MAX) ** 2
mu1 = signal.fftconvolve(window, ref_image, mode='valid')
mu2 = signal.fftconvolve(window, impaired_image, mode='valid')
mu1_sq = mu1 * mu1
mu2_sq = mu2 * mu2
mu1_mu2 = mu1 * mu2
sigma1_sq = signal.fftconvolve(
window, ref_image*ref_image, mode='valid') - mu1_sq
sigma2_sq = signal.fftconvolve(
window, impaired_image*impaired_image, mode='valid') - mu2_sq …
Run Code Online (Sandbox Code Playgroud) 我正在尝试计算相应图像之间的 SSIM。例如,groundtruth 目录中名为 106.tif 的图像对应于 fake 目录中的“假”生成图像 106.jpg。
真实目录绝对路径是/home/pr/pm/zh_pix2pix/datasets/mousebrain/test/B
假目录绝对路径是/home/pr/pm/zh_pix2pix/output/fake_B
里面的图片是一一对应的,像这样: 见图片
我想一对一地比较数千张这样的图像。我不想将一张图像的 SSIM 与许多其他图像进行比较。相应的真实图像和假图像都具有相同的文件名,但扩展名不同(即106.tif和106.jpg),我只想将它们相互比较。
我正在努力以这种方式编辑用于 SSIM 比较的可用脚本。我想使用这个:https://github.com/mostafaGwely/Structural-Similarity-Index-SSIM-/blob/master/ssim.py但欢迎其他建议。代码也如下所示:
# Usage:
#
# python3 script.py --input original.png --output modified.png
# Based on: https://github.com/mostafaGwely/Structural-Similarity-Index-SSIM-
# 1. Import the necessary packages
#from skimage.measure import compare_ssim
from skimage.metrics import structural_similarity as ssim
import argparse
import imutils
import cv2
# 2. Construct the argument parse and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-f", "--first", required=True, help="Directory of the image …
Run Code Online (Sandbox Code Playgroud) 对于我的图像处理类项目,我使用各种过滤算法(双边滤波器,NL-Means等)过滤图像,并尝试将结果与变化的参数进行比较.我遇到了PSNR和SSIM指标来衡量过滤器质量,但无法完全理解这些值的含义.任何人都可以帮助我:
我真的很困惑.任何帮助将受到高度赞赏.谢谢.
我想使用SSIM 度量作为我在tensorflow 中处理的模型的损失函数。SSIM 应该测量我的去噪自动编码器的重建输出图像与输入未损坏图像(RGB)之间的相似性。
据我了解,为了在 tensorflow 中使用 SSIM 度量,图像应该归一化为[0,1] 或 [0,255] 而不是 [-1,1]。在将我的张量转换为 [0,1] 并实现 SSIM 作为我的损失函数后,重建的图像是黑白的,而不是彩色的 RGB 图像。
tf.reduce_mean(tf.image.ssim(reconstructed, truth, 1.0))
Run Code Online (Sandbox Code Playgroud)
我的模型在MSE(均方误差)下工作正常,重建的图像是彩色的 (RGB)。
使用tf.losses.mean_squared_error(truth, reconstructed)
重建的图像将是 RGB 图像,而使用 SSIM 会给我一个一维图像。
为什么在张量流中使用SSIM 作为损失函数给我的结果与 MSE(在重建图像通道方面)不同?
是否有任何不依赖OpenCV的PSNR,SSIM或MSE的开源C实现?
谢谢.
我一直在使用结构相似性指数(通过 tensorflow)来比较图像,但是它花费的时间太长。我想知道是否有一种不需要太多时间的替代技术。如果有人能指出比 Python 中的 tensorflow 更有效的 SSIM 实现,那也没关系。
我使用 SSIM 的意图是,给定一个参考图像 (A) 和一组图像 (B),我需要了解 B 中的哪个图像与参考图像 A 最相似。
我正在使用 TensorFlow 处理图像超分辨率问题(2D 和 3D),并且正在使用 SSIM 作为eval_metrics
.
我正在使用image.ssim
来自 TF 和measure.comapre_ssim
来自skimage
. 它们都为 2D 提供了相同的结果,但 3D 体积的结果总是有所不同。
我已经查看了TF-implementation和skimage-implementation的源代码。在两种实现中如何考虑和处理输入图像似乎存在一些根本差异。
复制问题的代码:
import numpy as np
import tensorflow as tf
from skimage import measure
# For 2-D case
np.random.seed(12345)
a = np.random.random([32, 32, 64])
b = np.random.random([32, 32, 64])
a_ = tf.convert_to_tensor(a)
b_ = tf.convert_to_tensor(b)
ssim_2d_tf = tf.image.ssim(a_, b_, 1.0)
ssim_2d_sk = measure.compare_ssim(a, b, multichannel=True, gaussian_weights=True, data_range=1.0, use_sample_covariance=False)
print (tf.Session().run(ssim_2d_tf), ssim_2d_sk)
# For …
Run Code Online (Sandbox Code Playgroud) 我从输入流(mxf 或 mov)中获取生成的 mp4 视频流,并且在执行此操作时我将其-psnr
用作 H264 参数。结果是大约。40 或 41。
然后我将输入和输出与 psnr(或 ssim)过滤器进行比较。结果大约 20 或 21。这是一个很大的区别。有没有人知道这种差异的原因?
注意:ssim 结果是相似的。第一个是 ~0.97,第二个是 ~0.83
ffmpeg -i input.mov -codec:v libx264 -psnr -f mp4 output.mp4
PSNR (~40)
ffmpeg -i output.mp4 -i input.mov -filter_complex psnr -f mp4 /dev/null
PSNR (~20)
Run Code Online (Sandbox Code Playgroud)
ffmpeg -i input.mov -codec:v libx264 -ssim -f mp4 output.mp4
SSIM (~0.98...)
ffmpeg -i output.mp4 -i input.mov -filter_complex ssim -f mp4 /dev/null
PSNR (~0.83...)
Run Code Online (Sandbox Code Playgroud) 我正在尝试计算两个图像的 SSIM 值,但出现错误。
img_np.shape = (1, 256, 256)
out.detach()[0].cpu().numpy().shape = (1, 256, 256)
out
是从模型生成的输出图像当我尝试查找 SSIM 值时ssim_ = compare_ssim(img_np, out.detach().cpu().numpy()[0])
出现错误ValueError: win_size exceeds image extent. If the input is a multichannel (color) image, set multichannel=True.
我努力了
ssim_ = compare_ssim(img_np, out.detach().cpu().numpy()[0], full=True)
但同样的错误ssim_ = compare_ssim(img_np, out.detach().cpu().numpy()[0], full=True, win_size=1,use_sample_covariance=False)
然后我得到的输出是数组而不是数字ssim ×10
python ×5
scikit-image ×4
tensorflow ×3
image ×2
metrics ×2
algorithm ×1
c ×1
ffmpeg ×1
mse ×1
open-source ×1
opencv ×1
python-2.7 ×1
python-3.x ×1
similarity ×1