Ваш код занимает 539 мсек на моей машине. Если я использую Numpy для вычисления среднего значения трех цветовых каналов и избегаю записи нулей в выходное изображение, потому что оно уже инициализировано нулем следующим образом:
def metoImpulse(img, coef=1.2):
# Get mean of the 3 colour channels
bmp = np.mean(img, axis=-1, dtype=np.float32)
sum_ = 0
max_ = np.amax(bmp)
final = np.zeros_like(img[...,0])
for i in range(img.shape[0]):
for j in range(img.shape[1]):
sum_ += bmp[i][j]
if sum_ >= coef * max_:
final[i][j] = 1
sum_ -= coef * max_
return final
Время уменьшится с 539 мс до 257 мс . Если я затем использую Numba, добавив декоратор перед моей функцией:
@jit(parallel=True)
def metoImpulse(img, coef=1.2):
# Get mean of the 3 colour channels
bmp = np.mean(img, axis=-1, dtype=np.float32)
sum_ = 0
max_ = np.amax(bmp)
final = np.zeros_like(img[...,0])
for i in range(img.shape[0]):
for j in range(img.shape[1]):
sum_ += bmp[i][j]
if sum_ >= coef * max_:
final[i][j] = 1
sum_ -= coef * max_
return final
Время уменьшится с 257 мс до 1,11 мс.
Входное изображение:
Выходное изображение: