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