added weighted std calcs
This commit is contained in:
parent
4b510dc4ef
commit
14247b7d18
84
src/experiments/algorithms/distribution_test.py
Normal file
84
src/experiments/algorithms/distribution_test.py
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
import numpy as np
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import cv2
|
||||||
|
import os
|
||||||
|
import math
|
||||||
|
|
||||||
|
def imgStats(img):
|
||||||
|
mean = np.zeros(3)
|
||||||
|
std = np.zeros(3)
|
||||||
|
for i in range(img.shape[2]):
|
||||||
|
mean[i] = np.mean(img[:, :, i])
|
||||||
|
std[i] = np.std(img[:, :, i])
|
||||||
|
return mean, std
|
||||||
|
|
||||||
|
def isFloat(num):
|
||||||
|
try:
|
||||||
|
float(num)
|
||||||
|
return True
|
||||||
|
except ValueError:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def calcWeightedStd(values, weights):
|
||||||
|
N = len(values)
|
||||||
|
x_bar = np.average(values, weights=weights, axis=0)
|
||||||
|
numerator = 0
|
||||||
|
for i in range(N):
|
||||||
|
numerator += weights[i] * ((values[i] - x_bar) ** 2)
|
||||||
|
denominator = np.sum(weights)
|
||||||
|
return math.sqrt(numerator / denominator)
|
||||||
|
|
||||||
|
def calcNormalFunc(mean, sd, len):
|
||||||
|
f = np.zeros(len, dtype=np.longdouble)
|
||||||
|
|
||||||
|
# calculate PDF
|
||||||
|
for x in range(len):
|
||||||
|
exp = (-(x - mean) ** 2)/(2 * sd ** 2)
|
||||||
|
f[x] = 1 / math.sqrt(2 * np.pi * sd** 20 ) * (math.exp(exp))
|
||||||
|
|
||||||
|
# normalize PDF
|
||||||
|
max = np.amax(f)
|
||||||
|
min = np.amin(f)
|
||||||
|
for x in range(len):
|
||||||
|
f[x] = (f[x] - min) / (max - min)
|
||||||
|
|
||||||
|
return f
|
||||||
|
|
||||||
|
DATASET_PATH = "dataset\\"
|
||||||
|
BARK_TYPES = 8
|
||||||
|
|
||||||
|
averages = [[] for x in range(BARK_TYPES)]
|
||||||
|
weights = [[] for x in range(BARK_TYPES)]
|
||||||
|
variances = [[] for x in range(BARK_TYPES)]
|
||||||
|
|
||||||
|
i = -1
|
||||||
|
last_name = ""
|
||||||
|
for file in os.listdir(DATASET_PATH):
|
||||||
|
name = file.split('_')[0]
|
||||||
|
if(name != last_name):
|
||||||
|
last_name = name
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
image = cv2.imread(os.path.join(DATASET_PATH + file), 1)
|
||||||
|
assert image is not None, "Something went wrong"
|
||||||
|
|
||||||
|
# Weighted average
|
||||||
|
averages[i].append(np.mean(image[:, :, 0]))
|
||||||
|
weights[i].append(len(image[:, :, 0]))
|
||||||
|
|
||||||
|
# print()
|
||||||
|
|
||||||
|
## Voor gewogen std:
|
||||||
|
## https://stackoverflow.com/questions/2413522/weighted-standard-deviation-in-numpy
|
||||||
|
weighted_avg = np.zeros(BARK_TYPES)
|
||||||
|
weighted_std = np.zeros(BARK_TYPES)
|
||||||
|
for i in range(BARK_TYPES):
|
||||||
|
weighted_avg[i] = np.average(averages[i], weights=weights[i], axis=0)
|
||||||
|
weighted_std[i] = calcWeightedStd(averages[i], weights[i])
|
||||||
|
|
||||||
|
print("Weighted averages: ")
|
||||||
|
print(weighted_avg)
|
||||||
|
|
||||||
|
print("Weighted standard deviation: ")
|
||||||
|
print(weighted_std)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user