【问题标题】:Correct way for converting RGB heatmap image to Grayscale heatmap将 RGB 热图图像转换为灰度热图的正确方法
【发布时间】:2023-11-28 13:49:01
【问题描述】:

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

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

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

但我想要这样的蓝色是深灰色,红色是亮灰色

我搜索了很多。不幸的是,我没有找到(或者我无法理解)。在阅读了一些关于 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()

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

【问题讨论】:

  • 看起来你只需要编写一个函数,将三个 rgb 值映射到一个你喜欢的灰度值。
  • 是的。用于将 rgb 映射到灰色的函数。您可以假设将使用常用的热图。 (例如docs.microsoft.com/en-us/bingmaps/v8-web-control/…)。我认为这将减少 rgb 颜色到灰色映射的模糊性。

标签: python colors rgb


【解决方案1】:

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

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

*更新

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

opencv中BGR转LUV的代码

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

I think it what you are looking for

【讨论】:

  • 非常感谢。从你吸引的形象来看,我似乎正在寻找它。但是当我尝试根据您的代码进行复制时,我会得到不同的颜色。你能分享你的完整工作代码吗?