问题标签 [gamma]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
803 浏览

android - 检测我的 Unity 应用程序是否在 Galaxy 设备中运行以更改 gamma

我正在使用 Unity3D 4.3 (2D) 为孩子开发一个应用程序。问题是当我在 Galaxy S3 和 Galaxy Note 上测试它时,颜色太饱和了。这些设备中的应用程序的外观很糟糕。有什么方法可以检测应用程序是否在银河设备上运行,以便我可以过滤颜色或其他东西?

该应用程序旨在成为多平台。

非常感谢!

0 投票
2 回答
7044 浏览

r - R中的伽马分布

我想在 R 中绘制一个伽马分布,其中比例参数(alpha)保持不变,但卷积参数发生变化(全部在 1 个图中)。我知道 dgamma 但并不真正知道 x 参数的含义。我想通过提供 alpha 和 beta 来绘制函数。这是可行的吗?

您的解决方案的输出是形状 <- c(2,5,6,12)

0 投票
1 回答
8529 浏览

opengl - 我是否需要对现代计算机/显示器上的最终颜色输出进行伽玛校正

我一直假设我的伽马校正管道应该如下:

  • 对 ( ) 中加载的所有纹理使用 sRGB 格式,GL_SRGB8_ALPHA8因为所有艺术程序都会预先伽玛校正其文件。GL_SRGB8_ALPHA8当从着色器中的纹理采样时, OpenGL 将自动转换为线性空间。
  • 在线性空间中进行所有光照计算、后期处理等。
  • 写入将在屏幕上显示的最终颜色时转换回 sRGB 空间。

请注意,在我的情况下,最终的颜色写入涉及我从 FBO(它是线性 RGB 纹理)写入后台缓冲区。

我的假设受到了挑战,好像我在最后阶段进行了伽玛校正,我的颜色比应有的更亮。我设置了由值 {255, 106 , 0}的灯光绘制的纯色,但是当我渲染时,我得到 {255, 171 , 0}(由打印筛选和颜色选择确定)。而不是橙色,我得到黄色。如果我在最后一步没有正确伽玛,我会得到正确的 { 255, 106 , 0 } 值。

根据一些资源,现代 LCD 屏幕模仿 CRT 伽马。他们总是吗?如果不是,我怎么知道我是否应该伽玛正确?我在其他地方出错了吗?


编辑 1

我现在注意到,即使我用光写的颜色是正确的,我使用纹理颜色的地方也不正确(但在没有伽马校正的情况下,我期望的颜色要深得多)。我不知道这种差距是从哪里来的。


编辑 2

在尝试GL_RGBA8使用我的纹理而不是 之后GL_SRGB8_ALPHA8,一切看起来都很完美,即使在照明计算中使用纹理值(如果我将光强度减半,则输出颜色值减半)。

我的代码在任何地方都不再考虑伽玛校正,而且我的输出看起来正确。

这让我更加困惑,不再需要/使用伽玛校正吗?


编辑 3 - 回应datenwolf 的回答

经过更多的实验后,我对这里的几点感到困惑。

1 - 大多数图像格式都是非线性存储的(在 sRGB 空间中)

我已经加载了一些图像(在我的例子中是 .png 和 .bmp 图像)并检查了原始二进制数据。在我看来,图像实际上是在RGB颜色空间中,就好像我将像素值与图像编辑程序与我在程序中得到的字节数组进行比较,它们完全匹配。由于我的图像编辑器给了我 RGB 值,这将表明图像存储在 RGB 中。

我正在使用 stb_image.h/.c 加载我的图像,并一直跟随它加载 .png 并且在加载时没有看到它对图像进行伽玛校正的任何地方。我还在十六进制编辑器中检查了 .bmps,磁盘上的值与它们匹配。

如果这些图像实际上存储在磁盘上的线性 RGB 空间中,我应该如何(以编程方式)知道何时指定图像位于 sRGB 空间中?是否有某种方法可以查询功能更强大的图像加载器可能会提供的信息?或者是否由图像创建者将他们的图像保存为伽马校正(或不校正) - 这意味着建立一个约定并为给定的项目遵循它。我问了几位艺术家,他们都不知道伽马校正是什么。

如果我指定我的图像是 sRGB,那么它们太暗了,除非我最后进行了正确的伽玛(如果显示器输出使用 sRGB,这是可以理解的,但请参见第 2 点)。

2 - “在大多数计算机上,有效的扫描 LUT 是线性的!但这意味着什么?”

我不确定我能在你的回复中找到这个想法在哪里完成。

据我所知,经过试验,我在输出线性值上测试过的所有显示器。如果我绘制一个全屏四边形并在着色器中使用硬编码值对其进行着色,而没有进行伽马校正,则监视器将显示我指定的正确值。

我从你的回答和我的结果中引用的句子会让我相信现代显示器输出线性值(即不模拟 CRT 伽马)

我们的应用程序的目标平台是 PC。对于这个平台(不包括使用 CRT 或非常旧的显示器的人),无论您对 #1 的响应是什么,然后对于 #2 的gamma正确(即不执行最终的 RGB->sRGB 转换 - 手动执行),这样做是否合理?或使用 GL_FRAMEBUFFER_SRGB)?

如果是这样,GL_FRAMEBUFFER_SRGB 适用于哪些平台(或者今天可以在哪些平台上使用它),或者使用线性 RGB 的显示器真的那么新(鉴于 GL_FRAMEBUFFER_SRGB 是 2008 年推出的)?

--

我已经和我学校的其他一些图形开发人员交谈过,从他们的声音来看,他们都没有考虑到伽马校正,他们也没有注意到任何不正确的地方(有些人甚至没有意识到这一点)。一位开发人员特别表示,在考虑 gamma 时他得到了错误的结果,因此他决定不担心 gamma。鉴于我在网上/看到我的项目的信息相互矛盾,我不确定在我的项目中为我的目标平台做什么。


编辑 4 - 响应datenwolf 的更新答案

确实是的。如果在信号链的某个地方应用了非线性变换,但所有像素值从图像到显示器都没有被修改,那么这种非线性已经预先应用在图像的像素值上。这意味着,图像已经在非线性色彩空间中。

如果我正在检查显示器上的图像,您的回答对我来说是有意义的。为了确保我清楚,当我说我正在检查图像的字节数组时,我的意思是我正在检查内存中纹理的数值,而不是屏幕上的图像输出(我为第 2 点所做的) . 对我来说,我能看到你所说的是真的唯一方法是图像编辑器是否在 sRGB 空间中给我值。

另请注意,我确实尝试检查显示器上的输出,以及修改纹理颜色(例如,除以一半或加倍)并且输出看起来正确(使用我在下面描述的方法测量)。

你是如何测量信号响应的?

不幸的是,我的测量方法远比你的粗略。当我说我在我的显示器上进行实验时,我的意思是我输出纯色全屏四边形,其颜色在着色器中硬编码到普通的 OpenGL 帧缓冲区(写入时不会进行任何颜色空间转换)。当我输出白色、75% 灰色、50% 灰色、25% 灰色和黑色时,会显示正确的颜色。现在在这里我对正确颜色的解释肯定是错误的。我截取屏幕截图,然后使用图像编辑程序查看像素的值是多少(以及视觉评估以确保这些值有意义)。如果我理解正确,如果我的显示器是非线性的,我需要先执行 RGB->sRGB 转换,然后再将它们呈现给显示设备以使其正确。

我不会撒谎,我觉得我在这里有点超出我的深度。我在想我可能会为我的第二个困惑点(最终的 RGB->sRGB 转换)提出的解决方案将是一个可调整的亮度设置,并将其默认为在我的设备上看起来正确的设置(没有伽马校正)。

0 投票
2 回答
476 浏览

matlab - 打开和写入文件时的Matlab伽玛校正

我正在使用 matlab 对图像进行一些计算,我的第一印象是从 jpeg 文件读取后存储在 matlab 矩阵中的值是经过伽马校正的。因此,我应该编写以下代码:

为了得到一个具有线性空间值的矩阵。但是,我尝试了以下方法:生成线性渐变:

然后我将其写入 jpeg 文件并再次读取:

现在我希望 gradient 和 gradient_jpeg 会有所不同,因为后者在编写为 jpg 文件时进行了伽马校正,而另一个则没有。事实证明这两个矩阵是相同的。而我这是我不明白的地方。在之前的测试中,我尝试从 matlab 和 HDRShop 打开相同的 jpg 图像。两个图像在屏幕上看起来相同,但是当我查找图像中的值时,它们不是一样。matlab中的值恰好是我在HDRShop中以2.2的幂得到的值(大约)。所以我的问题是......当matlab读取jpeg文件时是否将值存储在线性空间中,或者我有专门应用伽马项 (.^2.2) 以获得线性值?

提前致谢

0 投票
2 回答
908 浏览

r - Rcpp 和 R 中的密度伽马

我正在评估具有不同支持的伽马分布的密度。这是我的 Rcpp 代码。

现在测试代码

我得到“平均相对差异:32.77”......知道这种差异来自哪里吗?谢谢!

0 投票
0 回答
732 浏览

python - 将高斯分布或伽马分布拟合到 Python 中的数据

我有一些测量数据,它们可以是成熟的高斯分布,也可以是看起来像伽马分布的东西,我目前有以下代码(片段),它对于非常高斯的数据表现得非常好:

证明它适用于非常高斯的数据点:

在此处输入图像描述

然而,问题出现了,我的一些数据点与一个好的高斯不匹配,我得到了这个:

在此处输入图像描述

我很想尝试三次样条,但从概念上讲,我想坚持使用高斯曲线拟合,因为这是数据中应该包含的数据结构(在某些数据中可能出现膝盖或尾部,如第二张图)。如果有人对如何处理这个“问题”有任何提示或建议,我将不胜感激。

0 投票
1 回答
3234 浏览

r - 如何绘制数据的 QQ 图与自定义理论函数

我想对我的数据是否符合特定的分布函数进行视觉评估。为此,我使用 R 生成分位数-分位数 (QQ) 图。分布函数非常具体,不在概率分布的标准列表中,所以我编写了自己的 R 函数来描述它。它在下面的代码中称为“DistFunc”,由两个伽马函数的比率组成。

简而言之,我在代码中所做的是从包含两列的文件“DistributionEstimate.txt”中读取数据。第 1 列是 x 值,第 2 列是 y 值。变量“a”和“b”是我之前在另一个程序中使用此分布函数与数据的最小二乘拟合确定的最佳拟合参数。然后我定义 DistFunc 并尝试使用 qqmath 函数绘制 QQ 图。

问题出现在这一点上。R 继续给我很多警告,说 DistFunc 返回的值超出了 'gammafn' 的范围,并且无法绘制任何内容。这很公平,因为我知道该函数包含一个靠近原点的极点。正如您在代码中看到的那样,我尝试规范化 DistFunc 以尝试将其转换为概率分布(我认为这是使用 qqmath 所必需的吗?),但是,这没有帮助。

你们中是否有人知道如何克服这个问题 - 例如,通过使用不需要归一化的不同绘图函数,或者将其转换为伪概率分布,而不会对结果造成太大影响?

我将非常感谢任何有用的输入!

0 投票
1 回答
1495 浏览

r - 在 R-PIRLS step-halvings 中执行 Gamma glmer 时出现错误消息,无法减少 pwrssUpdate 中的偏差

我正在尝试使用 Gamma 错误系列在 R 中执行 glmer。我收到错误消息:“错误:(maxstephalfit) PIRLS step-halvings failed to reduce deviance in pwrssUpdate”

我的响应变量是花量。我的固定效应是基础质量、F1 处理和施肥方法。我的随机效果是嵌套在行内的行和母体 ID。

当我使用整数作为响应(即花号)执行相同的分析时,不会发生此错误。

这是我的数据示例:

这是我正在使用的代码:

(我在 Windows 上使用 r 3.0.3)

0 投票
2 回答
4658 浏览

r - R:使用 glm() 伽马族进行预测

我在 R 中使用带有 link= log 的 glm() 函数来适应我的模型。我在各种网站上读到,fitted() 返回的值我们可以与原始数据与 predict() 进行比较。我在拟合模型时遇到了一些问题。

我不确定预测如何与伽马日志链接一起工作。我想转换预测值,以便可以将其与原始数据进行比较。有人可以帮帮我吗。

0 投票
1 回答
404 浏览

ipad - iPad 显示不同型号之间的伽玛差异

我有一个项目,在 iPad Mini 1 中 UIView 的背景颜色没问题。颜色是 FEEB04。

但在 iPad 2 Air 中测试,伽玛太亮了。

有什么问题?