14 位 RGB 到 YCrCb
14 Bit RGB to YCrCb
我有一张 14 位图像,我想将其转换为 YCrCb 颜色 space。据我所知,转换是为 8 位图像编写的。例如,当我使用 matlab 函数 rgb2ycrcb 并将其转换回 rgb 时,它将全是白色。不丢失任何信息对我来说非常重要。我想要做的是将亮度与色度分开并进行一些处理并将其转换回 RGB。
从 RGB 颜色转换数量的 YCbCr 标准 space 是专门为 8 位颜色通道图像设计的。调整比例因子和常数,以便输入是 24 位 RGB 图像(8 位每个通道。顺便说一句,你的符号很混乱。通常你使用 xx 位 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。假设 Bout
是您在 YCbCr 颜色 space 中处理后的输出图像,请执行:
C = round((2^14 - 1)*ycbcr2rgb(Bout));
我们四舍五入,因为这很可能会提供浮点值,并且您的图像颜色平面需要是无符号整数。
我有一张 14 位图像,我想将其转换为 YCrCb 颜色 space。据我所知,转换是为 8 位图像编写的。例如,当我使用 matlab 函数 rgb2ycrcb 并将其转换回 rgb 时,它将全是白色。不丢失任何信息对我来说非常重要。我想要做的是将亮度与色度分开并进行一些处理并将其转换回 RGB。
从 RGB 颜色转换数量的 YCbCr 标准 space 是专门为 8 位颜色通道图像设计的。调整比例因子和常数,以便输入是 24 位 RGB 图像(8 位每个通道。顺便说一句,你的符号很混乱。通常你使用 xx 位 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。假设 Bout
是您在 YCbCr 颜色 space 中处理后的输出图像,请执行:
C = round((2^14 - 1)*ycbcr2rgb(Bout));
我们四舍五入,因为这很可能会提供浮点值,并且您的图像颜色平面需要是无符号整数。