非常大陣我打開一個TIFF LAB圖像,並使用python使用此函數返回一個大numpy的陣列(4928x3264x3 float64):闡述在Python
def readTIFFLAB(filename):
"""Read TIFF LAB and retur a float matrix
read 16 bit (2 byte) each time without any multiprocessing
about 260 sec"""
import numpy as np
....
....
# Data read
# Matrix creation
dim = (int(ImageLength), int(ImageWidth), int(SamplePerPixel))
Image = np.empty(dim, np.float64)
contatore = 0
for address in range(0, len(StripOffsets)):
offset = StripOffsets[address]
f.seek(offset)
for lung in range(0, (StripByteCounts[address]/SamplePerPixel/2)):
v = np.array(f.read(2))
v.dtype = np.uint16
v1 = np.array(f.read(2))
v1.dtype = np.int16
v2 = np.array(f.read(2))
v2.dtype = np.int16
v = np.array([v/65535.0*100])
v1 = np.array([v1/32768.0*128])
v2 = np.array([v2/32768.0*128])
v = np.append(v, [v1, v2])
riga = contatore // ImageWidth
colonna = contatore % ImageWidth
# print(contatore, riga, colonna)
Image[riga, colonna, :] = v
contatore += 1
return(Image)
,但約270秒本程序需要做的所有工作並返回一個numpy數組。
我嘗試使用多處理,但不可能共享一個數組或使用隊列來傳遞它,並且sharedmem在Windows系統中無法使用(在家我使用openSuse,但在工作中我必須使用Windows)。
有人可以幫我減少精化時間嗎?我讀到threadind,寫在C語言中某些部分,但我不明白什麼是最好的(和容易)解決方案,...我是一個食品技術不是一個真正的程序員:-)
感謝
我不知道它是否會更快,但你可以嘗試使用'tifffile'(https://pypi.python.org/pypi/tifffile)。它肯定會爲你節省一些編碼和調試時間。 –
我搜索了很多,但我沒有找到任何能夠讀取TIFF LAB(float16編碼)的庫。感謝 – dan2cil
@ dan2cil如果你分享你的輸入數據,我們可以給它一個提高你的算法 – BPL