Colors 无损灰度JPEG“;“颜色”;反转

Colors 无损灰度JPEG“;“颜色”;反转,colors,jpeg,libjpeg,Colors,Jpeg,Libjpeg,Imagemagick可以反转JPEG的颜色,如下所示: mogrify -negate image.jpg 然而,这不是无损的。我的直觉告诉我,至少对于灰度图像来说,颜色反转应该是无损的,但我对JPEG几乎一无所知。因此,我的问题是: 无损JPEG灰度反转理论上可行吗 如果是这样的话,libjpeg或其他任何软件能做到吗 它不是无损的,因为JPEG中使用的RGB和YCbCr颜色空间的色域之间没有1:1的匹配。如果从YCbCR内的RGB值开始并翻转它,则可能会得到YCbCR颜色空间范围外的值

Imagemagick可以反转JPEG的颜色,如下所示:

mogrify -negate image.jpg
然而,这不是无损的。我的直觉告诉我,至少对于灰度图像来说,颜色反转应该是无损的,但我对JPEG几乎一无所知。因此,我的问题是:

  • 无损JPEG灰度反转理论上可行吗
  • 如果是这样的话,libjpeg或其他任何软件能做到吗

它不是无损的,因为JPEG中使用的RGB和YCbCr颜色空间的色域之间没有1:1的匹配。如果从YCbCR内的RGB值开始并翻转它,则可能会得到YCbCR颜色空间范围外的值,该值最终会被钳制。

JPEG将图像编码为一系列熵编码增量,这些增量跨MCU(最小编码单位-8x8块DCT值)和每个MCU内的熵编码量化DCT系数。要想反转像素值(即使是灰度值),需要解码熵编码位,修改值并重新编码,因为不能“反转”熵编码的DCT值。每个值的熵编码长度不存在一对一的匹配,因为比特是基于统计概率和量化值的大小/符号进行编码的。另一个问题是编码的DCT值存在于频域中。我不是数学家,所以我不能确定是否有一种简单的方法可以在频域中反转空间域的值,但我认为充其量它是非常复杂的,并且值的量化可能会干扰一个简单的解。在JPEG文件中可以无损地执行的操作包括旋转、裁剪和不太为人所知的操作,例如从彩色图像中提取灰度图像。如果不对MCU进行解码和重新编码,就无法修改单个像素值,这会导致JPEG质量的“损失”。

为什么您认为它不是无损的?但是,如果您是在sRGB中反转,您不能仅仅因为舍入问题而进行无损反转。如果您想要无损反转,请不要使用JPEG,使用PGM或LZW压缩TIF。@MarkSetchell源是JPEG,目标需要JPEG-我没有太多选择。从Imagemagick论坛:Imagemagick即使在简单翻转时也会重新压缩图像,翻页或复制JPEG。还有其他应用程序可以无损地执行此操作,而无需重新压缩,例如JPEG库附带的“jpegtran”应用程序。@Bonzo是的,如果只需要旋转,那么我实际上使用的是jpegtran。我没想到ImageMagick会做无损的东西。我只对灰度JPEG感兴趣,这当然值得一提。然后效果应该会大大降低。然而,量化过程仍然可能引入变化,即使系数相同。