簡體   English   中英

DCT實施

[英]DCT implementation

我正在嘗試為彩色JPEG實現基於DCT的圖像壓縮算法。 我是圖像處理的新手,因此需要幫助。 我需要澄清一個算法。

我從這里使用DCT實現

因此,這是我所了解的算法:

  1. 使用ImageIO將圖像加載到BufferedImage中。
  2. 創建3個矩陣(每個通道1個:紅色,綠色,藍色):

     int rgb = bufferedImage.getRGB(i, j); int red = (rgb >> 16) & 0xFF; int green = (rgb >> 8) & 0xFF; int blue = rgb & 0xFF; 
  3. 將矩陣增加到其大小,以便可以將其分成8x8的塊(其中8是DCT矩陣的大小N)

  4. 對於每個矩陣,將其拆分為大小為8x8的塊(結果:splittedImage)
  5. 對來自splittedImage的矩陣執行forwardDCT(結果:dctImage)。
  6. 對dctImage中的矩陣執行量化(結果:quantizedImage)

在這里我不知道該怎么辦。 我可以:

  • 將quantumizedImage矩陣合並到一個矩陣margedImage中,將其轉換為Vector並執行compressImage方法。
  • 或將小矩陣從quantumizedImage轉換為Vector並對其執行compressImage方法,然后將它們合並為一個矩陣

因此,在這里我得到了3種用於紅色,綠色和藍色的矩陣。 然后,我將這些矩陣轉換為一個RGB矩陣,並創建新的BufferedImage並使用setRGB方法設置像素值。 然后將圖像保存到文件。

額外問題:

  1. 將RGB轉換為YCbCr並在Y,Cb和Cr上執行DCT更好嗎?
  2. compressImage方法的Javadoc表示它不是霍夫曼編碼,而是運行長度編碼。 那么,壓縮后的圖像會被圖像查看器打開嗎? 或者我應該根據JPEG規范使用霍夫曼編碼,並且Java中是否有任何開源霍夫曼編碼實現?

如果您想執行實施步驟,建議閱讀:

http://www.amazon.com/Compressed-Image-File-Formats-JPEG/dp/0201604434/ref=sr_1_1?ie=UTF8&qid=1399765722&sr=8-1&keywords=compressed+image+file+formats

關於您的問題:

1)JPEG標准對色彩空間一無所知,也不在乎是否使用RGB或YCbCr或CMYK。 有幾種指定顏色空間的JPEG文件格式(例如JFIF,EXIF,ADOBE),通常是YCbCr。

使用YCbCr的原因是遵循集中信息的JPEG趨勢。 Y成分中的信息往往比Cb或Cr成分有用。 使用YCbCr,您可以對每個Cb采樣4個Y,對每個Y采樣Cr(甚至16個)。這將壓縮的數據量減少了1/2。

請注意,JPEG文件格式指定了采樣限制(JPEG允許2:3采樣,而大多數實現則不允許)。

2)將DCT系數進行游程編碼,然后進行霍夫曼編碼(或算術編碼)。 您必須同時使用兩者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM