0
我有要由塊上放大圖/陣列調用塊(因爲它們計算用於整個陣列的過濾器的一些存儲器密集型圖像過濾器內調用濾波器功能,它們用完的內存時,試圖計算整個數組)。從塊逐塊處理功能
def block_process(Ic, blocksize):
B = numpy.empty(Ic.shape)
colstart = 0
while colstart < Ic.shape[1]:
BlockWidth = blocksize
if (colstart + blocksize) > Ic.shape[1]:
BlockWidth = Ic.shape[1] - colstart
rowstart = 0
while rowstart < Ic.shape[0]:
BlockHeight = blocksize
if (rowstart + blocksize) > Ic.shape[0]:
BlockHeight = Ic.shape[0] - rowstart
B[colstart:colstart+BlockWidth, rowstart:rowstart+BlockHeight] = filter1(params) # One of many available filters
rowstart += BlockHeight
colstart += BlockWidth
return B # The complete filtered array
我的過濾器計算的其他功能即def filter1(A, filtsize)
,def filter2(A, filtsize, otherparam)
,其具有A
參數(輸入數組,由塊函數給出),以及其他參數,例如濾波器的尺寸。一些過濾器比其他過濾器有更多參數他們返回已過濾的數組。
兩個問題
- 我怎麼去呼喚我的過濾功能,一是通過block_process功能?我不想將塊處理代碼複製到每個函數中。換句話說,是否有一種方法可以指定將調用哪個過濾器(以及使用哪些參數)作爲
block_process()
調用的參數? - 有沒有更好的編碼方式?
謝謝,這太棒了。我的過濾器在大(5000x5000)陣列運行,並且需要保持在內存中的大小相同,這就是爲什麼他們耗盡內存的額外3-4陣列,但這是另外一個問題... – Benjamin 2011-02-10 15:25:17