matlab - 14 位 RGB 转 YCrCb

标签 matlab image-processing color-space

我有一个 14 位图像,我想将其转换为 YCrCb 颜色空间。据我所知,转换是为 8 位图像编写的。例如,当我使用 matlab 函数 rgb2ycrcb 并将其转换回 rgb 时,它将全是白色。对我来说,不要丢失任何信息非常重要。我想要做的是将亮度与色度分开并进行一些处理并将其转换回 RGB。

最佳答案

用于从 RGB 颜色空间转换数量的 YCbCr 标准是专门为 8 位颜色 channel 图像设计的。缩放因子和常量经过定制,以便输入为 24 位 RGB 图像(每个 channel 8 位。顺便说一句,您的符号很困惑。通常您使用 xx 位 RGB 来表示表示图像所需的总共位数)。

我可以提出的一个建议是独立地重新调整您的 channel ,以便所有 channel 的 channel 都从 [0-1] 开始。 rgb2ycbcr 可以接受浮点输入,只要它们在 [0-1] 范围内即可。从您的上下文来看,您有 14 位代表每个颜色 channel 。因此,您可以简单地执行此操作,假设您的图像存储在 A 中,并且输出将存储在 B 中:

B = rgb2ycbcr(double(A) / (2^14 - 1));

然后,您可以使用 rgb2ycbcr 的输出来处理色度和亮度分量。请记住,组件也将在 [0-1] 之间标准化。进行处理,然后使用ycbcr2rgb转换回来,然后按2^14 - 1重新缩放输出,将图像恢复为14位每个 channel RGB。假设 Bout 是在 YCbCr 色彩空间中处理后的输出图像,请执行以下操作:

C = round((2^14 - 1)*ycbcr2rgb(Bout));

我们四舍五入,因为这很可能提供浮点值,并且您的图像颜色平面需要是无符号整数。

关于matlab - 14 位 RGB 转 YCrCb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27986373/

相关文章:

matlab - MATLAB 中二元分类器的 ROC 曲线

arrays - 如何从矩阵中删除重复行

arrays - 从列中分块对角矩阵

matlab - 在 Matlab 中绘制温度数据与传感器位置

image-processing - 如何从直方图中获取阈值?

python - OpenCV 错误:(-215:断言失败)函数 'CvtHelper' 中的 VScn::contains(scn) && VDcn::contains(dcn) && VDepth::contains(depth)

OpenCV "Blured Corners"检测器 (C++)

c++ - 从 2D 点阵列创建图像

r - 在颜色空间中的scale_fill/color中粘贴名称不能循环工作

algorithm - 生成独特的颜色