相关系数方程不起作用

时间:2015-11-12 15:15:54

标签: vb.net algorithm math vb6

我写了一个用于计算原始图像和加密图像之间相关系数的VB代码。相关系数值的范围在0到1之间,但是,在实现下面的代码之后,值大于1或2或4.我使用的等式如下: 请问你为什么我会收到这些价格。

enter image description here

这是我使用的代码,请注意所有变量在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

1 个答案:

答案 0 :(得分:0)

我已将您的代码段限制为红色,并创建了两个函数,只返回x=0y=0的一个像素值。此代码段似乎正在工作,并返回介于-1和1之间的相关系数。请注意,我已声明meanr_omeanr_esumr1sumr2,{{1 },sumr3为双打。我也使用Corr_r代替Math.Sqrt,您可以找到.NET小提琴here

Sqr