我試圖從Hamamatsu NanoZoomer幻燈片掃描儀生成的文件中提取圖像內容。 NDPI文件使用修改後的TIFF結構,並將圖像內容以JPEG格式存儲在一個大塊中。使用StripOffset和StripByteCounts,我可以提取應該是JPEG文件的數據。如何正確打開/解碼具有超過65500 * 65500像素的jpeg圖像?
數據流具有JPEG文件的所有正確簽名,例如FFD8,掃描標記的開始和FFD9,掃描標記的結束。如果這是一個小於65500 * 65500像素的圖像,那麼如果將數據流保存爲jpeg文件,則可以打開文件。
在JFIF標題中,FFC0標記之後的第三個和第四個字節表示圖像高度;之後的兩個字節表示圖像寬度。但是,對於大於65500 * 65500像素(實際上是122880 * 78848像素)的圖像,這些假定表示圖像高度和圖像寬度的四個字節全部爲零。我將它們改爲255,220,255,220,跟在this(255-263行)。當我通過在Windows中右鍵單擊來查看jpeg信息並選擇細節時,我確實看到Windows Photo Viewer將分辨率讀取爲65500 * 65500,儘管它們並不代表實際的像素分辨率。問題是,當我試圖打開圖像時,它顯然是以錯誤的方式解碼的。
所以我的問題是:我該如何正確打開這樣一個jpeg文件?或者說,我該如何正確解碼這些圖像內容的全部內容?
我現在試圖理解使用MATLAB的文件結構。最終,我將使用Python + OpenCV(或者如果需要,使用Python + Cython + libjpeg-turbo)將整個圖像讀入內存。
因爲我沒有要測試的圖像,所以很難說,但是如果你在處理大圖像時一定要考慮使用'vips'。它擅長於... http://stackoverflow.com/a/36377369/2836621 –
我相信這是一個libjpeg或libjpeg渦輪問題。 VIPS正在使用其中之一。所以只要切換到VIPS就不會解決這個問題。 – user3667217
我已經編寫了自己的圖像庫(包括自定義JPEG編解碼器),並且此圖像可能會被我的代碼打開。極端的大小是一次打開它的一個問題。我可以打開縮放後的副本(1/8 x 1/8 = 14848/12800)或打開特定的矩形裁剪。完整的res顏色未壓縮圖像需要36GB的RAM。 – BitBank