2016-01-05 108 views
0

ImageMagick的可翻轉一個JPEG的顏色,像這樣:無損灰度JPEG「顏色」反轉?

mogrify -negate image.jpg 

然而,這不是無損。我的直覺說,顏色反轉應該是無損的,至少對於灰度圖像是可行的,但我幾乎不瞭解JPEG的任何內容。因此,我的問題:

  • 無損JPEG灰度反演可能在理論上?
  • 如果是這樣,是libjpeg或任何其他軟件能夠做到這一點嗎?
+0

你爲什麼認爲這不是無損?但是如果你在sRGB中進行反轉,只能因爲舍入問題而無法進行無損反轉。 –

+0

如果您想要無損,請不要使用JPEG,請使用PGM或LZW壓縮的TIF。 –

+0

@MarkSetchell源代碼爲JPEG,目標需要JPEG - 對我來說沒有多少選擇。 –

回答

1

JPEG將圖像編碼爲跨每個MCU(最小編碼單元 - 8×8塊DCT值)和熵編碼的量化DCT係數的一系列熵編碼增量。像顛倒像素值(即使灰度)會涉及熵編碼比特的解碼,修改值並對它們進行重新編碼,因爲不能「反轉」熵編碼的DCT值。對於每個值不存在熵編碼長度的一對一匹配,因爲這些位是基於統計概率和量化值的幅度/符號來編碼的。另一個問題是編碼的DCT值存在於頻域中。我不是數學家,所以我不能肯定地說是否有一種簡單的方法來反演頻域中的空間域值,但我認爲它最好是非常複雜,而且這些值的量化可能會干擾簡單的解決方案。您可以在JPEG文件中進行無損操作的方式是旋轉,裁剪和較少知名的操作,例如從彩色圖像中提取灰度圖像。如果不解碼和重新編碼導致JPEG質量出現「丟失」的MCU,則無法修改單個像素值。

1

它不是無損的,因爲JPEG中使用的RGB和YCbCr色彩空間的色域之間不存在1:1匹配。如果您從YCbCR中的RGB值開始並將其翻轉,則可能會得到YCbCr色彩空間範圍之外的值,最終會被鉗位。

+0

我只對灰度JPEG感興趣,這當然值得一提。 –

+0

那麼效果應該大大減輕。然而,即使採用相同的係數,量化過程仍然可能引入變化。 – user3344003