Правильный способ преобразования изображения тепловой карты RGB в тепловую карту Grayscale - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь преобразовать изображение тепловой карты 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 голосов
/ 18 декабря 2018

Вы можете перейти по этим ссылкам.У них есть хорошие заметки о тепловых картах и ​​градациях серого

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

* ОБНОВЛЕНИЕ

Во-первых, вам нужно преобразовать изображение BGR в LUVзатем преобразовать его в изображение в градациях серого.Используйте opencv.

Код для преобразования BGR в LUV в opencv.

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

Я думаю, это то, что вы ищете

...