2011-04-13 38 views
2

我目前正在對自己的PNG過濾器實施工作。我使用的是神經網絡,試圖創造出比目前現有的PNG過濾器更好的預測:PNG編碼器 - 添加自己的過濾器實現

  • 0 - 無
  • 1 - 子
  • 2 - 最多
  • 3 - 平均
  • 4 - Paeth
  • 5 - 我的執行情況(與神經網絡預測)

如需進一步信息:http://www.w3.org/TR/PNG/#9Filters

我已經看了好幾家圖書館:

  • pngcrush (在C中實現..)
  • 關鍵點 - 包括PNGEncoder(是我目前最喜歡的)
  • ObjectPlanet - PngEncoder (我必須支付1000 $ src ..:P)

還有一些。但我現在的問題是,你知道一些其他PNG編碼器(用Java編寫)哪裏很容易添加自己的過濾器實現或有任何其他可能性使用我自己的過濾器?

非常感謝您的回答!

回答

8

前段時間我做了一個小純Java PNG庫(編碼解碼器)
http://code.google.com/p/pngj/

它體積小,相當完整(不完全),但對第三方庫沒有依賴性,並且代碼可用(和,我希望,容易理解)。如果你想實現一個自定義過濾器,你可以在那裏挖掘。如果你需要一些幫助,你可以問我。

但請記住(正如其他答案指出的那樣)PNG標準不支持自定義過濾器,只有您將能夠讀取您的編碼圖像。

+0

謝謝。這就是我一直在尋找的。我查看了代碼,在那裏實現我的過濾器應該不那麼難。是的,就像之前提到的那樣,它只適用於一個小型的研究項目,當它是唯一一個能夠讀取這些編碼圖像的人時:)。 – Prine 2011-04-16 11:29:46

+0

我只是想再次感謝你爲我提供編碼器/解碼器。我使用Grayscale 8位實現改編了您的版本,併成功實現了我的神經網絡過濾器!我唯一的問題是翻譯西班牙語的評論:P如果你對我的項目感興趣,你可以結帳我的博客http://prineblog.wordpress.com/2011/06/21/neural-network-as-predictor-for-image -coding-png/ – Prine 2011-06-21 17:21:36

+0

@Prine:很高興你發現它很有用,並對西班牙語的評論感到抱歉:-)與此同時,我已經上傳了一些新版本的圖書館,更多的優化評論和文檔。 – leonbloy 2011-06-21 17:58:14

2

這不是問題的答案,但更多的是「它不會這樣工作」。

您鏈接的PNG specification部分定義了過濾方法0以及該方法的過濾器類型(函數)列表。此列表是固定的:

過濾器方法0正好指定了這組5個過濾器類型,並且這不應該是 擴展。這確保解碼器不需要解壓縮數據以確定其是否包含不受支持的過濾器類型:在IHDR中檢查過濾器方法就足夠了。

所以,你不能簡單地在這裏添加你的神經網絡預測。

你可以做的是創建一個新的Filter方法(方法1或類似方法 - 但請參見Section 4.9),然後可以包含您的神經網絡過濾器類型。

但問題是,那麼每個想要讀取您的軟件PNG的軟件都需要支持這種新的過濾方法。所以,如果你不想僅僅爲了你的內部圖像存儲而做到這一點,這不是有用的。


如果你實際上可以用你的神經網絡,可以選擇每個掃描線,使得產生的gzip壓縮的數據流是小(或有效或(給出的五個一)的權濾波器類型.. )儘可能。

+0

嘿Paulo!非常感謝您的回答。這真是一個很好的觀點。但是我在大學做這個研究項目,現在還沒有計劃在生產環境中實際使用這個過濾器。但是如果壓縮可以用神經網絡預測器進行優化,我想要做的是一項小型研究。爲此我並不需要解碼器。或者我解釋錯了什麼? (與此同時,我在Java中發現了另一個有趣的PNGEncoder:https://www.docjar.com/docs/api/nextapp/echoservlet/image/PngEncoder.html) – Prine 2011-04-14 00:18:48

+0

如果您不需要之後解壓縮:-p。因此,即使您不希望它公開解碼,您至少應該包含一種解碼自己數據的方法。這也意味着要修補PNG庫的加載部分。 – 2011-04-14 00:23:46

+0

對不起,我無法真正幫助您解答實際問題,因爲我根本不知道任何PNG庫。 – 2011-04-14 00:24:34