无损灰度 JPEG "color" 反转?
Lossless grayscale JPEG "color" inversion?
Imagemagick 可以像这样反转 JPEG 的颜色:
mogrify -negate image.jpg
然而,这并不是无损的。我的直觉告诉我,颜色反转应该可以无损方式实现,至少对于灰度图像是这样,但我对 JPEG 几乎一无所知。因此我的问题是:
- 理论上是否可以进行无损 JPEG 灰度反转?
- 如果可以,libjpeg 或其他任何软件都可以做到吗?
它不是无损的,因为 JPEG 中使用的 RGB 和 YCbCr 色彩空间的色域之间没有 1:1 匹配。如果您从 YCbCR 内的 RGB 值开始并翻转它,您可能会得到 YCbCr 色彩空间范围之外的值,最终会被限制。
JPEG 将图像编码为跨 MCU 的一系列熵编码增量(最小编码单元 - 8x8 DCT 值块)和每个 MCU 内的熵编码量化 DCT 系数。做一些像反转像素值(即使是灰度)的事情将涉及解码熵编码位,修改值和 re-encoding 它们,因为你不能 "invert" 熵编码 DCT 值。每个值的熵编码长度没有一对一匹配,因为这些位是根据统计概率和量化值的 magnitude/sign 编码的。另一个问题是编码的 DCT 值存在于频域中。我不是数学家,所以我不能确定是否有一种简单的方法可以在频域中反转空间域值,但我认为充其量它真的很复杂并且可能会干扰值的量化一个简单的解决方案。您可以在 JPEG 文件中无损执行的操作包括旋转、裁剪和鲜为人知的操作,例如从彩色图像中提取灰度图像。如果不对 MCU 进行解码和重新编码,则无法修改单个像素值,这会导致 "loss" 的 JPEG 质量。
Imagemagick 可以像这样反转 JPEG 的颜色:
mogrify -negate image.jpg
然而,这并不是无损的。我的直觉告诉我,颜色反转应该可以无损方式实现,至少对于灰度图像是这样,但我对 JPEG 几乎一无所知。因此我的问题是:
- 理论上是否可以进行无损 JPEG 灰度反转?
- 如果可以,libjpeg 或其他任何软件都可以做到吗?
它不是无损的,因为 JPEG 中使用的 RGB 和 YCbCr 色彩空间的色域之间没有 1:1 匹配。如果您从 YCbCR 内的 RGB 值开始并翻转它,您可能会得到 YCbCr 色彩空间范围之外的值,最终会被限制。
JPEG 将图像编码为跨 MCU 的一系列熵编码增量(最小编码单元 - 8x8 DCT 值块)和每个 MCU 内的熵编码量化 DCT 系数。做一些像反转像素值(即使是灰度)的事情将涉及解码熵编码位,修改值和 re-encoding 它们,因为你不能 "invert" 熵编码 DCT 值。每个值的熵编码长度没有一对一匹配,因为这些位是根据统计概率和量化值的 magnitude/sign 编码的。另一个问题是编码的 DCT 值存在于频域中。我不是数学家,所以我不能确定是否有一种简单的方法可以在频域中反转空间域值,但我认为充其量它真的很复杂并且可能会干扰值的量化一个简单的解决方案。您可以在 JPEG 文件中无损执行的操作包括旋转、裁剪和鲜为人知的操作,例如从彩色图像中提取灰度图像。如果不对 MCU 进行解码和重新编码,则无法修改单个像素值,这会导致 "loss" 的 JPEG 质量。