我有一个14位图像,我想转换为YCrCb色彩空间。据我所知,转换是针对8位图像编写的。例如,当我使用matlab函数rgb2ycrcb并将其转换回rgb时,它将是所有白人。对我来说,不要丢失任何信息是非常重要的。我想要做的是将亮度与色度分开并进行一些处理并将其转换回RGB。
答案 0 :(得分:2)
用于转换RGB色彩空间量的YCbCr标准是专为8位色彩通道图像设计的。缩放因子和常量是定制的,因此输入是一个24位RGB图像(每个通道 8位。顺便说一下,你的符号很混乱。通常你使用 xx-bit RGB 来表示表示图像所需的总数总数。
我可以做的一个建议是独立重新调整您的频道,以便它们从所有频道的[0-1]
开始。 rgb2ycbcr
可以接受浮点输入,只要它们在[0-1]
范围内即可。从您的上下文来看,您有14位代表每个颜色通道。因此,您可以简单地执行此操作,因为您的图片存储在A
中,输出将存储在B
中:
B = rgb2ycbcr(double(A) / (2^14 - 1));
然后,您可以使用rgb2ycbcr
的输出处理色度和亮度分量。请记住,组件也将在[0-1]
之间进行标准化。进行处理,然后使用ycbcr2rgb
转换回来,然后通过2^14 - 1
重新缩放输出,使您的图像恢复为每通道14位RGB。假设在YCbCr颜色空间中处理后Bout
是输出图像,请执行以下操作:
C = round((2^14 - 1)*ycbcr2rgb(Bout));
我们舍入,因为这很可能提供浮点值,而您的图像颜色平面需要是无符号整数。