模拟PhotoShop的"颜色范围"算法

k.p*_*ell 11 photoshop algorithm reverse-engineering colors image-processing

我正在尝试使用在服务器上完成的自动化过程替换在PhotoShop中完成的手动过程.目前在PhotoShop中,"颜色范围"工具用于使用"模糊"因子选择一系列颜色,并根据过程的部分从黑色或白色开始.

我的初始方法包括在L*a*b颜色空间中使用发光阈值以及候选颜色和黑/白之间的DE94.在这两种情况下,我都选择了不应该选择的颜色和/或没有选择应该选择的颜色.

我的预感是我应该使用锥体而不是球体来进行选择.

任何人都可以了解PhotoShop正在做什么,以及我是否正朝着正确的方向前进?另外,如果有一个库可以做到这一点很棒我现在用C写的.

Igo*_*evo 5

根据我在Photoshop中看到的,该算法可能类似于以下内容:

  1. 定义一个计算两种颜色的接近度的函数:例如,在颜色空间中使用欧几里德距离 - 即,使用欧几里德距离公式计算 RGB空间中两个像素的颜色之间的距离.
  2. 接下来,通过使用诸如高斯函数的fallof函数来调整每个像素的强度.您可能需要调整一些参数.为了澄清:您计算RGB空间中两个像素的距离(不是2D像素坐标中的距离),然后将其输入到衰减函数中,该函数将提供0.0到1.0之间的结果.将当前像素的所有颜色分量与其衰减函数的结果相乘.对图像的每个像素执行此操作.
  3. 如果要添加效果的范围参数,只需再次对每个像素使用相同的衰减函数,但这次将其选择像素与像素的2D空间中的当前像素之间的欧几里德距离(像素之间的距离)图像上的坐标).

如果您只想选择某些像素,则可以将衰减值存储double在范围为0.0到1.0 的s 矩阵中,而不是直接在图像中的像素处应用效果.然后,选择一个阈值,在该阈值之上,您将选择给定的像素.

例如,如果坐标(x,y)处的像素的步骤2产生0.8并且步骤3产生0.5,则具有坐标x和y的矩阵元素的值应该是0.8*0.5=0.4.如果您选择的选择阈值低于0.4,则选择像素(x,y),否则,您将不会.


Dav*_*sek 2

我有根据的猜测是,它使用的是 HSL 颜色空间,而模糊度是一个参数,用于在亮度窗口中选择具有特定色调和饱和度的所有颜色(基于此)。

现在,选择可能只是进行阈值计算,查找该窗口内的所有内容(这将是色彩空间中非常小的区域)。然而,它也可能正在进行统计距离计算。如果颜色样本实际上是颜色周围窗口的小样本,您可以计算颜色方差并使用马哈拉诺比斯距离计算和阈值之类的东西。

再说一次,这只是猜测,但也许它会帮助你的思考过程。

最后,虽然这个库没有直接实现这样的东西,但OpenCV有许多图像处理工具,可以使实现更容易。