Хорошо, это должно сделать то, что вы описываете.
import numpy as np
im1 = np.random.randint(0,255,size=(2,2,3)).astype('float')
im2 = np.random.randint(0,255,size=(2,2,3)).astype('float')
p = 1 - np.mean(np.abs(im1-im2)/np.stack((im1,im2),-1).max(-1))
Чтобы вычислить p, этот код вычитает пиксель за пикселем, затем принимает абсолютное значение, а затем делит на максимальное значение между изображениями на каждом каналекаждого пикселя.Это немного сбивает с толку, но это то, что вы описали.Вы можете разобрать один вкладыш, чтобы увидеть, что делает каждый кусок.
Ключевой момент: ваши изображения должны иметь тип данных с плавающей точкой, чтобы это работало.