需要對tiff圖像生成縮略圖;問題是有的tiff圖像很大,其中一個例子是90多M,寬度、高度都在十萬以上,使用c#自帶的Image.GetThumbnailImage等方法嘗試過但速度都比較慢;後來又使用libtiff自己處理,如果直接對圖像下降採樣的話,圖像會走樣很嚴重;先濾波的話是選取合適大小的均值濾波器還是n個像素直接合併為一個,而且libtiff一行一行得讀也比較麻煩(直接用它的ReadRGBAImage的話內存會爆掉),有沒有什麼正確的方向或優雅的解決方案?


謝邀。

最優雅的解決方案就是把內存加到64G以上,cpu看情況升級,然後用現成的工具(比如Matlab什麼的)當小圖來處理,估計只要兩三行code。

要問為什麼,因為你說的圖片文件大小和尺寸差了兩個量級啊!你算一下十萬x十萬x三的八位矩陣有多大!一般電腦感覺讀進內存都吃不消。我覺得你得自己用tifflib一行一行讀的方向是對的,但是還是要做好內存管理,設置好緩存並且要及時釋放。可以先每個次元減少個五倍十倍採樣(直接跳過像素)再均值濾波,可以進一步提高速度,理論上對縮略圖影響不大。

在實際應用中,tiff縮略圖都是可以事先存在同一個文件的,當然這是源頭問題。你唯一可以做的就是生成完縮略圖後再把它寫進原來的tiff文件,為未來節省時間。
路過不請自來。不太專業部分請包涵。

只接觸過tif格式病理切片大圖,可試下用imagemagick試下按照比例縮小生成縮略圖。需求不同,當時還用了openslide處理,於你未必有用,但可以試試。


就該這麼慢,不包括插值計算,你算算純搬運的時間就要多少。

唯一能減少時間的方式是想法減少搬運量,同時使用最近鄰插值來計算縮略圖。

題主可以試試 ArcGIS的ArcPy,最近正好在研究,期待我的成果。


在 Ps 里打開 TIFF,截圖……


推薦閱讀:
相关文章