numpy将RGB图像转换为YIQ色彩空间

Dvi*_*zko 5 python numpy image-processing matrix multidimensional-array

对于一堂课,我需要将RGB图像转换为YIQ。我们被告知可以通过以下方式进行转换:

将RGB转换为yiq

我开始用循环编写一个凌乱的代码以进行矩阵乘法,然后发现一个函数

 skimage.color.yiq2rgb(imYIQ)
Run Code Online (Sandbox Code Playgroud)

当我向内看他们在做什么时,我看到了以下内容(我正在复制内容,这样会更清楚):

yiq_from_rgb = yiq_from_rgb = np.array([[0.299,      0.587,        0.114],
                                 [0.59590059, -0.27455667, -0.32134392],
                                 [0.21153661, -0.52273617, 0.31119955]])
return np.dot(arr, yiq_from_rgb.T.copy())
Run Code Online (Sandbox Code Playgroud)

什么时候arr只是RGB图片作为矩阵

我想了解为什么这可行?他们为什么要使用转置矩阵?(.T)当arr形状与yiq_from_rgb 不同时,点积又如何工作?

kma*_*o23 5

在包含转换矩阵的参考图中,转换矩阵位于RGB通道的左侧。因此,对于RGB图像中的第一个像素,我们分别将其称为(p1r, p1g, p1b)R,G,B通道,我们需要将其与变换矩阵相乘并将结果相加,如下所示:

y1y = (0.299*p1r + 0.587*p1g + 0.114*p1b)
y1i = (0.596*p1r - 0.275*p1g - 0.321*p1b)
y1q = (0.212*p1r - 0.523*p1g + 0.311*p1b)
Run Code Online (Sandbox Code Playgroud)

在(y1y,y1i,y1q)四舍五入后,是所得YIQ图像中第一个像素的值int。我们对整个RGB图像中的所有像素执行相同类型的乘法运算,并获得所需的YIQ图像。

现在,由于他们使用np.dot(arr, yiq_from_rgb.T)来完成整个实现,因此要正确计算权重,就需要转换矩阵。并且copy仅出于此转换的目的而具有专用的转置转换矩阵。

另外,请注意,与您的图相反,np.dot()RGB数组在转换矩阵的左侧。