[英]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.