我正在使用Python进行JPEG压缩实验。我加载一个TIFF图像并将其存储为numpy uint8 RGB数组。我这样做是为了进行颜色映射。
我进行了简单的RGB到YCbCr转换,然后进行了反向转换。
我进行了色彩空间转换后得到了两张输出图片,一张是YCbCr格式的,另一张是RGB格式的。
看起来我的颜色转换出了问题,但我无法确定具体哪里出错了。我使用了维基百科提供的JPEG色彩空间转换方法。
谢谢您的帮助。
def rgb2ycbcr(im):
cbcr = np.empty_like(im)
r = im[:,:,0]
g = im[:,:,1]
b = im[:,:,2]
# Y
cbcr[:,:,0] = .299 * r + .587 * g + .114 * b
# Cb
cbcr[:,:,1] = 128 - .169 * r - .331 * g + .5 * b
# Cr
cbcr[:,:,2] = 128 + .5 * r - .419 * g - .081 * b
return np.uint8(cbcr)
def ycbcr2rgb(im):
rgb = np.empty_like(im)
y = im[:,:,0]
cb = im[:,:,1] - 128
cr = im[:,:,2] - 128
# R
rgb[:,:,0] = y + 1.402 * cr
# G
rgb[:,:,1] = y - .34414 * cb - .71414 * cr
# B
rgb[:,:,2] = y + 1.772 * cb
return np.uint8(rgb)
我进行了简单的RGB到YCbCr转换,然后进行了反向转换。
img = rgb2ycbcr(img)
imshow(img)
img = ycbcr2rgb(img)
imshow(img)
我进行了色彩空间转换后得到了两张输出图片,一张是YCbCr格式的,另一张是RGB格式的。
![YCbCr](https://istack.dev59.com/Soxi9.webp)
![RGB](https://istack.dev59.com/GR7KQ.webp)