我正在尝试编写一个函数,用于将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