我的问题与这里的堆栈溢出讨论有关。
https://math.stackexchange.com/questions/161780/about-sum-of-squared-differences
讨论为我们提供了平方差之和的公式,并且给出了以下示例的答案。
例如,如果您要比较两个像素(即每个图像中一个像素),则区域为1个像素。假设它是第一行中的第五个像素:x = 0,y =4。f,g的像素值分别为10.3。对于一个2n1 = 1 => n1 = 0的区域,n2也是如此。
SSD =(f(x + i,y + j)−g(x + i,y + j)) 2
SSD =(f(0 + 0,4 + 0)−g(0 + 0,4 + 0)) 2
SSD =(f(0,4)−g(0,4))2
SSD =(10−3)2 = 49
答案 0 :(得分:3)
我假设他使用的是灰度颜色表示,其中值10和3对应于两个像素的亮度或光度。
有 一种将RGB转换为整数表示的方法:
$result = $count->fetchOne(); #or $count->fetch(); read the docs to the right method
echo $result[0];
... 但是,在此表示形式的值之间计算SSD将是没有意义的,这使我们面临通常计算色差的问题:任何将RGB展平为单一尺寸的尝试都将不可避免。折叠一些信息。
将RGB值表示为HSL / HSB / HSV可以使您更有意义地比较色相,饱和度或亮度(一次比较一个维度),但是很难一次折叠并一次比较所有三个维度。有意义的方式。
您可能会找到this条使用文章。
答案 1 :(得分:1)
(1)
“ ...如何从每个像素的RGB值中得到f(x,y)的像素值为10,而g(x,y)的像素值为3?” >
这些似乎只是基本示例值,可以更轻松地说明他的观点。您仍然可以在计算中使用完整的RGB值(对于全白像素,为 eg: 16777215
)。
另请参阅以下答案:How does sum of squared difference algorithm work?
(2)
相反,如果您更喜欢255
作为白色像素的固定值,请参见以下内容:
“ RGB不是单个值...我有三元组信息:我有红色,绿色和蓝色值。如何从这个RGB值变成单个值呢?提供?”
获取您的input_rgb
值并将其分解为R-G-B组件。
temp_R = input_rgb >> 16 & 0x0ff; in
temp_G = input_rgb >> 8 & 0x0ff;
temp_B = input_rgb >> 0 & 0x0ff;
然后获得单个代表值(像素的亮度)
value = (temp_R + temp_G + temp_B) / 3 ); //# averaged, gives range between 0 and 255
您可以通过执行value
(value / 255)
减小到0到1之间。