added csv extraction
This commit is contained in:
parent
b44cad7102
commit
aab3e22fd8
24
src/experiments/algorithms/data/bgr_curve.csv
Normal file
24
src/experiments/algorithms/data/bgr_curve.csv
Normal file
File diff suppressed because one or more lines are too long
9
src/experiments/algorithms/data/bgr_stats.csv
Normal file
9
src/experiments/algorithms/data/bgr_stats.csv
Normal file
@ -0,0 +1,9 @@
|
||||
label,avg_b,avg_g,avg_r,std_b,std_g,std_r,
|
||||
accasia,69.59916027137541,93.23599740738842,92.76413721475456,29.650789354560942,28.164331202979742,28.33379470933227,
|
||||
berk,87.54178037532186,107.36707160860637,105.9353394079013,41.72180441785215,40.129023307835965,38.64035787139545,
|
||||
eik,103.74168566057762,119.53735094782796,117.95327527937933,34.77238255525745,33.829618649660944,32.82833612530793,
|
||||
els,138.35231618986808,177.39126510134065,181.7525877978574,51.65085237511483,43.383068821542174,42.175152137736305,
|
||||
esdoorn,47.365041621150056,77.05362430457048,69.52487212460042,25.207693719301673,24.628219686465727,22.25080719620302,
|
||||
es,63.945103048399794,95.91903641356423,90.20861703612438,20.389426811481062,18.395161770474054,17.716844447273072,
|
||||
linde,111.6252480236714,123.48265354152022,129.6323361059727,35.25451067293944,34.66671249273108,33.99378641928277,
|
||||
plataan,47.74452753592992,82.96830215527001,85.52863037536183,14.8187819404046,18.13170218888685,19.52480824126827,
|
|
24
src/experiments/algorithms/data/hsv_curve.csv
Normal file
24
src/experiments/algorithms/data/hsv_curve.csv
Normal file
File diff suppressed because one or more lines are too long
9
src/experiments/algorithms/data/hsv_stats.csv
Normal file
9
src/experiments/algorithms/data/hsv_stats.csv
Normal file
@ -0,0 +1,9 @@
|
||||
label,avg_b,avg_g,avg_r,std_b,std_g,std_r,
|
||||
accasia,35.90440242881845,79.12766192516973,96.03904497370279,10.316069136947837,32.12312271750131,28.112318716352682,
|
||||
berk,37.269905856891874,66.77426733032776,109.28940151500194,12.477741919995777,32.92938477640848,39.80902152951404,
|
||||
eik,39.76121762093227,41.20602771946309,121.12686669901616,23.03425646554001,25.365001089124593,33.494192142922856,
|
||||
els,27.25760648235924,68.91241506727702,182.27155476463224,4.423353762285157,34.149610367865485,42.029268409707505,
|
||||
esdoorn,40.44041857512247,131.63818552294646,77.84993286553097,9.535383780285505,39.540648429565636,24.46222201958771,
|
||||
es,38.37579404108352,98.88868379328436,96.68345708286985,6.84651057363783,30.56118627938561,18.229878712396474,
|
||||
linde,36.8388961321136,41.02522196067761,130.70675471758108,31.06746560545738,22.601057153094764,34.24357220627512,
|
||||
plataan,30.208627954766115,123.22600953975079,88.02246907749901,4.833302068080008,20.980674302352114,19.054660495972172,
|
|
@ -3,25 +3,14 @@ import matplotlib.pyplot as plt
|
||||
import cv2
|
||||
import os
|
||||
import math
|
||||
|
||||
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):
|
||||
def calcNormalFunc(mean : float, sd : float, len : int):
|
||||
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):
|
||||
@ -29,70 +18,162 @@ def calcNormalFunc(mean, sd, len):
|
||||
|
||||
return f
|
||||
|
||||
## Constants ##
|
||||
DATASET_PATH = "dataset\\"
|
||||
CSV_PATH = "src\\experiments\\algorithms\\data\\"
|
||||
BARK_TYPES = 8
|
||||
|
||||
## Arrays ##
|
||||
avgs_bgr = [[[],[],[]] for x in range(BARK_TYPES)]
|
||||
stds_bgr = [[[],[],[]] for x in range(BARK_TYPES)]
|
||||
wgts_bgr = [[[],[],[]] for x in range(BARK_TYPES)]
|
||||
|
||||
avgs_hsv = [[[],[],[]] for x in range(BARK_TYPES)]
|
||||
stds_hsv = [[[],[],[]] for x in range(BARK_TYPES)]
|
||||
wgts_hsv = [[[],[],[]] for x in range(BARK_TYPES)]
|
||||
|
||||
labels = ["" for x in range(BARK_TYPES)]
|
||||
|
||||
|
||||
## Data extraction ##
|
||||
i = -1
|
||||
last_name = ""
|
||||
for file in os.listdir(DATASET_PATH):
|
||||
# Store name + iterate tree type #
|
||||
name = file.split('_')[0]
|
||||
if(name != last_name):
|
||||
last_name = name
|
||||
i += 1
|
||||
labels[i] = name
|
||||
|
||||
# Load picture #
|
||||
im_bgr = cv2.imread(os.path.join(DATASET_PATH + file), 1)
|
||||
assert im_bgr is not None, "Something went wrong"
|
||||
im_hsv = cv2.cvtColor(im_bgr, cv2.COLOR_BGR2HSV)
|
||||
|
||||
# Data storing #
|
||||
for j in range(3):
|
||||
avgs_bgr[i][j].append(np.mean(im_bgr[:, :, j]))
|
||||
stds_bgr[i][j].append(np.std(im_bgr[:, :, j]))
|
||||
wgts_bgr[i][j].append(len(im_bgr[:, :, j]))
|
||||
|
||||
avgs_hsv[i][j].append(np.mean(im_hsv[:, :, j]))
|
||||
stds_hsv[i][j].append(np.std(im_hsv[:, :, j]))
|
||||
wgts_hsv[i][j].append(len(im_hsv[:, :, j]))
|
||||
|
||||
|
||||
## Arrays ##
|
||||
w_avg_bgr = [[0, 0, 0] for x in range(BARK_TYPES)]
|
||||
w_std_bgr = [[0, 0, 0] for x in range(BARK_TYPES)]
|
||||
w_std_bgr = [[0, 0, 0] for x in range(BARK_TYPES)]
|
||||
w_avg_hsv = [[0, 0, 0] for x in range(BARK_TYPES)]
|
||||
w_std_hsv = [[0, 0, 0] for x in range(BARK_TYPES)]
|
||||
w_std_hsv = [[0, 0, 0] for x in range(BARK_TYPES)]
|
||||
|
||||
#TODO: Mag de weighted std berekening met avgs? Denk t nie
|
||||
## Statistics calculations ##
|
||||
for i in range(BARK_TYPES):
|
||||
for j in range(3):
|
||||
w_avg_bgr[i][j] = np.average(avgs_bgr[i][j], weights=wgts_bgr[i][j], axis=0)
|
||||
w_std_bgr[i][j] = calcWeightedStd(avgs_bgr[i][j], wgts_bgr[i][j])
|
||||
|
||||
w_avg_hsv[i][j] = np.average(avgs_hsv[i][j], weights=wgts_hsv[i][j], axis=0)
|
||||
w_std_hsv[i][j] = calcWeightedStd(avgs_hsv[i][j], wgts_hsv[i][j])
|
||||
w_avg_bgr[i][j] = np.average(
|
||||
avgs_bgr[i][j],
|
||||
weights=wgts_bgr[i][j],
|
||||
axis=0)
|
||||
w_std_bgr[i][j] = np.average(
|
||||
stds_bgr[i][j],
|
||||
weights=wgts_bgr[i][j])
|
||||
|
||||
w_avg_hsv[i][j] = np.average(
|
||||
avgs_hsv[i][j],
|
||||
weights=wgts_hsv[i][j],
|
||||
axis=0)
|
||||
w_std_hsv[i][j] = np.average(
|
||||
stds_hsv[i][j],
|
||||
weights=wgts_hsv[i][j])
|
||||
|
||||
## Plots + Normal calculations ##
|
||||
fig, axs = plt.subplots(2,4)
|
||||
row = 0
|
||||
col = -1
|
||||
colours = ('b', 'g', 'r')
|
||||
for i in range(BARK_TYPES):
|
||||
# Rows and columns #
|
||||
row = 1 if i > 3 else 0
|
||||
col += 1
|
||||
if i == 4: col = 0
|
||||
|
||||
# Normal and plotting #
|
||||
for j in range(3):
|
||||
f = calcNormalFunc(w_avg_bgr[i][j], w_std_bgr[i][j], 255)
|
||||
label = "$\mu:$ %d, $\sigma: %d$"%(w_avg_bgr[i][j],w_std_bgr[i][j])
|
||||
axs[row, col].plot(f, c=colours[j], label=label)
|
||||
|
||||
# Plot params #
|
||||
axs[row, col].grid()
|
||||
axs[row, col].legend()
|
||||
axs[row, col].set_title(str(labels[i]))
|
||||
|
||||
plt.show(block=False)
|
||||
|
||||
fig, axs = plt.subplots(2,4)
|
||||
row = 0
|
||||
col = -1
|
||||
for i in range(BARK_TYPES):
|
||||
# Rows and columns #
|
||||
row = 1 if i > 3 else 0
|
||||
col += 1
|
||||
if i == 4: col = 0
|
||||
|
||||
# Normal and plotting #
|
||||
for j in range(3):
|
||||
f = calcNormalFunc(w_avg_hsv[i][j], w_std_hsv[i][j], 255)
|
||||
label = "$\mu:$ %d, $\sigma: %d$"%(w_avg_hsv[i][j], w_std_hsv[i][j])
|
||||
axs[row, col].plot(f, label=label)
|
||||
|
||||
# Plot params #
|
||||
axs[row, col].grid()
|
||||
axs[row, col].legend()
|
||||
axs[row, col].set_title(str(labels[i]))
|
||||
plt.show()
|
||||
|
||||
## CSVs ##
|
||||
# BGR mean and std #
|
||||
with open(CSV_PATH + "bgr_stats.csv", 'w', newline='') as file:
|
||||
file.write("label,avg_b,avg_g,avg_r,std_b,std_g,std_r,\n")
|
||||
for i in range(BARK_TYPES):
|
||||
file.write(labels[i] + ',')
|
||||
for j in range(3):
|
||||
file.write(str(w_avg_bgr[i][j]) + ',')
|
||||
for j in range(3):
|
||||
file.write(str(w_std_bgr[i][j]) + ',')
|
||||
file.write('\n')
|
||||
|
||||
# BGR normal curve per channel #
|
||||
id = ('B', 'G', 'R')
|
||||
with open(CSV_PATH + "bgr_curve.csv", 'w', newline='') as file:
|
||||
for i in range(BARK_TYPES):
|
||||
for j in range(3):
|
||||
file.write(labels[i] + ',')
|
||||
file.write(id[j] + ',')
|
||||
f = calcNormalFunc(w_avg_bgr[i][j], w_std_bgr[i][j], 255)
|
||||
for k in range(255):
|
||||
file.write(str(f[k]) + ',')
|
||||
file.write('\n')
|
||||
|
||||
# HSV mean and std #
|
||||
with open(CSV_PATH + "hsv_stats.csv", 'w', newline='') as file:
|
||||
file.write("label,avg_b,avg_g,avg_r,std_b,std_g,std_r,\n")
|
||||
for i in range(BARK_TYPES):
|
||||
file.write(labels[i] + ',')
|
||||
for j in range(3):
|
||||
file.write(str(w_avg_hsv[i][j]) + ',')
|
||||
for j in range(3):
|
||||
file.write(str(w_std_hsv[i][j]) + ',')
|
||||
file.write('\n')
|
||||
|
||||
# BGR normal curve per channel #
|
||||
id = ('H', 'S', 'V')
|
||||
with open(CSV_PATH + "hsv_curve.csv", 'w', newline='') as file:
|
||||
for i in range(BARK_TYPES):
|
||||
for j in range(3):
|
||||
file.write(labels[i] + ',')
|
||||
file.write(id[j] + ',')
|
||||
f = calcNormalFunc(w_avg_hsv[i][j], w_std_hsv[i][j], 255)
|
||||
for k in range(255):
|
||||
file.write(str(f[k]) + ',')
|
||||
file.write('\n')
|
||||
|
@ -79,7 +79,7 @@ for folder in os.listdir(DATASET_PATH):
|
||||
print("Done!")
|
||||
|
||||
## Pandas ##
|
||||
with open(CSV_PATH + "data.csv" , 'w', newline='') as file:
|
||||
with open(CSV_PATH + "sift.csv" , 'w', newline='') as file:
|
||||
for i in range(len(labels)):
|
||||
file.write(labels[i] + '\n')
|
||||
for j in range(len(tot_magnitudes[i])):
|
||||
|
Loading…
Reference in New Issue
Block a user