numpy的转化RGB图像YIQ色彩空间

问题描述:

对于I类需要改造RGB图像YIQ。 我们已被告知,该转换可以通过进行:numpy的转化RGB图像YIQ色彩空间

transforming rgb to 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()) 

arr仅仅是RGB PIC作为基质

我试图理解为什么这个工程?他们为什么要采用转置矩阵? (.T) 当arr形状与yiq_from_rgb不同时,点积如何工作?

+0

从[该文档(https://docs.scipy.org/doc/numpy/reference/generated/numpy.dot.html#numpy.dot) - '对于2 d阵列它等价于矩阵乘法'。 – wwii

+0

也许它需要转置,因为图像数组* *转置*从所需的转换规格? – wwii

+0

[坐标约定](http://scikit-image.org/docs/dev/user_guide/numpy_images.html#coordinate-conventions) - 图像数组的尺寸是(row,col,ch)。所以一个5x10的图像将具有(10,5,3)的形状;红色通道是'arr [:,:,0]',蓝色是'arr [:,:,1]'... – wwii

在包含用于转换的矩阵的参考图中,变换矩阵是在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) 

其中(y1y,y1i,y1q)是在取整/取得int后,生成的YIQ图像中第一个像素的值。我们对整个RGB图像中的所有像素进行相同的乘法运算,并获得所需的YIQ图像。

现在,因为它们在使用np.dot(arr, yiq_from_rgb.T),这整个实施有加权计算出正确的变换矩阵需要被调换。并且copy只是为了这个转换的目的而具有专门的转置转换矩阵。

另外,注意违背你的身材,在np.dot() RGB阵列是变换矩阵的左侧。

+0

我已经看到一些*表示*结果也需要除以255 。 – wwii