问题标签 [cielab]

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 投票
1 回答
1159 浏览

c++ - valgrind:opencv 中的 cvCvtColor 错误

这是我非常简单的代码:

该程序仅加载 2 张图像,并将它们转换为 CIELab 空间。但是,Valgrind会引发以下错误:

进一步检查-g --show-reachable=yes给了我泄漏的详细信息(块 1-4 的报告与块 5 相同,所以我不在这里发布):

由于内存泄漏“仍然可以到达”,我想我可以放心地忽略它。但我关心的是 903892 错误的错误摘要。我重新valgrind运行--track-origins=yes

(上下文 2 和 3 的报告与上下文 1 相同,因此我不在此处发布)。错误似乎来自我的代码中的第 12 行和第 14 行。怎么了?还是我在这里遗漏了什么?

旁注:如果我扫描更多图像,泄漏内存的报告是相同的,但错误Error Summary数量线性增加。我的程序segmentation fault在扫描约 3000 张图像后运行。

0 投票
2 回答
2426 浏览

c++ - Opencv L*a*b* 到 RGB 的转换产生灰度输出

我被分配使用 OpenCV 将图片从 L a b* 颜色空间更改为 RGB。为此,我使用了此处此处提供的信息。

编辑:被分配在没有 OpenCV 附带的 cvtColor 函数的情况下执行此操作。

还尝试直接从这里实现公式。我仍然是图像处理的新手,不知道我的结果是否有效。我可以看到每个通道,RGB 图像的参数在 0 到 255 之间,但是当合并通道时,我获得了灰度图像。我希望在从 L a b* 转换为 RGB 后,我会得到原始的彩色图像。这正常吗?

我做对了还是我误解了信息?

0 投票
1 回答
214 浏览

rgb - 如何确定数据的色彩空间 (RGB) 配置文件?

我有一个标准的 jpeg 图像,我在一些商业软件中使用它来为其他数据着色(通过将图像的颜色映射到数据上)。然后我将彩色数据从这个软件导出到一个 XYRGB ascii 文件,即我将数据信息存储在每行的前两列中,然后将三个 RGB 颜色存储在最后三列中。

由于我需要将颜色转换为 CIELab 或 CIELuv,看来我需要知道我的 RGB 值在哪个确切的颜色空间(RGB、sRGB、伽玛、白点 - 你可以命名)。但问题是:我怎样才能找出? 还是我可以假设某个配置文件是一个很好的近似值?

(备注:我使用的商业软件的公司无法告诉我任何细节......)

0 投票
1 回答
248 浏览

colors - 为什么 Delta CMC 算法(用于计算色差)不是对称的?

我正在执行此处此处描述的 Delta CMC 算法(CIELAB 空间中的色差)。

我很惊讶地看到计算第一种颜色而不是第二种颜色的色调。这很可能会使算法不对称。这是正确的吗?

平均两种颜色的色调并使用它会更好吗?

0 投票
1 回答
2490 浏览

c++ - 访问多通道 OpenCV Mat 中的元素

这是我在 stackoverflow 上的第一篇文章,所以我希望一切都正确,如果我不这样做,对不起。

我正在为将单个 RGB 值转换为 CIE L*a*b* 颜色空间的函数编写代码。该函数应该采用 3 个浮点数数组(RGB 通道的值在 [0-255] 中),并在输出中给出一个具有 L*a*b* 值的 3 个浮点数数组。为此,我使用了cvtColorOpenCV 提供的功能。

正如openCV 网站上所建议的那样,我正在cvtColor由 contructor 创建 Mat 结构(需要)。

我的问题是,尽管我认为代码运行正常并执行了转换,但我无法取回 Mat 结构中包含的值。

这是我的代码:

如您所见,我通过at函数从 Mat 结构中提取所有通道,然后从向量中单独访问它们。这被提议作为许多地方(其中之一)的解决方案。

但是如果我运行这段代码(输入向量是 {123,10,200}),cout我正确地得到了 Mat 结构的输出(从中我得到算法正确转换),但是你可以看到提取的值是错误的:

任何人都知道我做错了什么?

非常感谢您的帮助!

0 投票
2 回答
265 浏览

image-processing - 如何辨别 CIE-L*a*b* 颜色空间中哪种颜色“较低”和/或“较高”以进行有序抖动?

我已经实现了几个函数来将 sRGB 转换为CIE-L*a*b*颜色空间。

现在,我想用它来抖动,但我不确定如何准确辨别哪种颜色是“较低”颜色,哪种颜色是“较高”颜色。

当在一维色彩空间(灰度)中抖动时,事情很容易。当使用误差扩散抖动时,我会从我的调色板中计算最接近的灰度值,并将误差添加到周围的像素中,具体取决于我使用的抖动矩阵类型(例如 Floyd-Steinberg)。因为这是一维的,所以很简单,只有这一个值。但是现在我有了这个三维色彩空间,我应该将误差单独添加到每个坐标吗?
(在这一点上,这是唯一对我有意义的方法。)

当使用有序抖动矩阵进行抖动时,事情会变得更加复杂。有序抖动矩阵定义了一个阈值。为此,关于我即将抖动的当前像素,我需要知道托盘的“较低”像素值和“较高”像素值。现在,我计算到两个像素的距离,抖动矩阵的阈值决定在相邻像素之间的哪个值之后,像素要么抖动到较低的像素,要么抖动到较高的像素。
(通过使用为我的托盘中的灰度颜色值数量合理选择的矩阵,实际实现当然比计算它更优化。此外,诸如选择具有均匀间隔颜色值的托盘之类的事情等)
这 - 再次 - 在一维色彩空间中非常容易。但在 CIE-L*a*b* 中,没有“更高”或“更低”的值。

仅使用亮度来应用阈值矩阵,似乎很不正确,我的托盘中可能有两种亮度相同的颜色,然后呢?

0 投票
0 回答
331 浏览

java - Android 图像比较

我正在开发一个Android应用程序,它应该进行比较两个图像的操作。在比较之前,我应该将图像从RGB转换为CIELAB,然后比较从每个图像中获得的值。如果值相同->图像是一样的,如果不是图像是不一样的。你能帮我一些提示吗?(如何将位图图像转换为 CIELAB 或类似的东西)

0 投票
0 回答
92 浏览

rgb - 如何反转密度分布?

我正在使用 RGB 立方体,试图创建一个具有强烈不同颜色的最大调色板。因此,我将 RGB 立方体切片垂直于黑白顶点之间的对角线并应用 CIELab 颜色距离公式。它在最饱和颜色(即最有趣的颜色)所在的边缘非常有效,但是当您靠近不太有趣的颜色所在的中心时,密度会急剧增加,而不是像应该的那样减少。我希望密度在中心变为 0。

我不确定从哪里开始反转密度分布以使中心具有最小密度而不是最大密度?我唯一的想法是创建自己的概率场并使用蒙特卡洛方法。我知道如何在一维中做到这一点,但不是二维。

0 投票
1 回答
42 浏览

colors - 无法检测给定颜色和距离的相同像素

考虑两个点 p0 和 p1 在欧几里德距离 d1 处,给定两个像素/体素的 Lab 颜色值为 (L0,a0,b0) 和 (L1,a1,b1)。现在,如果我更改包含给定两个点的刚性对象的位置,那么就不可能在相同的距离(mm)和相同的 Lab 颜色值处检测到这些点。我正在使用 pcl 来完成 3d 对象识别的计算机视觉任务。在这里,当我尝试查找先前在距离 d1 处检测到的两个点及其颜色时,如果我更改给定两个点的对象的位置和方向,则未检测到,这里分析了体素。对象未定向,我正在使用的 kinect 相机看不到相同的两个点。

以上是我的 c++ 程序的主要部分。在这里,此步骤分析当前对象,其坐标位于 a、b、c 向量中,颜色值位于 ac、bc、cc 向量中。这里 arri, arr1.. 是包含来自 privious 对象的点的索引的映射,这里每当检测到给定的点模式 p0,p1,p2,p3,p4 时,它就会从循环中出来。当我运行它时,它没有按预期正常工作。我怀疑当对象的位置和方向发生变化时,给定 4 个体素的 a、b 颜色值也会发生变化(来自实验室颜色),并且它的(给定两个/3/n 个体素)距离也不知何故与以前不一样保存类似于物理学中的测量问题。所以我在这里的主要困惑是,当像素/体素的位置改变时,a 和 b 的值会改变吗?我没有使用 L 值,因为亮度值会随着环境而变化。

0 投票
0 回答
62 浏览

colors - 非归一化颜色转换 Yxy 颜色空间

我正在做一个涉及颜色的心理学实验。

在开始分析之前,我必须将 Yxy 颜色空间中的三种颜色转换为 CIELAB。我使用了彩色光谱仪枪,但我在 Yxy 空间中的亮度是非归一化的(在 1000 秒内,直到无穷大。)我需要让它们成为 1-100 之间的归一化亮度,这样我才能使用我找到的转换器。

如果有人可以帮助我规范化我的 L 值,或者将我的 Yxy 值完全转换为 CIELAB,那就太好了!

我在 (Y, x, y) 中的意思是:

Peach: (1218.333, 0.362, 0.341)

Yellow: (2105, 0.393, 0.424)

Grue: (340.333, 0.262, 0.357)