You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python是否有计算一维信号SSIM的内置函数?

一维信号SSIM的实现方案

当然有计算一维信号SSIM的方法,你可以通过改造现有图像SSIM库或手动实现来完成,以下是具体方案:

1. 基于skimage的图像SSIM改造

skimage.metrics.structural_similarity本质上支持一维场景,只需将一维数组转为单通道二维格式即可,因为SSIM的核心是局部窗口的统计特征计算,一维信号只是窗口维度不同。

示例代码:

import numpy as np
from skimage.metrics import structural_similarity as ssim

# 生成测试一维信号
x = np.random.rand(100)
y = x + 0.05 * np.random.randn(100)

# 转换为单通道二维数组
x_2d = x.reshape(1, -1)
y_2d = y.reshape(1, -1)

# 计算SSIM,必须指定信号的取值范围(替代图像默认的0-255)
ssim_score = ssim(x_2d, y_2d, data_range=y.max() - y.min())
print(f"一维信号SSIM值: {ssim_score:.4f}")

2. 手动实现一维SSIM

如果不想依赖图像库,可以基于SSIM公式自己实现,核心是计算局部窗口内的均值、方差和协方差:

SSIM核心公式:
$$SSIM(x,y) = \frac{(2\mu_x\mu_y + C_1)(2\sigma_{xy} + C_2)}{(\mu_x^2 + \mu_y^2 + C_1)(\sigma_x^2 + \sigma_y^2 + C_2)}$$

其中$\mu_x/\mu_y$是局部均值,$\sigma_x2/\sigma_y2$是局部方差,$\sigma_{xy}$是局部协方差,$C_1/C_2$是避免分母为0的常数。

示例代码:

import numpy as np
from scipy.ndimage import uniform_filter1d

def ssim_1d(x, y, window_size=11, C1=1e-4, C2=9e-4):
    x = np.asarray(x)
    y = np.asarray(y)
    
    # 计算局部窗口均值
    mu_x = uniform_filter1d(x, size=window_size, mode='reflect')
    mu_y = uniform_filter1d(y, size=window_size, mode='reflect')
    
    # 计算局部方差与协方差
    mu_x_sq = mu_x ** 2
    mu_y_sq = mu_y ** 2
    mu_xy = mu_x * mu_y
    
    sigma_x_sq = uniform_filter1d(x**2, size=window_size, mode='reflect') - mu_x_sq
    sigma_y_sq = uniform_filter1d(y**2, size=window_size, mode='reflect') - mu_y_sq
    sigma_xy = uniform_filter1d(x*y, size=window_size, mode='reflect') - mu_xy
    
    # 计算SSIM并取均值
    numerator = (2 * mu_xy + C1) * (2 * sigma_xy + C2)
    denominator = (mu_x_sq + mu_y_sq + C1) * (sigma_x_sq + sigma_y_sq + C2)
    return np.mean(numerator / denominator)

# 测试
x = np.random.rand(100)
y = x + 0.05 * np.random.randn(100)
print(f"手动实现的一维SSIM值: {ssim_1d(x, y):.4f}")

3. 方案选择

  • 用skimage改造的方式快速便捷,适合已有图像处理环境的场景;
  • 手动实现的方式更灵活,可根据需求调整窗口大小、边界处理逻辑等。

内容的提问来源于stack exchange,提问作者abc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 20:07:44