Python RGB到灰度转换(ExGG)矩阵运算



我正在尝试编写一个函数,用于将RGB转换为灰度图像。使用ExGG(绿色提取(方法计算灰度图像中的值。数值计算如下:

ExGG = (2 * g - b - r) * g

何处

r = R' / (R' + G' + B'),
g = G' / (R' + G' + B'),
b = B' / (R' + G' + B')

并且R'、G'和B'是范围[0,1]中RGB图像的归一化值。

我已经设法想出了以下像素的解决方案:

for i in range(rows):
for j in range(cols):
(R, G, B) = image[i][j]
RGB_sum = (R + G + B)
r = R / RGB_sum
g = G / RGB_sum
b = B / RGB_sum

# ExGG
output[i][j] = ((2 * g) - b - r) * g

其中,图像是标准化的RGB图像(dtype是float64(。

这种逐元素计算提供了正确的结果,但似乎很慢,因此我想更新此函数以执行矩阵运算,而不是逐元素方法。此外,如果有人知道如何更快地执行这些操作,请随意分享。

这应该可以工作。

import numpy as np
img = np.random.rand(4,4,3)
rgb_sum = np.sum(img, axis = 2)
img_rgb = img / rgb_sum[:, :, None]
r = img_rgb[:, :, 0]
g = img_rgb[:, :, 1]
b = img_rgb[:, :, 2]
output = ((2 * g) - b - r) * g

最新更新