gpt4 book ai didi

ios - 点积和亮度/Findmyicone

转载 作者:行者123 更新时间:2023-12-01 18:26:54 24 4
gpt4 key购买 nike

全部,

我有一个基本问题,我在这里苦苦挣扎。当您查看 WWDC 2010 中的 findmyicone 示例代码时,您会看到:

static const uint8_t orangeColor[] = {255, 127, 0};
uint8_t referenceColor[3];

// Remove luminance
static inline void normalize( const uint8_t colorIn[], uint8_t colorOut[] ) {

// Dot product
int sum = 0;
for (int i = 0; i < 3; i++)
sum += colorIn[i] / 3;

for (int j = 0; j < 3; j++)
colorOut[j] = (float) ((colorIn[j] / (float) sum) * 255);
}

然后它被称为:
normalize(orangeColor, referenceColor);

运行调试器,它将 BGRA: (Red 255, Green 127, Blue 0) 转换为 (Red 0, Green 255, Blue 0)。我在网上查看过关于亮度和点积的详细信息,但实际上没有任何信息。

1-有人可以指导我这个功能在做什么吗?

2- 你能在网上指导我一些有用的主题/入门吗?

再次感谢
九巴

最佳答案

他们试图做的是在亮度变化中跟踪特定颜色,因此他们正在对颜色的亮度进行归一化。我在 a color tracking example based on a GPU Gems paper from Apple 中使用的片段着色器中做了类似的事情,以及我的 GPUImage 中的 ColorObjectTracking 示例应用程序框架:

vec3 normalizeColor(vec3 color)
{
return color / max(dot(color, vec3(1.0/3.0)), 0.3);
}

vec4 maskPixel(vec3 pixelColor, vec3 maskColor)
{
float d;
vec4 calculatedColor;

// Compute distance between current pixel color and reference color
d = distance(normalizeColor(pixelColor), normalizeColor(maskColor));

// If color difference is larger than threshold, return black.
calculatedColor = (d > threshold) ? vec4(0.0) : vec4(1.0);

//Multiply color by texture
return calculatedColor;
}

上面的计算通过将每个 channel 乘以 1/3 然后将它们相加来取三个颜色分量的平均值(这就是点积在这里所做的)。然后,它将每个颜色 channel 除以该平均值,以得到归一化的颜色。

计算该归一化颜色与目标颜色之间的距离,如果它在某个阈值内,则将像素标记为该颜色。

这只是确定一种颜色与另一种颜色接近度的一种方法。另一种方法是将 RGB 值转换为 Y、Cr 和 Cb(Y、U 和 V)分量,然后仅计算色度部分(Cr 和 Cb)之间的距离:
 vec4 textureColor = texture2D(inputImageTexture, textureCoordinate);
vec4 textureColor2 = texture2D(inputImageTexture2, textureCoordinate2);

float maskY = 0.2989 * colorToReplace.r + 0.5866 * colorToReplace.g + 0.1145 * colorToReplace.b;
float maskCr = 0.7132 * (colorToReplace.r - maskY);
float maskCb = 0.5647 * (colorToReplace.b - maskY);

float Y = 0.2989 * textureColor.r + 0.5866 * textureColor.g + 0.1145 * textureColor.b;
float Cr = 0.7132 * (textureColor.r - Y);
float Cb = 0.5647 * (textureColor.b - Y);

float blendValue = 1.0 - smoothstep(thresholdSensitivity, thresholdSensitivity + smoothing, distance(vec2(Cr, Cb), vec2(maskCr, maskCb)));

此代码是我在色度键控着色器中使用的代码,它基于 Apple 在其示例应用程序之一中使用的类似计算。哪个最好取决于您所面临的特定情况。

关于ios - 点积和亮度/Findmyicone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12825041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com