如果我们将色调移动 2*pi/3,R、G、B 直方图会发生什么变化?

If we shift the hue by 2*pi/3, what will the R, G, B, histograms change?

如果我们将色调移动 2*pi/3,R、G、B、直方图会发生什么变化?

我该如何测试?我可以访问 photoshop,那么有没有办法测试它并找到答案?

我认为对此没有通用的答案,因为结果取决于图像颜色,而不仅仅是 R,G,B 直方图。您需要:

  1. 计算直方图
  2. 将 RGB 转换为 HSV
  3. 添加色调并将其限制在angular区间
  4. 转换回 RGB
  5. 计算直方图

我不使用 photoshop,但我认为 #1,#2,#4,#5 应该在那里。 #3 也应该在那里(在一些操纵亮度、伽玛等的过滤器中)但很难说添加到色调是否会被限制角度限制或者它会作为周期性处理价值。在第一种情况下,您需要通过以下方式更正结果:

  1. 计算直方图
  2. 转换为 HSV
  3. 克隆结果A到第二张图片B
  4. 添加A.hue+=pi/3和**B.hue-=2*pi/3

    A 保留未固定的颜色,BA 中固定的颜色转移到正确的色调位置。

  5. 在 A 中用 hue==pi2 和一些指定的颜色重新着色所有像素

    pi2 应该是您的工具将色调限制在 pi2 以上的值,因此它可以为零、pi2 或比 pi2 小一级。这将允许稍后忽略限制值。

  6. 在 B 中用一些指定的颜色重新着色 hue==0 的所有像素
  7. 将 A、B 转换为 RGB
  8. 计算忽略指定颜色的直方图
  9. 合并 A、B 直方图

    只需将图形值相加即可。

现在您可以比较直方图来评估一些示例图像的变化。

无论如何,您可以使用任何编程语言来完成所有这些工作。例如,大多数所需的操作都存在于大多数图像处理和计算机视觉库中,例如 OpenCV 并且添加到色调只是 2 个嵌套 for 循环加法和单个 if 声明如:

for (y=0;y<ys;y++)
 for (x=0;x<xs;x++)
  {
  pixel[y][x].h+=pi2/3.0;
  if (pixel[y][x].h>=pi2)
   pixel[y][x].h-=pi2;
  }

我使用的最粗糙的 HSV 像素格式不使用浮点值,因此色调可以用 8 位无符号整数表示,在这种情况下,代码如下所示:

for (y=0;y<ys;y++)
 for (x=0;x<xs;x++)
  pixel[y][x].h=(pixel[y][x].h+(256/3))&255;

如果您需要实施 RGB/HSV 转换,请看这里:

我想这可能会让您感兴趣:

从数学的角度来看 2×pi/3 pi = 3.14 你有 2×pi 是圆的 "scope"。 除以 3 表示您有三分之一的圆或简单的 120°

根据HSV转换成RGB的公式(部分):

将 HUE 移动 120° 将交换通道直方图:

  • +120° : R-->G-->B-->R
  • -120° : B<--R<--G<--B

要在 GIMP 中对此进行测试,- 在 Colors \ Info \ Histogram 中打开图像直方图。
选择红色、绿色或蓝色通道以查看其直方图,然后打开对话框
Colors \ Hue-Saturation 然后将色相调整 +- 120 度并在直方图中查看实时效果 window.