Я пытаюсь вычислить для каждого подизображения (квадрата) дисперсию, и я не могу что-то понять. Вот дисперсия для каждого квадрата для первой строки:
[массив ([[0.]]), Массив ([[12594.46370602]]), массив ([[14952.43356228]])), массив ([ [1968.53027344]]), массив ([[1968.53027344]]), массив ([[1968.53027344]])), массив ([[1968.53027344]])), массив ([[13495.383811]])), массив ([[0.]] ), массив ([[10932.52408504]]), массив ([[1968.53027344]]), массив ([[1968.53027344]]), массив ([[1968.53027344]])), массив ([[1968.53027344]]), массив ([ [1968.53027344]]), array ([[1968.53027344]])
Я согласен, что из-за формулы, когда я получаю черный квадрат, у меня нулевая дисперсия, потому что каждый пиксель стоит 0 в квадрате и Значит, квадрат тоже вполне логичен. Но я получил 1968,53027344 для белых пикселей, тогда как ясно, что нет никакой разницы, все квадраты белые, и из-за формулы каждый пиксель в этом квадрате стоит 255, так как это изображение в градациях серого, и поэтому среднее значение также, так У меня должно быть 0, верно?
Вот код:
im = cv2.imread('path.png', 0)
imgheight=im.shape[0]
imgwidth=im.shape[1]
y1 = 0
M = imgheight//16
N = imgwidth//16
v=[]
for y in range(0,imgheight,M):
for x in range(0, imgwidth, N):
y1 = y + M
x1 = x + N
tiles = im[y:y+M,x:x+N]
std=cv2.meanStdDev(tiles)[1]
std=std*std
v.append(std)
cv2.rectangle(im, (x, y), (x1, y1), (0, 255, 0))
cv2.imwrite("save/" + str(x) + '_' + str(y)+".png",tiles)
cv2.imwrite("pic.png",im)