对于一个类,我需要将 RGB 图像转换为 YIQ。
我们被告知可以通过以下方式进行转换:
我开始编写一个带有循环的凌乱代码来进行矩阵乘法,然后我发现了一个函数
skimage.color.yiq2rgb(imYIQ)
当我往里面看他们在做什么时,我看到了以下内容(我正在复制内容,这样会更清楚):
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())
when arr
只是 RGB 图片作为矩阵
我试图理解为什么这有效?他们为什么采用转置矩阵? (.T)
当arr
形状与 yiq_from_rgb 不同?
在包含转换矩阵的参考图中,转换矩阵位于 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)
where (y1y,y1i,y1q)
是舍入/取整后生成的 YIQ 图像中第一个像素的值int
。我们对整个 RGB 图像中的所有像素进行相同类型的乘法,并获得所需的 YIQ 图像。
现在,因为他们使用了整个实现np.dot(arr, yiq_from_rgb.T)
,为了正确计算出权重,需要转置变换矩阵。和copy
只是为了这种转换而有一个专用的转置变换矩阵。
另外,请注意,与您的数字相反,np.dot()
RGB 数组位于变换矩阵的左侧。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)