Python(PyTorch)多语言图像感知质量指标算法

🎯要点

🎯算法实现:🖊PyTorch单尺度和多尺度质量指标算法 | 🖊C++单尺度质量指标算法 | 🖊Rust多尺度质量指标算法 | 🖊LabVIEW单尺度质量指标算法 | 🖊MATLAB单尺度质量指标算法 | 🖊PyTorch完整参考图像质量测量指标、和分布式图像特征质量测量指标 | 🖊多尺度质量模型应用:图像压缩,视频压缩、端到端优化图像压缩、神经图像压缩、GPU变速图像压缩

🍪语言内容分比


🍇Python斯皮尔曼秩相关性

斯皮尔曼秩相关性是两个连续变量之间单调关系强度和方向的统计度量。因此,这些属性按其偏好排序或排列。它用符号"rho"(ρ)表示,可以取 -1 到 1 之间的值。rho 的正值表示两个变量之间存在正关系,而 rho 的负值表示负关系。rho 值为 0 表示两个变量之间没有关联。
ρ = 1 − 6 ∑ d i 2 n ( n 2 − 1 ) \rho=1-\frac{6 \sum d_i^2}{n\left(n^2-1\right)} ρ=1−n(n2−1)6∑di2

  • ρ = \rho= ρ=斯皮尔曼相关系数
  • 秩 = 变量值相对于数据集中其他值的位置或顺序
  • d i = d _i= di= 每个数据项的两个变量值的排名差异
  • n = 观察总数

创建秩涉及为数据集中的值分配数字顺序,其中最小值的秩为 1,第二小的值的秩为 2,依此类推。
次序 X1 Y1 1 7 5 2 6 4 3 5 5 4 8 10 5 7 7 6 10 9 7 3 2 8 9 8 10 2 1 \begin{array}{|c|c|c|} \hline \text { 次序 } & \text { X1 } & \text { Y1 } \\ \hline 1 & 7 & 5 \\ \hline 2 & 6 & 4 \\ \hline 3 & 5 & 5 \\ \hline 4 & 8 & 10 \\ \hline 5 & 7 & 7 \\ \hline 6 & 10 & 9 \\ \hline 7 & 3 & 2 \\ \hline 8 & 9 & 8 \\ \hline 10 & 2 & 1 \\ \hline \end{array} 次序 1234567810 X1 7658710392 Y1 5451079281

为 X 1 X_1 X1 创建秩,

  1. 按升序对 X 1 X_1 X1 的值进行排序: 2 , 3 , 4 , 5 , 6 , 7 , 7 , 8 , 9 , 10 2,3,4,5,6,7,7,8,9,10 2,3,4,5,6,7,7,8,9,10
  2. 根据排序顺序分配秩:1、2、3、4、5、6.5、6.5、8、9、10。由于有两个并列值(6 和 7),因此分配它们的平均秩 (6.5)。

对 Y 1 Y_1 Y1 进行同样的处理,我们得到:
次序 秩 X 1 秩 Y 1 1 6.5 4.5 2 5 3 3 3 4.5 4 8 10 5 6.5 7 6 10 9 7 2 2 9 9 1 10 1 8 \begin{array}{|c|c|c|} \hline \text { 次序 } & \text { 秩 } X_1 & \text { 秩 } Y_1 \\ \hline 1 & 6.5 & 4.5 \\ \hline 2 & 5 & 3 \\ \hline 3 & 3 & 4.5 \\ \hline 4 & 8 & 10 \\ \hline 5 & 6.5 & 7 \\ \hline 6 & 10 & 9 \\ \hline 7 & 2 & 2 \\ \hline 9 & 9 & 1 \\ \hline 10 & 1 & 8 \\ \hline \end{array} 次序 1234567910 秩 X16.55386.510291 秩 Y14.534.51079218

斯皮尔曼相关计算:

在斯皮尔曼的秩相关中,该过程涉及将原始数据转换为秩。这样做是为了评估两个变量之间的单调关系,而不依赖于数据点的具体数值。

让我们考虑在变量 X 1 X_1 X1 和 Y 1 Y_1 Y1 中获取 10 个不同的数据点。然后按照以下步骤操作:

  • 将值按从小到大的升序排列。
  • 根据每个值在排序顺序中的位置为每个值分配排名。最小值的等级为 1,第二小的值的等级为 2,依此类推。
  • 然后找出每项数据的两个变量值的排名差异的平方。

次序 1 2 3 4 5 6 7 8 9 10 X 1 7 6 4 5 8 7 10 3 9 2 Y 1 5 4 5 6 10 7 9 2 8 1 秩 X 1 6.5 5 3 4 8 6.5 10 2 9 1 秩 Y 1 4.5 3 4.5 6 10 7 9 2 8 1 d 2 4 4 2.25 4 4 0.25 1 0 1 0 \begin{array}{|c|c|c|c|c|c|c|c|c|c|c|} \hline \text { 次序 } & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 \\ \hline X _1 & 7 & 6 & 4 & 5 & 8 & 7 & 10 & 3 & 9 & 2 \\ \hline Y _1 & 5 & 4 & 5 & 6 & 10 & 7 & 9 & 2 & 8 & 1 \\ \hline \text { 秩 } X_1 & 6.5 & 5 & 3 & 4 & 8 & 6.5 & 10 & 2 & 9 & 1 \\ \hline \text { 秩 } Y_1 & 4.5 & 3 & 4.5 & 6 & 10 & 7 & 9 & 2 & 8 & 1 \\ \hline d^2 & 4 & 4 & 2.25 & 4 & 4 & 0.25 & 1 & 0 & 1 & 0 \\ \hline \end{array} 次序 X1Y1 秩 X1 秩 Y1d21756.54.5426453434534.52.25456464581081046776.570.25710910918322209989811021110

计算 d 2 d^2 d2:

获得秩后,您可以计算秩之间的差异。因此,在这种情况下,第一个数据点的秩差异为 2 ,我们对其进行平方,类似地,我们将 X i X_i Xi 和 Y i Y_i Yi 之间的秩中的第二个数据点的差值设为 2,并将其平方,得到 4。因此,像这样,我们对秩进行差异化,并通过对其进行平方,我们得到了最终的 d 平方值。我们将所有值相加,然后在上述公式中使用该值来计算斯皮尔曼系数。

通过输入 d 2 d^2 d2 和 n n n 值的值
ρ = 1 − 6 ∑ d i 2 n ( n 2 − 1 ) = 1 − 6 ( 4 + 4 + 2.25 + 4 + 4 + 0.25 + 1 + 0 + 1 + 0 ) 10 ( 1 0 2 − 1 ) = 1 − 6 × 20.5 990 = 1 − 123 990 = 1 − 0.12424242424242424 = 0.8757575757575757 ≈ 0.88 \begin{aligned} \rho & =1-\frac{6 \sum d_i^2}{n\left(n^2-1\right)} \\ & =1-\frac{6(4+4+2.25+4+4+0.25+1+0+1+0)}{10\left(10^2-1\right)} \\ & =1-\frac{6 \times 20.5}{990} \\ & =1-\frac{123}{990} \\ & =1-0.12424242424242424 \\ & =0.8757575757575757 \\ & \approx 0.88 \end{aligned} ρ=1−n(n2−1)6∑di2=1−10(102−1)6(4+4+2.25+4+4+0.25+1+0+1+0)=1−9906×20.5=1−990123=1−0.12424242424242424=0.8757575757575757≈0.88

Python绘图

Python 复制代码
import pandas as pd
from scipy.stats import spearmanr
import matplotlib.pyplot as plt

anscombe_data = pd.read_csv(data_url, index_col=0)
subset_data = anscombe_data[['x1', 'y1', 'x2', 'y2', 'x3', 'y3', 'x4', 'y4']]
fig, axs = plt.subplots(2, 2, figsize=(12, 8))

for i, (x_col, y_col) in enumerate(zip(subset_data.columns[::2], subset_data.columns[1::2])):
	row = i // 2
	col = i % 2

	subset_data.plot.scatter(x=x_col, y=y_col, ax=axs[row, col], title=f'Dataset {i+1}')
	correlation = spearmanr(subset_data[x_col], subset_data[y_col]).correlation
	axs[row, col].text(0.5, 0.9, f'Spearman correlation: {correlation:.2f}',
					ha='center', va='center', transform=axs[row, col].transAxes)

	if correlation > 0:
		axs[row, col].text(0.5, 0.8, 'Positive correlation', ha='center', va='center', transform=axs[row, col].transAxes)
	elif correlation < 0:
		axs[row, col].text(0.5, 0.8, 'Negative correlation', ha='center', va='center', transform=axs[row, col].transAxes)
	else:
		axs[row, col].text(0.5, 0.8, 'No correlation', ha='center', va='center', transform=axs[row, col].transAxes)

	if abs(correlation) > 0.7: 
		axs[row, col].text(0.5, 0.7, 'Linear relationship', ha='center', va='center', transform=axs[row, col].transAxes)
	else:
		axs[row, col].text(0.5, 0.7, 'Non-linear relationship', ha='center', va='center', transform=axs[row, col].transAxes)

plt.tight_layout()
plt.show()

Python实现相关性

Python 复制代码
from scipy.stats import spearmanr

# sample data
x = [1, 2, 3, 4, 5]
y = [5, 4, 3, 2, 1]

# calculate Spearman's correlation coefficient and p-value
corr, pval = spearmanr(x, y)

# print the result
print("Spearman's correlation coefficient:", corr)
print("p-value:", pval)

输出

python 复制代码
Spearman's correlation coefficient: -0.9999999999999999
p-value: 1.4042654220543672e-24 

👉参阅、更新:计算思维 | 亚图跨际

相关推荐
浮生如梦_1 小时前
Halcon基于laws纹理特征的SVM分类
图像处理·人工智能·算法·支持向量机·计算机视觉·分类·视觉检测
励志成为嵌入式工程师3 小时前
c语言简单编程练习9
c语言·开发语言·算法·vim
捕鲸叉3 小时前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer3 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
wheeldown4 小时前
【数据结构】选择排序
数据结构·算法·排序算法
观音山保我别报错5 小时前
C语言扫雷小游戏
c语言·开发语言·算法
TangKenny6 小时前
计算网络信号
java·算法·华为
景鹤6 小时前
【算法】递归+深搜:814.二叉树剪枝
算法
iiFrankie6 小时前
SCNU习题 总结与复习
算法
Dola_Pan7 小时前
C++算法和竞赛:哈希算法、动态规划DP算法、贪心算法、博弈算法
c++·算法·哈希算法