史蒂夫在图像处理与matlab

图像处理概念,算法和matlab

如何计算感知色差

一世写之前对新colorChecker,可以检测R2020B释放中的X-Rite测试图。另一个新的颜色相关功能区域是计算感知颜色差异。有新功能deltaE,它基于L*a*b*颜色空间和CIE76标准计算色差。还有imcolordiff.功能,可以根据CIE94或CIDE2000标准计算颜色差异。

我最近提到了一个关于图像处理工具箱团队的人,我计划写一个关于这些功能的博客文章,他提出了以下问题:哪两种颜色是最远的,感知上讲?我决定用$ \ delta_e $试用。我会以这种方式制定问题:哪两个SRGB颜色在它们之间有最大的$ \ delta_e $?

在2015年的相关帖子中,我展示了如何在L * A * B *空间中绘制SRGB色域面,如下所示:

看这张图,你也许能猜出答案。但是,让我们来解决这个问题。我想做的第一件事是对sRGB空间进行采样。

(r, g, b) = ndgrid (linspace (0, 1100));RGB = [r(:), g(:), b(:)];

接下来,将SRGB颜色转换为实验室。(我将停止键入“*”字符。)

Lab = RGB2LAB(RGB);

现在让我们在实验室值的凸壳上找到颜色。彼此远离的一对颜色必须均在凸壳上。

k = convhull(实验室);hull_colors = lab(唯一(k(:,1)),:);

如果这是一个二维问题,那么我知道可以在$ O(n)$中找到最遥远的点对的算法,其中$ n $是凸船上的点数。我不知道三维中类似的算法,因此我只是通过计算每个颜色对之间的距离来蛮力它。

那么,我们在谈论多少颜色?

大小(hull_colors)
答案:3

有3908种颜色,每个颜色由实验室空间中的3个元素向量表示。颜色差异$ \ delta_e $是实验室空间中两种颜色之间的欧几里德距离。我想计算该集合和其他颜色的每种颜色之间的距离。以下是使用MATLAB算术运算符的隐式扩展行为来做漂亮和紧凑的方法。

C1 =重塑(hull_colors, [], 1, 3);C2 =重塑(hull_colors 1 [], 3);Cdiff = C1 - C2;德=√sum (Cdiff。^ 2,3));大小(德)
ans = 3980 3980

你可以看到是3980x3980矩阵。它包含所有凸壳颜色之间的一对距离。(也可以看看PDIST2.,统计和机器学习工具箱中的功能可以计算成对的矢量距离,更灵活,以及hyp,这是一个MATLAB函数,以避免数值溢出和底流问题的方式计算二元矢量的大小。)

我们来找出矩阵中的最大距离。

[m,n] = find(DE == max(DE(:)))
m = 3883 92 n = 92 3883

这些颜色是什么(在实验室空间中)?

max_colors_lab = hull_colors (m,:)
Max_colors_lab = 32.2970 79.1875 -107.8602 87.7347 -86.1827 83.1793

sRGB空间中的这两种颜色:

max_colors_rgb = lab2rgb(max_colors_lab)
MAX_COLORS_RGB = 0.0000 -0.0000 1.0000 0.0000 1.0000 0.0000

他们只是sRGB的绿色和蓝色初选。

Colorswatches(MAX_COLORS_RGB)轴平等的

Colorswatches.是A.DIPUM3E中提供给您的函数MATLAB颜色的工具文件交换和上GitHub..)

这两种颜色有$ \ delta_e $:

德(m (1) n (1))
ans = 258.6827

delta函数提供了一种更方便的方法来计算$\Delta_E$:

delta ([0 0],[0 0 1])
ans = 258.6827

其他时间,我将写关于提供的其他色差计算imcolordiff.




MATLAB®R2020b发布

|
  • 打印
  • 发送电子邮件

评论

要发表评论,请点击在这里登录您的MathWorks帐户或创建新的。