【问题标题】:Calculating a single representative "pixel value" from a RGB value从 RGB 值计算单个代表“像素值”
【发布时间】:2019-03-08 16:03:01
【问题描述】:

我的问题与这里的堆栈溢出讨论有关。

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


我的问题是他如何从每个像素的 RGB 值中获得 f(x,y) 的 10 和 g(x,y) 的 3 像素值? RGB 不是一个单一的值。那就是当我有图像的一个像素时,我有三组信息:我有红色、绿色和蓝色的颜色值。如示例提供的那样,如何从这个 RGB 值变为单个值?

【问题讨论】:

  • 如果您询问的是名为Processing 的编程语言,那么有大量用于处理颜色的内置函数。如果您询问该特定编程语言,请删除该标签,因为它不是image-processing 的别名(这似乎是您关心的问题)。
  • 我将其取消标记为处理问题。如果是处理问题,请发帖minimal reproducible example 展示您目前的情况。

标签: image image-processing colors rgb


【解决方案1】:

我假设他使用的是灰度颜色表示,其中值 10 和 3 对应于两个像素的亮度或光度。

一种将 RGB 转换为整数表示的方法:

RGB (int) = 

R * (256^2) + 

G * (256) + 

B

... 然而,在这种表示中计算值之间的 SSD 将毫无意义,这给我们带来了一般计算颜色距离的问题:任何将 RGB 扁平化为单一维度的尝试都将不可避免地折叠一些信息。

将您的 RGB 值表示为 HSL/HSB/HSV 可以让您更有意义地比较色调、饱和度或亮度(一次一个维度),但很难一次折叠并比较所有 3 个维度有意义的方式。

您可以找到this 的使用文章。

【讨论】:

    【解决方案2】:

    (1)

    "...他如何从每个像素的 RGB 值中获得 f(x,y) 的 10 和 g(x,y) 的 3 的像素值?"

    这些似乎只是基本的示例值,以便更容易说明他的观点。您仍然可以在计算中使用完整的 RGB 值(例如: 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 / 255) 进一步将结果value 缩小到0 到1 之间的范围内

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多