簡體   English   中英

用於讀取 tiff 文件的高性能(python)庫?

[英]High performance (python) library for reading tiff files?

我正在使用代碼讀取 a.tiff 文件以計算分形維數。 我的代碼如下所示:

import matplotlib.pyplot as plt

raster = plt.imread('xyz.tif')

for i in range(x1, x2):
    for j in range(y1, y2):
        pixel = raster[i][j]

這行得通,但我必須讀取大量像素,所以我希望它速度快,並且理想情況下最大限度地減少當前事件的用電量。 為此,是否有比 matplotlib 更好的圖書館? 例如,使用專門用於矩陣運算的庫(例如 pandas)會有幫助嗎? 此外,另一種語言(例如 C)的性能是否會優於 python?

編輯:評論中的@cgohlke 和其他人發現,對於大型和/或壓縮圖像,cv2 比 tifffile 慢。 最好在應用程序的實際數據上測試不同的選項。

我發現cv2是最快的庫。 使用 5000 個 128x128 uint16 tif 圖像給出以下結果:

import time
import matplotlib.pyplot as plt
t0 = time.time()
for file in files:
    raster = plt.imread(file)
print(f'{time.time()-t0:.2f} s')

1.52 秒

import time
from PIL import Image
t0 = time.time()
for file in files:
    im = np.array(Image.open(file))
print(f'{time.time()-t0:.2f} s')

1.42 秒

import time
import tifffile
t0 = time.time()
for file in files:
    im = tifffile.imread(file)
print(f'{time.time()-t0:.2f} s')

1.25 秒

import time
import cv2
t0 = time.time()
for file in files:
    im = cv2.imread(file, cv2.IMREAD_UNCHANGED)
print(f'{time.time()-t0:.2f} s')

0.20 秒

cv2是用 c++ 編寫的計算機視覺庫,正如其他評論者提到的那樣,它比純 python 快得多。請注意cv2.IMREAD_UNCHANGED標志,否則cv2會將單色圖像轉換為 8 位 rgb。

我不確定哪個庫最快,但我對 Pillow 有很好的體驗:

from PIL import Image
raster = Image.open('xyz.tif')

那么您可以將其轉換為 numpy 數組:

import numpy
pixels = numpy.array(raster)

我需要查看代碼的 rest 才能推薦任何其他庫。 至於語言 C++ 或 C 將具有更好的性能,因為它們是低級語言。 因此,取決於您的操作有多復雜以及您需要處理多少數據,C++ 腳本被證明要快 10-200 倍(隨着計算的復雜性而增加)。 如果您有任何進一步的問題,希望這會有所幫助。

暫無
暫無

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

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