Я пытаюсь рассчитать среднюю температуру для определенного диапазона зенитного угла для каждого изображения.
Я использую цикл for для выполнения вышеупомянутой задачи. Внутри цикла я вычисляю расстояние каждого пикселя от центра, а затем применяю условия на основе расстояния.
На изображении много нежелательных отражений, которые я удаляю с помощью фрейма данных df_con.
Цикл занимает 1 минуту 30 секунд для обработки всех операций с одним изображением (всего 24 изображения заняло 38 минут). Есть ли способ улучшить скорость кода.
### Reading all the images inside the Images folder
X_data = []
files = glob.glob ("Images/*.jpg"). # Total 17,000 images of(480*640*3)
files.sort(key=os.path.getmtime, reverse=True)
X_data = [cv.imread(img) for img in files]
image_data = np.array(X_data)
T_hot = np.array([])
for r in tqdm(range(image_data[:,0,0,0].size)):
##Converting RGB image to grey scale image
grey = cv.cvtColor(image_data[r],cv.COLOR_BGR2GRAY)
Z = grey.reshape(-1,1)
Tem = np.array([])
Tmax = 25
Tmin = -10
Zmax = 255
Zmin = 0
c = -10
m = (Tmax - Tmin) / (Zmax - Zmin)
zenith = np.array([])
theta = np.around(np.arange(0,90,90/200),6)
for i in range(0,480):
for j in range(0,640):
# Calculating distance of each pixel from the center.
r = np.around(np.sqrt((332 - j)**2 + (235 - i)**2))
# Assigning zxenith angle to each pxl.
# Calculating Temperature of indexed pxl.
if r < 200:
k = theta[theta == np.around((r*90/200),6)]
zenith = np.append(zenith,k)
T = (m*grey[i,j]) + c
Tem = np.append(Tem,T)
else:
k = 120
zenith = np.append(zenith,k)
T = 255
Tem = np.append(Tem,T)
# creating panda dataframe
df = pd.DataFrame({'Pxl':Z[:,0],'Tem':Tem[:],'zenith':zenith[:]})
# Fetching the Image mask data points
df_con = pd.read_excel('contour.xlsx')
dataset_final = pd.merge(df,df_con, how='outer', on=None, \
left_index=True, right_index=True, sort=True)
dataset_final = dataset_final[dataset_final['pxl_new'] < 255]
df_0 = pd.DataFrame(0, index=range(Z.shape[0]), columns={'Null'})
df_image = pd.merge(dataset_final,df_0, how='outer', on=None, \
left_index=True, right_index=True,\
sort=True)
df_image = df_image[['Pxl','Tem','zenith']].fillna(255)
df_target = dataset_final[(dataset_final['zenith'] >= 65) & \
(dataset_final['zenith'] <= 85)]
mean = np.mean(df_target[['Tem']].values)
T_hot = np.append(T_hot, mean)