0
我有彩虹配色方案的CFD图像,如下所示(1.Original)
我希望python将此配色方案转换为灰度。然而,转换的灰度(image2)不是我想要的(从黑色到白色的线性渐变)(image3)。
谁能告诉我如何将原始图像(图片1)转换为图片3? 如何指定如何将彩虹配色方案转换为灰度
我有彩虹配色方案的CFD图像,如下所示(1.Original)
我希望python将此配色方案转换为灰度。然而,转换的灰度(image2)不是我想要的(从黑色到白色的线性渐变)(image3)。
谁能告诉我如何将原始图像(图片1)转换为图片3? 如何指定如何将彩虹配色方案转换为灰度
正如评论,这是一个不平凡的任务说,因为你必须在原始图像中两个不同的colorscemes:“彩虹”之一,从蓝色变为红色,并且灰阶一个,即行数字是黑色的,图像中的一些区域是灰色的。
下,你知道,从原始图像已经产生的颜色表的假设,你可以做到以下几点,它使用我在这个答案提供的部分代码:How to decode color mapping in matplotlib's Colormap?
在这里,我认为这是喷气颜色表。
import numpy as np
import matplotlib.colors
import matplotlib.pyplot as plt
image = plt.imread("data/jetcolimage.png")
print image.shape, image.max()
r = np.linspace(0,1, 256)
norm = matplotlib.colors.Normalize(0,1)
cmap = plt.cm.jet
mapvals = cmap(norm(r))[:,:3]
def get_value_from_cm(color):
color=matplotlib.colors.to_rgb(color)
#if color is already gray scale, dont change it
if np.std(color) < 0.1:
return np.mean(color)
#otherwise return value from colormap
distance = np.sum((mapvals - color)**2, axis=1)
return r[np.argmin(distance)]
newim = np.zeros_like(image)
for i in range(image.shape[0]):
for j in range(image.shape[1]):
c = image[i,j,:3]
newim[i,j] = get_value_from_cm(c)
fig, (ax,ax2) = plt.subplots(ncols=2)
ax.imshow(image)
ax2.imshow(newim, cmap="gray")
ax.axis("off")
ax2.axis("off")
plt.show()
如可以看到的一个剩下的问题是如何处理它们既不是灰阶,也不是颜色表的一部分的值。这些来自原始图像的抗锯齿,并可能以白色显示。
您可以转换为灰度,然后缩放,使最小值为0,最大值为1(或255,忘记PIL如何存储它) – perigon
这是一个非平凡的任务,因为您有两个不同的colorscemes原始图像:“彩虹”图像从蓝色变为红色,灰度图像变为黑色,图像中的某些区域呈灰色。看起来你想要黑色字符保持黑色,但是原始图像中的灰色区域会发生什么?另外,因为这个问题似乎是解决某些问题的方法,可能没有人想为您编写完整的代码。你有没有尝试过任何东西?问题更多的是黑色与地图其他部分的分离吗? – ImportanceOfBeingErnest