我正在尝试在红外图像上实现非均匀性校正算法。基本上我有一组黑体的图像,它应该处于非常精确和均匀的温度。但是由于相机硬件(传感器,光学......),你得到的图像并不均匀。 我有不同温度下的图像(640 * 512像素)(从18°C到30°C大约10张图像),我需要校正每个像素的值,以适应中心区域的平均值(应该是正确的价值)。
因此,对于每个像素,我需要拟合多项式函数p
(阶数5):
x=p(y)
其中x
是像素的值,y
是中心区域的平均值。
现在我将我的图像矢量化以避免双循环,并在每个像素上循环:
import numpy as np
interp_degree=5
nb_of_pixels=640*512
image =np.random.rand(640,512)
mean_value=np.arange(18,28,1)
a=image.flatten()
DL=np.transpose([a for i in range(10)]) # I simplified up to this point for the example
K=np.empty((nb_of_pixels,interp_degree+1))
for i in range(len(DL)): # loop over each pixels
K[i]=np.polyfit(DL[i],mean_value,interp_degree) # fitting
DLC_NUC[i]=np.polyval(K[i],DL[i]) # eval the corrected value of the pixel for later use
这个循环在我的电脑上花了大约200秒,我想减少这个时间。 <{1}}和polyfit
已使用多处理,因此这不是一种方式。
有没有办法改善这个?