将RGB热图图像转换为灰度热图的正确方法

时间:2018-12-18 06:41:24

标签: python colors rgb

我正在尝试将RGB热图图像转换为灰度热图图像。首先,我认为这是一个简单的 rgb到灰度转换。但事实并非如此。

例如,蓝色可能代表柔软的东西,而红色可能代表坚硬的东西。

RGB heatmap

使用常用的简单的 rgb到灰度转换方法,我发现红色和蓝色已转换为保存灰色,尽管它们具有非常不同的表示性质。

enter image description here

但是我想要这样的东西,其中蓝色是深灰色,红色是亮灰色

enter image description here

我搜索了很多东西。不幸的是我找不到(或者我听不懂)。阅读有关rgb颜色模型的文章后,我找到了一种生成灰度图像的方法。我的代码是

import colorsys
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg

img = mpimg.imread('input_image/abnormal_hi_res.png')
img = img[ : , : , 0:3] # keep only r, g, b channels  

new_image = np.zeros((img.shape[0], img.shape[1]))

for y_pos in range(img.shape[0]):
    for x_pos in range (img.shape[1]):

        color = img[y_pos, x_pos]
        r,g,b = color
        h, _, _ = colorsys.rgb_to_hls(r, g, b) 
        new_image[y_pos, x_pos] = 1.0 - h

plt.imshow(new_image, cmap='gray')
plt.show()

但是我相信应该有一个由经过验证的数学支持的好方法。
请帮助我找出解决此问题的正确方法。

1 个答案:

答案 0 :(得分:2)

您可以点击这些链接。他们对热图和灰度有一些很好的注释

https://docs.opencv.org/3.1.0/de/d25/imgproc_color_conversions.html https://matplotlib.org/users/colormaps.html

* UPDATE

首先,您需要将BGR图像转换为LUV,然后将其转换为灰度图像。使用opencv。

在opencv中将BGR转换为LUV的代码。

gray = cv2.cvtColor(img, cv2.COLOR_BGR2LUV)

I think it what you are looking for