【发布时间】:2015-11-12 15:15:54
【问题描述】:
我写了一个VB代码来计算原始图像和加密图像之间的相关系数。相关系数值介于 0 到 1 之间,但是,在执行下面的代码后,这些值大于 2 或 4 等值。我使用的等式如下: 请检查一下为什么我会得到这些 vales。
这是我使用的代码,请注意在 x 和 y 循环之前所有变量都设置为零:
For y = 0 To hgt-1: For x = 0 To wid-1
meanr_o = meanr_o + Red(x, y)
meang_o = meang_o + Grn(x, y)
meanb_o = meanb_o + Blu(x, y)
meanr_e = meanr_e + nred(x, y)
meang_e = meang_e + nGrn(x, y)
meanb_e = meanb_e + nBlu(x, y)
N = N + 1
Next x: Next y
meanr_o = meanr_o / N
meang_o = meang_o / N
meanb_o = meanb_o / N
meanr_e = meanr_e / N
meang_e = meang_e / N
meanb_e = meanb_e / N
For y = 0 To hgt-1: For x = 0 To wid-1
sumr1 = sumr1 + ((Red(x, y) - meanr_o) * (nred(x, y) - meanr_e))
sumr2 = sumr2 + ((Red(x, y) - meanr_o) ^ 2)
sumr3 = sumr3 + ((nred(x, y) - meanr_e) ^ 2)
''''''''''''''''''''''''''''''''''''''''''
sumg1 = sumg1 + ((Grn(x, y) - meang_o) * (nGrn(x, y) - meang_e))
sumg2 = sumg2 + ((Grn(x, y) - meang_o) ^ 2)
sumg3 = sumg3 + ((nGrn(x, y) - meang_e) ^ 2)
''''''''''''''''''''''''''''''''''''''''''
sumb1 = sumb1 + ((Blu(x, y) - meanb_o) * (nBlu(x, y) - meanb_e))
sumb2 = sumb2 + ((Blu(x, y) - meanb_o) ^ 2)
sumb3 = sumb3 + ((nBlu(x, y) - meanb_e) ^ 2)
Next x: Next y
sumr1 = sumr1 / N
sumr2 = sumr2 / N
sumr3 = sumr3 / N
sumg1 = sumg1 / N
sumg2 = sumg2 / N
sumg3 = sumg3 / N
sumb1 = sumb1 / N
sumb2 = sumb2 / N
sumb3 = sumb3 / N
Corr_r = sumr1 / Sqr(sumr2 * sumr3)
Corr_g = sumg1 / Sqr(sumg2 * sumg3)
Corr_b = sumb1 / Sqr(sumb2 * sumb3)
Corr = (Corr_r + Corr_g + Corr_b) / 3
Label1.Caption = Corr
【问题讨论】:
-
您的输入正确吗?也许 Red, nred 是 0-255 但公式期望 0-1
-
两张红色图像的相关系数是多少? (R=255,G=0,B=0)
-
你能把代码剪成红色吗(假设它给出了错误的值)?我会建议比
sum[rgb][123]更好的名字:sum[rgb]1可以是covar[rgb],sum[rgb]2可以是var[rgb],sum[rgb]3可以是nvar[rgb]。 -
@user3819984 我明白这一点。我是说我没有看到您的代码有任何问题,并且怀疑错误可能在其他地方。您需要将其转换为minimal reproducible example,其中一步是只关注红色。并包括
Sqr。并包括Red和nred的数据(可能只是按字面意思输入)。 -
您使用的图像分辨率是多少?如果它太大,那么可能是你的数据类型溢出了......先尝试较小的,如果没有错,尝试切换到更大的变量或确保你在
<0,1>范围内的浮点数...