![](/img/trans.png)
[英]Faster way to calculate pixel intensity(color value) without iterating through all the pixels in image
[英]Faster way to looping pixel by pixel to calculate entropy in an image
我一直在用逐像素卷積運算計算圖像的熵,它一直在工作,但速度很慢,增加了 kernel 大小的執行時間。
這是我的 function 代碼,首先在代碼中我使用 gdal 讀取圖像並將其轉換為數組以將其傳遞給 function。
@jit
def convolution (ArrayES, ImArray, rows, cols, kernel, option):
for row in prange(rows):
for col in prange(cols):
Lx=max(0,col-kernel+1)
Ux=min(cols,col+kernel+1)
Ly=max(0,row-kernel+1)
Uy=min(rows,row+kernel+1)
mask=ImArray[Ly:Uy,Lx:Ux].flatten()
He=0.0
lenVet=mask.size
horList=list(set(mask))
if len(horList)==1 and horList.count(0)==1:
ArrayES[row,col]=0.0
else:
T7=time.time()
prob=[(mask[mask==i]).size/(lenVet*1.0) for i in horList]
for p in prob:
if p>0:
He += -1.0*p*np.log2(p)
if option==0:
ArrayES[row,col]=He
N=len(horList)*1.0
if N == 1:
C=0
else:
Hmax=np.log2(N)
C=He/Hmax
if option==1:
ArrayES[row,col]=C
if option==2:
SDL=(1-C)*C
ArrayES[row,col]=SDL
if option==3:
D = 0.0
for p in prob:
D += (p-(1/N))**2
LMC=D*C
ArrayES[row,col]=LMC
return ArrayES
問題是當 kernel 的數量大於 7 時。 我該如何改進它?
與 matlab 類似,加速此類操作的關鍵稱為“矢量化”。 基本上,刪除 for 循環並將計算轉換為向量和矩陣運算 - 對於每個步驟,找到一種方法來對所有合格像素進行分組並使用一次調用對其進行操作。
閱讀本文了解更多詳情
https://www.geeksforgeeks.org/vectorization-in-python/
許多方法類似於 matlab 中的矢量化
https://www.mathworks.com/help/matlab/matlab_prog/vectorization.html https://blogs.mathworks.com/videos/2014/06/04/vectorizing-code-in-matlab/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.