2

在 Photoshop 中,我可以调整图像的整体色调,以便黑色/白色/灰色水平保持不受影响,而颜色色调分别变为 -100 左右(附有比例图片)。是否有 MATLAB 或 PsychToolbox 函数可以做到这一点?

例如,像这样的一些功能newImage = hueadjust(Image, -100)或像这样简单的东西。

我有很多图像,我确信有一种方法可以通过 Photoshop 批量处理我的所有图像,因此对它们都应用相同的色调比例,但我想知道这是否可以通过代码相对容易地完成,因为我缺乏编码经验。

Adobe Photoshop 的色调调整

4

1 回答 1

4

是的,这很简单。只需将图像转换为 HSV,获取色调通道并添加或减去模 360 度,然后将图像转换回来。请注意,调整色调不会影响图像中看到的黑色/灰色/白色,这实际上是您想要的。HSV 颜色空间中的饱和度和值分量为我们做到了这一点。每个像素的色调分量的加法和/或减法是 Photoshop(和其他类似的图形编辑器,如 GIMP)在后台执行的操作。

使用该功能rgb2hsv及其等效对应物hsv2rgb。然而,每个转换通道的动态范围是从[0,1]但通常色调表示在 0 到 360 度之间。因此,将色调通道乘以 360,进行取模,然后在完成后除以 360。

如果您想创建一个hueadjust在帖子中调用的函数,只需执行以下操作:

function newImage = hueadjust(img, hAdjust)
    hsv = rgb2hsv(img);
    hue = 360*hsv(:,:,1);
    hsv(:,:,1) = (mod(hue + hAdjust, 360)) / 360;
    newImage = hsv2rgb(hsv);
end

第一行代码将图像转换为 HSV。下一行代码将色调通道复制到一个名为hue并将每个值乘以 360 的变量中。然后我们通过获取原始图像的每个色调值(存储在 中hue)将每个色调添加到原始图像的色调通道中hAdjust这是所需的度数偏移,并确保如果我们超过 360 度(这就是正在做的事情),我们会回绕回 0 mod,然后将结果除以 360 以回到[0,1]预期的动态范围。这个修改后的图像现在被转换回 RGB 并发送到输出。

请注意,double由于调用hsv2rgb. 每个通道的动态范围仍在范围内,[0,1]因此您可以轻松地将这些图像写入文件而不会出现问题。如果您出于某种原因想要返回图像本身的原始类型,您可以使用im2uint8图像处理工具箱中的函数将输入转换回其无符号 8 位整数形式。实践中看到的大多数图像都采用这个标准。

这是一个快速示例,了解此功能的工作原理。为了完整起见,让我们看一下色相圈的样子:

资料来源:Lode 的计算机图形教程

我们可以看到红色的色调约为 0 度,而洋红色的色调约为 315 度或 -45 度。让我们也使用onions.pngMATLAB 中的图像处理工具箱附带的图像。它看起来像这样:

在此处输入图像描述

让我们也先阅读这张图片。上面的图片可以使用图片引用的 URL 直接从 Internet 读取:

im = imread('http://i.stack.imgur.com/BULoQ.png');

IPT的imread功能的好处是您可以直接从 Internet 读取图像。我想变换或移动色调,使红色色调为洋红色,这意味着将每个色调中的所有色调移动-45度。所以像这样运行函数:

out = hueadjust(im, -45);

用 显示图像imshow(out),我们得到:

在此处输入图像描述

请注意,转换后的其余色调是有意义的。果岭是一种相当暗淡的绿色,可能徘徊在 60 度左右的色调左右。减去 45 会将其推为红色,您可以在生成的图像中看到它。黄色也可以这样说,因为它们徘徊在大约 30 - 40 度的色调。另请注意,白色最有可能受到轻微影响,因为在这些白色区域中看到的颜色不是预期的纯白色(也不是 100% 饱和度)。

于 2016-05-09T21:05:15.703 回答