要回答第一个问题,应该注意很多事情。
首先, 单个值 可以表示颜色的唯一方法是使用颜色映射,该映射将标量映射到颜色。但是,麦克斯韦三角形不能减少为单个值。
这并不意味着麦克斯韦三角形不能用作将3个值映射到一种颜色的3D色彩图。其实,这是很自然的事,因为麦克斯韦使用3个值
a,
b以及
c使颜色在RGB坐标来表示
(a,b,c)。唯一缺少的是规范化。
在提供的链接中,麦克斯韦三角形定义为
a+b+c=1。但是,matplotlib接受RGB坐标,因为3的浮点数介于0和1之间,其中白色显然是
1,1,1,而不是
1/3,1/3,1/3。因此,
i,j考虑到这一点,每个将具有三个值,必须将其转换为0和1之间的3个浮点数。
因此,除了标准化除以和以外,
a+b+c=1我们还必须标准化除以每个三项运算的最大值。
最终,可以使用显示最终图像
imshow。
def colorTriangle(r,g,b): image = np.stack([r,g,b],axis=2) return image/image.max(axis=2)[:,:,None]size = 200X,Y = np.meshgrid(np.linspace(0,1,200),np.linspace(0,1,200))u = np.full_like(X,.2)v = Yw = X**2plt.imshow(colorTriangle(v,u,w),origin='lower',extent=(0,1,0,1)) # Note that v is first in order to be represented by red
输出图像如下:
在这里可以清楚地看到,对于x和y较小的值(其中
v和
w为零),颜色为绿色,与
u零不同,并且比
v和大得多
w。对于大x和小y,
w则占主导地位,而颜色的确是蓝色,而当
v占主导地位时(大y和小x),颜色为红色。还显示出,对于所有三个矩阵的相等值,所得颜色为白色。



