Как преобразовать вектор (k1, k2) в RGBA (r, g, b, a) по объему?

У меня есть трехмерный массив, представляющий объем. Каждый воксель сохраняет вектор (k1, k2) в качестве своей локальной кривизны.

Теперь мне нужно визуализировать этот объем по цвету (как на картинке ниже). Поэтому мне нужно преобразовать его в объем RGBA. Есть ли алгоритм реализации передаточной функции от (k1, k2) к (r, g, b, a)? Спасибо!

введите здесь описание изображения


person Raykie    schedule 12.05.2021    source источник
comment
дубликат stackoverflow.com/questions/28898346/   -  person yann ziselman    schedule 12.05.2021


Ответы (1)


Я в основном скопировал решение для
Visualize Optical Flow с цветовой моделью
Код из руководства по OpenCV:

import cv2
import numpy as np


# Use Hue, Saturation, Value colour model 
hsv = np.zeros(im1.shape, dtype=np.uint8)
hsv[..., 1] = 255

mag, ang = cv2.cartToPolar(k1, k2)
hsv[..., 0] = ang * 180 / np.pi / 2
hsv[..., 2] = cv2.normalize(mag, None, 0, 255, cv2.NORM_MINMAX)
bgr = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
cv2.imshow("colored flow", bgr)
cv2.waitKey(0)
cv2.destroyAllWindows()

Единственное, чего не хватает, это альфа-канал, который вы не указали, как вы можете его вычислить. Из того, что я могу понять из изображения вашего цветового пространства, вы можете использовать величину градиента в качестве значения альфы. Изменение, которое вам нужно сделать для этого, заключается в добавлении величины в качестве четвертого канала в изображении BGR.

person yann ziselman    schedule 12.05.2021