This commit is contained in:
Arne van Iterson 2023-10-01 15:28:36 +02:00
commit 6162f5a3c1
14 changed files with 709 additions and 85 deletions

View File

@ -0,0 +1,161 @@
import cv2
import cv2.typing
from cv2.mat_wrapper import Mat as Mat
import os
import numpy as np
import csv
from enum import Enum
CSV_PATH = "src\\experiments\\algorithms\\data\\"
IMG_PATH = "dataset\\accasia_1210048 (2023_09_28 12_19_26 UTC).JPG"
BARK_TYPES = 8
class Tree(Enum):
ACCASIA = 0
BERK = 1
EIK = 2
ELS = 3
ESDOORN = 4
ES = 5
LINDE = 6
PLATAAN = 7
class ColourSpace(Enum):
BGR = 0
HSV = 1
class colourTester:
def __init__(self) -> None:
self.bgr_curves = [[[], [], []] for x in range(BARK_TYPES)]
self.bgr_ids = ["", "", ""]
self.hsv_curves = [[[], [], []] for x in range(BARK_TYPES)]
self.hsv_ids = ["", "", ""]
self.labels = ["" for x in range(BARK_TYPES)]
def loadImage(self) -> None:
img = cv2.imread(self.im_path, 1)
assert img is not None, \
"Failed to load an image, check path"
self.bgr_img = img
self.hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
return
def setImPath(self, path : str) -> None:
if os.path.isfile(path):
self.im_path = path
else:
print("file does not exist")
return
def setCsvBgrPath(self, path : str) -> None:
if os.path.isfile(path):
self.csv_bgr_path = path
else:
print("file does not exist")
return
def setCsvHsvPath(self, path : str) -> None:
if os.path.isfile(path):
self.csv_hsv_path = path
else:
print("file does not exist")
return
def getData(self, img : cv2.typing.MatLike) -> (float, float):
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 loadCurves(self) -> None:
with open(self.csv_bgr_path, 'r') as bgr_file:
reader = csv.reader(bgr_file, delimiter=',')
j = 0
i = -1
for row in reader:
j+=1
i += 1 if (j-1) % 3 == 0 else 0
self.labels[i] = row[0]
self.bgr_ids[(j-1)%3] = row[1]
for col in row[2:]:
self.bgr_curves[i][(j-1)%3].append(col)
with open(self.csv_hsv_path, 'r') as hsv_file:
reader = csv.reader(hsv_file, delimiter=',')
j = 0
i = -1
for row in reader:
j+=1
i += 1 if (j-1) % 3 == 0 else 0
self.labels[i] = row[0]
self.hsv_ids[(j-1)%3] = row[1]
for col in row[2:]:
self.hsv_curves[i][(j-1)%3].append(col)
return
def correlate(self, mean : float, tree : Tree, space : ColourSpace) -> [float, float, float]:
results = [0, 0, 0]
if space == ColourSpace.BGR:
curve = self.bgr_curves
elif space == ColourSpace.HSV:
curve = self.hsv_curves
for i in range(3):
results[i] = float(curve[tree.value][i][int(mean[i])])
return results
def testImage(self) -> Tree:
# load an image
self.loadImage()
# load curves
self.loadCurves()
# extract data
bgr_mean, bgr_std = self.getData(self.bgr_img)
hsv_mean, hsv_std = self.getData(self.hsv_img)
# correlate with curves
av_results = np.zeros(BARK_TYPES)
for tree in Tree:
bgr_res = self.correlate(bgr_mean, tree, ColourSpace.BGR)
hsv_res = self.correlate(hsv_mean, tree, ColourSpace.HSV)
av_results[tree.value] = (np.mean(bgr_res)+np.mean(hsv_res) / 2)
# print(str(IMG_PATH.split('_')[0])+';'+tree.name + ';' + str(np.mean(bgr_res)) + ';' + str(np.mean(hsv_res)))
return np.argmax(av_results)
def testDataset(self, path : str) -> None:
n_t = 0
n_f = 0
tree_type_cor = np.zeros(BARK_TYPES)
tree_type_inc = np.zeros(BARK_TYPES)
res = np.zeros(BARK_TYPES)
i = -1
last_name = ""
for file in os.listdir(path):
file_path = os.path.join(path, file)
self.setImPath(file_path)
name = file_path.split('_')[0].split('\\')[1].upper()
result = Tree(self.testImage()).name
if last_name != name:
i += 1
last_name = name
if(name == result):
tree_type_cor[i] += 1
else:
tree_type_inc[i] += 1
res = tree_type_cor / (tree_type_cor + tree_type_inc) * 100
for i in range(BARK_TYPES):
print("%s: %d%% correct"%(Tree(i).name, res[i]))
return
if __name__ == "__main__":
tester = colourTester()
tester.setCsvBgrPath(CSV_PATH + "bgr_curve.csv")
tester.setCsvHsvPath(CSV_PATH + "hsv_curve.csv")
tester.testDataset("dataset")
pass

File diff suppressed because one or more lines are too long

View 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,
1 label avg_b avg_g avg_r std_b std_g std_r
2 accasia 69.59916027137541 93.23599740738842 92.76413721475456 29.650789354560942 28.164331202979742 28.33379470933227
3 berk 87.54178037532186 107.36707160860637 105.9353394079013 41.72180441785215 40.129023307835965 38.64035787139545
4 eik 103.74168566057762 119.53735094782796 117.95327527937933 34.77238255525745 33.829618649660944 32.82833612530793
5 els 138.35231618986808 177.39126510134065 181.7525877978574 51.65085237511483 43.383068821542174 42.175152137736305
6 esdoorn 47.365041621150056 77.05362430457048 69.52487212460042 25.207693719301673 24.628219686465727 22.25080719620302
7 es 63.945103048399794 95.91903641356423 90.20861703612438 20.389426811481062 18.395161770474054 17.716844447273072
8 linde 111.6252480236714 123.48265354152022 129.6323361059727 35.25451067293944 34.66671249273108 33.99378641928277
9 plataan 47.74452753592992 82.96830215527001 85.52863037536183 14.8187819404046 18.13170218888685 19.52480824126827

File diff suppressed because one or more lines are too long

View 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,
1 label avg_b avg_g avg_r std_b std_g std_r
2 accasia 35.90440242881845 79.12766192516973 96.03904497370279 10.316069136947837 32.12312271750131 28.112318716352682
3 berk 37.269905856891874 66.77426733032776 109.28940151500194 12.477741919995777 32.92938477640848 39.80902152951404
4 eik 39.76121762093227 41.20602771946309 121.12686669901616 23.03425646554001 25.365001089124593 33.494192142922856
5 els 27.25760648235924 68.91241506727702 182.27155476463224 4.423353762285157 34.149610367865485 42.029268409707505
6 esdoorn 40.44041857512247 131.63818552294646 77.84993286553097 9.535383780285505 39.540648429565636 24.46222201958771
7 es 38.37579404108352 98.88868379328436 96.68345708286985 6.84651057363783 30.56118627938561 18.229878712396474
8 linde 36.8388961321136 41.02522196067761 130.70675471758108 31.06746560545738 22.601057153094764 34.24357220627512
9 plataan 30.208627954766115 123.22600953975079 88.02246907749901 4.833302068080008 20.980674302352114 19.054660495972172

View File

@ -0,0 +1,111 @@
Accasia_out
698.7577929496765,3.1334430177115538,14.639884948730469,1.828372937292583,0.019404600608275344,4.3272259356454015,223
835.5868207216263,3.2014820717303687,12.595267295837402,1.6907475606337812,0.019033726119218657,4.96780251711607,261
1322.7272791862488,3.06897280553654,31.375614166259766,1.9465412537508602,0.020197111614083055,8.704955105669796,431
616.1432831287384,2.948053986261906,10.182110786437988,1.3003369871725294,0.01828445773126121,3.8214516658335924,209
2042.4658575057983,3.370405705455113,41.08128356933594,2.6347973287004307,0.025092723959190124,15.206190719269216,606
679.9872843027115,3.2849627261000554,19.78511619567871,2.3892941334247926,0.020702168241971068,4.285348826088011,207
702.1195831298828,2.901320591445797,12.382240295410156,1.3507806557012718,0.01787308056661782,4.325285497121513,242
809.6343139410019,2.772720253222609,7.978091716766357,1.095115195842802,0.017495756149164415,5.108760795556009,292
991.9575394392014,3.4562980468264857,37.2266845703125,3.4535018683730523,0.02128367463146249,6.108414619229734,287
883.6591415405273,2.814201087708686,19.852262496948242,1.35472176718185,0.01984180409200252,6.230326484888792,314
1665.44428896904,3.284899978242682,26.174636840820312,2.252376816106766,0.024839076586435062,12.593411829322577,507
1716.247862815857,3.7391020976380327,34.431396484375,3.7368679730976226,0.027567605871488068,12.653531095013022,459
1033.3027093410492,3.093720686649848,26.645557403564453,2.403131773101099,0.022129791454149936,7.391350345686078,334
1002.2664128541946,3.318762956470843,17.658721923828125,2.2496636828812204,0.020582417291373212,6.21589002199471,302
905.6036241054535,3.1554133244092455,24.95030975341797,2.079331380141301,0.01953536727326153,5.606650407426059,287
1573.2526054382324,3.1654982000769265,22.565237045288086,1.8844591835561313,0.027768299585092117,13.800844893790781,497
1344.9189388751984,3.0705911846465717,10.925896644592285,1.3562763371500577,0.018900907925887195,8.278597671538591,438
2635.2527647018433,3.4313187040388584,21.754484176635742,2.423580701045881,0.03490584164925773,26.80768638662994,768
1274.166908979416,3.201424394420643,20.968454360961914,2.089842708717911,0.01874925658790086,7.462204121984541,398
780.677412033081,3.500795569655072,29.299978256225586,3.1758027558377497,0.017996931807743595,4.0133157931268215,223
Berk_out
2687.594747185707,3.7172818080023613,48.48632049560547,3.884212269938133,0.02503235707572181,18.098394165746868,723
2449.5360144376755,3.9129968281752006,48.72830581665039,4.190141018929445,0.026578323430598925,16.638030467554927,626
2248.9365841150284,3.6687383101387088,24.20957374572754,2.434784715027513,0.02334839300378598,14.312564911320806,613
2386.9925570487976,3.6221434856582664,24.51873779296875,2.503845528850179,0.028970138332347226,19.091321161016822,659
2558.578493118286,3.773714591619891,50.86576843261719,3.418055103617325,0.02585626285314384,17.530546214431524,678
2592.295235991478,3.635757694237697,52.358192443847656,3.2337805396374515,0.024524578845538565,17.486024716868997,713
2561.138155579567,3.2378484899868103,16.90852165222168,1.978250128109907,0.024490677895243416,19.37212621513754,791
3345.3579272031784,3.64815477339496,39.54557418823242,2.880069078600365,0.02579340783446507,23.65255498420447,917
2192.156372189522,3.4740988465761045,48.14958953857422,3.5506460162235087,0.027054107882283192,17.071142073720694,631
2484.008170723915,3.5384731776693945,37.6187629699707,2.9612951727148524,0.03286086464900407,23.068326983600855,702
1462.3458621501923,3.4735056108080578,22.076406478881836,2.3849241758099997,0.024276126959226194,10.220249449834228,421
2419.1333129405975,3.495857388642482,29.215726852416992,2.7948339211851914,0.03273452721762261,22.652292834594846,692
2687.440049767494,3.467664580345154,34.797386169433594,2.5354207818312107,0.026453086143780138,20.501141761429608,775
1468.780837059021,3.2785286541496004,19.688207626342773,1.8301759005766227,0.022607883232662322,10.12833168823272,448
Eik_out
1579.444641828537,3.6816891417914617,19.227346420288086,2.4975664779859987,0.031246154553893006,13.4046003036201,429
1612.8415837287903,3.895752617702392,19.052034378051758,2.577455127470621,0.030227775289564603,12.514298969879746,414
1352.4212625026703,3.8640607500076296,15.00854206085205,2.35411413545315,0.031208549745913063,10.922992411069572,350
1538.6859678030014,3.780555203447178,40.99676513671875,3.3523572759224476,0.029105583906027258,11.845972649753094,407
1225.0985703468323,3.3290722020294354,19.58705711364746,2.038351397338684,0.025498346643238936,9.383391564711928,368
1365.3871425390244,3.447947329644001,19.194652557373047,2.2193953246091485,0.025410288173441934,10.062474116683006,396
1097.9404437541962,2.9998372780169293,12.264142990112305,1.581511211694125,0.023072358251350823,8.444483119994402,366
1291.582367658615,3.2864691289023287,28.83696937561035,2.3913841440343515,0.022361759129560933,8.788171337917447,393
1363.1331936120987,3.549826025031507,19.18490219116211,2.6828781845914205,0.022771707088395488,8.744335521943867,384
Els_out
1359.8641113042831,3.2767809910946584,19.266313552856445,1.897638219600126,0.03115534636539867,12.929468741640449,415
1134.7650756835938,3.327756820186492,18.936323165893555,1.7635501819834738,0.03266596192182684,11.13909301534295,341
1632.902286529541,3.5040821599346375,24.11359214782715,2.5618395036682124,0.03067660743626466,14.295299065299332,466
1536.4152345657349,3.5565167466799417,27.18216896057129,2.786383289622822,0.030237345891590748,13.062533425167203,432
1107.7055238485336,3.886686048591346,22.485553741455078,2.9948413624608015,0.026233021696016455,7.476411183364689,285
1616.8189809322357,4.429641043649961,45.3355827331543,4.300393576628321,0.025648677525148815,9.361767296679318,365
1041.9242010116577,3.2764911981498672,20.875349044799805,2.3053497977427333,0.026208830522900482,8.334408106282353,318
1111.8425114154816,3.3897637543154926,34.425537109375,2.6968539571918693,0.02739228969780592,8.984671020880342,328
Esdoorn_out
1804.0408366918564,3.280074248530648,16.878116607666016,2.014352156832684,0.023109257851134647,12.710091818124056,550
1065.8392305374146,3.125628242045204,12.645761489868164,1.5616937783846487,0.023261115867152942,7.932040510699153,341
1443.1293832063675,3.164757419312209,13.824272155761719,1.6381495412391829,0.023636438981874994,10.778216175734997,456
2109.4739229679108,3.3859934558072404,22.446571350097656,1.9491651806275798,0.024649366696049755,15.356555451638997,623
566.1849731206894,3.494968969880799,14.277800559997559,2.26332032519058,0.02264520879489956,3.668523824773729,162
654.3276780843735,3.255361582509321,14.174254417419434,2.0223312092105425,0.0228689360798369,4.596656152047217,201
2245.0964748859406,3.6804860244031814,24.625778198242188,2.75325816629717,0.028883854125733258,17.619151016697288,610
2144.3980325460434,3.9060073452569095,23.537641525268555,2.982770847358778,0.0322847970131995,17.724353560246527,549
716.7942097187042,3.303199123127669,12.021895408630371,1.8694689392752937,0.022289771651033706,4.836880448274314,217
512.756842136383,3.308108658944407,12.388520240783691,1.9337408376098448,0.022146687284111975,3.4327365290373564,155
203.3936928510666,2.676232800671929,9.652430534362793,1.0712162703218076,0.01939073234404388,1.473695658147335,76
69.72195136547089,2.9050813068946204,8.56438159942627,1.3172613562659046,0.019768514127160113,0.4744443390518427,24
760.4716109037399,3.456689140471545,15.6034517288208,1.8629395593771183,0.022623810722407968,4.977238358929753,220
1182.883133649826,3.360463447868824,19.758787155151367,2.1385583241671227,0.022289208096811886,7.845801250077784,352
Es_out
321.85712587833405,2.7746303955028795,8.890114784240723,1.3376489632824087,0.01832420542707731,2.125607829540968,116
552.8187339305878,3.2328580931613318,10.130751609802246,1.8025538661742508,0.018092449095470513,3.093808795325458,171
588.2388911247253,3.0478699022006492,9.2846097946167,1.3144556549216149,0.017584343860649693,3.3937783651053905,193
394.3926087617874,3.1301000695379955,10.9545259475708,1.6391168134480771,0.017145832527487997,2.1603748984634876,126
553.2564067840576,2.8372123424823465,10.358263969421387,1.350251161044622,0.018460245196444867,3.599747813306749,195
338.75891745090485,2.7996604748008664,9.217413902282715,1.283988791527709,0.018358958323201363,2.221433957107365,121
720.4328188896179,3.0526814359729575,12.120339393615723,1.6056232318864754,0.018135199863937194,4.279907167889178,236
849.7654691934586,3.255806395377236,10.75560474395752,1.4615165188330932,0.018580378411459056,4.849478765390813,261
555.6458119153976,3.388084218996327,14.520678520202637,1.953400702594663,0.01816363431081721,2.9788360269740224,164
1692.7979286909103,3.632613580881782,20.59199333190918,2.3585647083456562,0.018669820646455615,8.700136421248317,466
749.9521169662476,3.1643549239082174,12.163043022155762,1.6879179665006827,0.01935904413335937,4.588093459606171,237
495.28962099552155,2.983672415635672,12.046462059020996,1.60246979233263,0.017850231289504522,2.9631383940577507,166
547.3506425619125,3.2008809506544593,12.70744514465332,1.6010494871239151,0.017072790629116066,2.9194471975788474,171
609.8123083114624,3.06438345885157,11.177712440490723,1.6252859374605053,0.01953577640087311,3.887619503773749,199
1049.4082342386246,3.915702366562032,40.334678649902344,4.186340109661006,0.021392696182618836,5.733242576941848,268
98.67310166358948,2.666840585502418,5.462077617645264,0.8816751949777557,0.018322708311717253,0.6779402075335383,37
Linde_out
2461.9480855464935,3.647330497105916,31.023351669311523,2.935188384240195,0.028290224722414103,19.09590168762952,675
1867.9105838537216,3.612979852715129,32.11227035522461,2.97824320863418,0.024062555778692377,12.440341337583959,517
2124.3844242095947,3.4099268446381936,25.51401710510254,2.3428222023628127,0.023997853738801436,14.950662879273295,623
1271.0833770036697,3.5210065844977003,30.341659545898438,2.694577657260915,0.022613988515928676,8.163649854250252,361
2168.191069126129,3.6379044783995456,22.332868576049805,2.5124689591930625,0.024711657454565966,14.728147842921317,596
2013.289783000946,3.653883453722225,25.39375114440918,2.890201927887927,0.024696742919714826,13.60790534876287,551
Plataan_out
393.0376785993576,6.238693311100914,54.77334213256836,8.288615256835522,0.018721998817036078,1.1794859254732728,63
121.42510282993317,3.0356275707483293,6.407865047454834,1.2202699276482052,0.018214209564030172,0.7285683825612068,40
535.1427782773972,2.9896244596502632,13.512324333190918,2.097842298338548,0.016643719497922413,2.979225790128112,179
90.34654986858368,3.1153982713304718,6.734649181365967,1.3800949819155952,0.015865142681989176,0.4600891377776861,29
437.9166510105133,2.9588962906115763,11.90050983428955,1.4047910909894616,0.01991794491186738,2.9478558469563723,148
165.1281417608261,2.580127215012908,4.76331090927124,0.7642263750567146,0.018476538331015036,1.1824984531849623,64
232.94678628444672,2.875886250425268,9.826898574829102,1.3727227350017257,0.019708929284487243,1.5964232720434666,81
332.89813327789307,3.78293333270333,22.732511520385742,3.045459303553181,0.019926275486465205,1.753512242808938,88
375.2972539663315,4.415261811368605,24.255054473876953,4.276442351754282,0.017834563169847516,1.515937869437039,85
55.11076760292053,3.061709311273363,9.913771629333496,1.935650105177096,0.017019378021359444,0.30634880438447,18
38.28573513031006,2.3928584456443787,3.611070394515991,0.5145855975780511,0.014993195189163089,0.23989112302660942,16
599.6391468048096,5.259992515831663,40.99736404418945,5.811482494116048,0.01938449298113323,2.2098321998491883,114
224.61611258983612,4.0110020105327875,38.507686614990234,6.750403253193775,0.01725217021469559,0.966121532022953,56
316.32959711551666,4.108176585915801,40.63800048828125,6.427567028038508,0.017561782018414566,1.3522572154179215,77
138.6963803768158,2.52175237048756,6.668946743011475,0.8272403842232803,0.016272347149523823,0.8949790932238102,55
241.65850698947906,3.0207313373684883,19.399702072143555,2.1353345471026124,0.017683570575900375,1.41468564607203,80
1 Accasia_out
2 698.7577929496765,3.1334430177115538,14.639884948730469,1.828372937292583,0.019404600608275344,4.3272259356454015,223
3 835.5868207216263,3.2014820717303687,12.595267295837402,1.6907475606337812,0.019033726119218657,4.96780251711607,261
4 1322.7272791862488,3.06897280553654,31.375614166259766,1.9465412537508602,0.020197111614083055,8.704955105669796,431
5 616.1432831287384,2.948053986261906,10.182110786437988,1.3003369871725294,0.01828445773126121,3.8214516658335924,209
6 2042.4658575057983,3.370405705455113,41.08128356933594,2.6347973287004307,0.025092723959190124,15.206190719269216,606
7 679.9872843027115,3.2849627261000554,19.78511619567871,2.3892941334247926,0.020702168241971068,4.285348826088011,207
8 702.1195831298828,2.901320591445797,12.382240295410156,1.3507806557012718,0.01787308056661782,4.325285497121513,242
9 809.6343139410019,2.772720253222609,7.978091716766357,1.095115195842802,0.017495756149164415,5.108760795556009,292
10 991.9575394392014,3.4562980468264857,37.2266845703125,3.4535018683730523,0.02128367463146249,6.108414619229734,287
11 883.6591415405273,2.814201087708686,19.852262496948242,1.35472176718185,0.01984180409200252,6.230326484888792,314
12 1665.44428896904,3.284899978242682,26.174636840820312,2.252376816106766,0.024839076586435062,12.593411829322577,507
13 1716.247862815857,3.7391020976380327,34.431396484375,3.7368679730976226,0.027567605871488068,12.653531095013022,459
14 1033.3027093410492,3.093720686649848,26.645557403564453,2.403131773101099,0.022129791454149936,7.391350345686078,334
15 1002.2664128541946,3.318762956470843,17.658721923828125,2.2496636828812204,0.020582417291373212,6.21589002199471,302
16 905.6036241054535,3.1554133244092455,24.95030975341797,2.079331380141301,0.01953536727326153,5.606650407426059,287
17 1573.2526054382324,3.1654982000769265,22.565237045288086,1.8844591835561313,0.027768299585092117,13.800844893790781,497
18 1344.9189388751984,3.0705911846465717,10.925896644592285,1.3562763371500577,0.018900907925887195,8.278597671538591,438
19 2635.2527647018433,3.4313187040388584,21.754484176635742,2.423580701045881,0.03490584164925773,26.80768638662994,768
20 1274.166908979416,3.201424394420643,20.968454360961914,2.089842708717911,0.01874925658790086,7.462204121984541,398
21 780.677412033081,3.500795569655072,29.299978256225586,3.1758027558377497,0.017996931807743595,4.0133157931268215,223
22 Berk_out
23 2687.594747185707,3.7172818080023613,48.48632049560547,3.884212269938133,0.02503235707572181,18.098394165746868,723
24 2449.5360144376755,3.9129968281752006,48.72830581665039,4.190141018929445,0.026578323430598925,16.638030467554927,626
25 2248.9365841150284,3.6687383101387088,24.20957374572754,2.434784715027513,0.02334839300378598,14.312564911320806,613
26 2386.9925570487976,3.6221434856582664,24.51873779296875,2.503845528850179,0.028970138332347226,19.091321161016822,659
27 2558.578493118286,3.773714591619891,50.86576843261719,3.418055103617325,0.02585626285314384,17.530546214431524,678
28 2592.295235991478,3.635757694237697,52.358192443847656,3.2337805396374515,0.024524578845538565,17.486024716868997,713
29 2561.138155579567,3.2378484899868103,16.90852165222168,1.978250128109907,0.024490677895243416,19.37212621513754,791
30 3345.3579272031784,3.64815477339496,39.54557418823242,2.880069078600365,0.02579340783446507,23.65255498420447,917
31 2192.156372189522,3.4740988465761045,48.14958953857422,3.5506460162235087,0.027054107882283192,17.071142073720694,631
32 2484.008170723915,3.5384731776693945,37.6187629699707,2.9612951727148524,0.03286086464900407,23.068326983600855,702
33 1462.3458621501923,3.4735056108080578,22.076406478881836,2.3849241758099997,0.024276126959226194,10.220249449834228,421
34 2419.1333129405975,3.495857388642482,29.215726852416992,2.7948339211851914,0.03273452721762261,22.652292834594846,692
35 2687.440049767494,3.467664580345154,34.797386169433594,2.5354207818312107,0.026453086143780138,20.501141761429608,775
36 1468.780837059021,3.2785286541496004,19.688207626342773,1.8301759005766227,0.022607883232662322,10.12833168823272,448
37 Eik_out
38 1579.444641828537,3.6816891417914617,19.227346420288086,2.4975664779859987,0.031246154553893006,13.4046003036201,429
39 1612.8415837287903,3.895752617702392,19.052034378051758,2.577455127470621,0.030227775289564603,12.514298969879746,414
40 1352.4212625026703,3.8640607500076296,15.00854206085205,2.35411413545315,0.031208549745913063,10.922992411069572,350
41 1538.6859678030014,3.780555203447178,40.99676513671875,3.3523572759224476,0.029105583906027258,11.845972649753094,407
42 1225.0985703468323,3.3290722020294354,19.58705711364746,2.038351397338684,0.025498346643238936,9.383391564711928,368
43 1365.3871425390244,3.447947329644001,19.194652557373047,2.2193953246091485,0.025410288173441934,10.062474116683006,396
44 1097.9404437541962,2.9998372780169293,12.264142990112305,1.581511211694125,0.023072358251350823,8.444483119994402,366
45 1291.582367658615,3.2864691289023287,28.83696937561035,2.3913841440343515,0.022361759129560933,8.788171337917447,393
46 1363.1331936120987,3.549826025031507,19.18490219116211,2.6828781845914205,0.022771707088395488,8.744335521943867,384
47 Els_out
48 1359.8641113042831,3.2767809910946584,19.266313552856445,1.897638219600126,0.03115534636539867,12.929468741640449,415
49 1134.7650756835938,3.327756820186492,18.936323165893555,1.7635501819834738,0.03266596192182684,11.13909301534295,341
50 1632.902286529541,3.5040821599346375,24.11359214782715,2.5618395036682124,0.03067660743626466,14.295299065299332,466
51 1536.4152345657349,3.5565167466799417,27.18216896057129,2.786383289622822,0.030237345891590748,13.062533425167203,432
52 1107.7055238485336,3.886686048591346,22.485553741455078,2.9948413624608015,0.026233021696016455,7.476411183364689,285
53 1616.8189809322357,4.429641043649961,45.3355827331543,4.300393576628321,0.025648677525148815,9.361767296679318,365
54 1041.9242010116577,3.2764911981498672,20.875349044799805,2.3053497977427333,0.026208830522900482,8.334408106282353,318
55 1111.8425114154816,3.3897637543154926,34.425537109375,2.6968539571918693,0.02739228969780592,8.984671020880342,328
56 Esdoorn_out
57 1804.0408366918564,3.280074248530648,16.878116607666016,2.014352156832684,0.023109257851134647,12.710091818124056,550
58 1065.8392305374146,3.125628242045204,12.645761489868164,1.5616937783846487,0.023261115867152942,7.932040510699153,341
59 1443.1293832063675,3.164757419312209,13.824272155761719,1.6381495412391829,0.023636438981874994,10.778216175734997,456
60 2109.4739229679108,3.3859934558072404,22.446571350097656,1.9491651806275798,0.024649366696049755,15.356555451638997,623
61 566.1849731206894,3.494968969880799,14.277800559997559,2.26332032519058,0.02264520879489956,3.668523824773729,162
62 654.3276780843735,3.255361582509321,14.174254417419434,2.0223312092105425,0.0228689360798369,4.596656152047217,201
63 2245.0964748859406,3.6804860244031814,24.625778198242188,2.75325816629717,0.028883854125733258,17.619151016697288,610
64 2144.3980325460434,3.9060073452569095,23.537641525268555,2.982770847358778,0.0322847970131995,17.724353560246527,549
65 716.7942097187042,3.303199123127669,12.021895408630371,1.8694689392752937,0.022289771651033706,4.836880448274314,217
66 512.756842136383,3.308108658944407,12.388520240783691,1.9337408376098448,0.022146687284111975,3.4327365290373564,155
67 203.3936928510666,2.676232800671929,9.652430534362793,1.0712162703218076,0.01939073234404388,1.473695658147335,76
68 69.72195136547089,2.9050813068946204,8.56438159942627,1.3172613562659046,0.019768514127160113,0.4744443390518427,24
69 760.4716109037399,3.456689140471545,15.6034517288208,1.8629395593771183,0.022623810722407968,4.977238358929753,220
70 1182.883133649826,3.360463447868824,19.758787155151367,2.1385583241671227,0.022289208096811886,7.845801250077784,352
71 Es_out
72 321.85712587833405,2.7746303955028795,8.890114784240723,1.3376489632824087,0.01832420542707731,2.125607829540968,116
73 552.8187339305878,3.2328580931613318,10.130751609802246,1.8025538661742508,0.018092449095470513,3.093808795325458,171
74 588.2388911247253,3.0478699022006492,9.2846097946167,1.3144556549216149,0.017584343860649693,3.3937783651053905,193
75 394.3926087617874,3.1301000695379955,10.9545259475708,1.6391168134480771,0.017145832527487997,2.1603748984634876,126
76 553.2564067840576,2.8372123424823465,10.358263969421387,1.350251161044622,0.018460245196444867,3.599747813306749,195
77 338.75891745090485,2.7996604748008664,9.217413902282715,1.283988791527709,0.018358958323201363,2.221433957107365,121
78 720.4328188896179,3.0526814359729575,12.120339393615723,1.6056232318864754,0.018135199863937194,4.279907167889178,236
79 849.7654691934586,3.255806395377236,10.75560474395752,1.4615165188330932,0.018580378411459056,4.849478765390813,261
80 555.6458119153976,3.388084218996327,14.520678520202637,1.953400702594663,0.01816363431081721,2.9788360269740224,164
81 1692.7979286909103,3.632613580881782,20.59199333190918,2.3585647083456562,0.018669820646455615,8.700136421248317,466
82 749.9521169662476,3.1643549239082174,12.163043022155762,1.6879179665006827,0.01935904413335937,4.588093459606171,237
83 495.28962099552155,2.983672415635672,12.046462059020996,1.60246979233263,0.017850231289504522,2.9631383940577507,166
84 547.3506425619125,3.2008809506544593,12.70744514465332,1.6010494871239151,0.017072790629116066,2.9194471975788474,171
85 609.8123083114624,3.06438345885157,11.177712440490723,1.6252859374605053,0.01953577640087311,3.887619503773749,199
86 1049.4082342386246,3.915702366562032,40.334678649902344,4.186340109661006,0.021392696182618836,5.733242576941848,268
87 98.67310166358948,2.666840585502418,5.462077617645264,0.8816751949777557,0.018322708311717253,0.6779402075335383,37
88 Linde_out
89 2461.9480855464935,3.647330497105916,31.023351669311523,2.935188384240195,0.028290224722414103,19.09590168762952,675
90 1867.9105838537216,3.612979852715129,32.11227035522461,2.97824320863418,0.024062555778692377,12.440341337583959,517
91 2124.3844242095947,3.4099268446381936,25.51401710510254,2.3428222023628127,0.023997853738801436,14.950662879273295,623
92 1271.0833770036697,3.5210065844977003,30.341659545898438,2.694577657260915,0.022613988515928676,8.163649854250252,361
93 2168.191069126129,3.6379044783995456,22.332868576049805,2.5124689591930625,0.024711657454565966,14.728147842921317,596
94 2013.289783000946,3.653883453722225,25.39375114440918,2.890201927887927,0.024696742919714826,13.60790534876287,551
95 Plataan_out
96 393.0376785993576,6.238693311100914,54.77334213256836,8.288615256835522,0.018721998817036078,1.1794859254732728,63
97 121.42510282993317,3.0356275707483293,6.407865047454834,1.2202699276482052,0.018214209564030172,0.7285683825612068,40
98 535.1427782773972,2.9896244596502632,13.512324333190918,2.097842298338548,0.016643719497922413,2.979225790128112,179
99 90.34654986858368,3.1153982713304718,6.734649181365967,1.3800949819155952,0.015865142681989176,0.4600891377776861,29
100 437.9166510105133,2.9588962906115763,11.90050983428955,1.4047910909894616,0.01991794491186738,2.9478558469563723,148
101 165.1281417608261,2.580127215012908,4.76331090927124,0.7642263750567146,0.018476538331015036,1.1824984531849623,64
102 232.94678628444672,2.875886250425268,9.826898574829102,1.3727227350017257,0.019708929284487243,1.5964232720434666,81
103 332.89813327789307,3.78293333270333,22.732511520385742,3.045459303553181,0.019926275486465205,1.753512242808938,88
104 375.2972539663315,4.415261811368605,24.255054473876953,4.276442351754282,0.017834563169847516,1.515937869437039,85
105 55.11076760292053,3.061709311273363,9.913771629333496,1.935650105177096,0.017019378021359444,0.30634880438447,18
106 38.28573513031006,2.3928584456443787,3.611070394515991,0.5145855975780511,0.014993195189163089,0.23989112302660942,16
107 599.6391468048096,5.259992515831663,40.99736404418945,5.811482494116048,0.01938449298113323,2.2098321998491883,114
108 224.61611258983612,4.0110020105327875,38.507686614990234,6.750403253193775,0.01725217021469559,0.966121532022953,56
109 316.32959711551666,4.108176585915801,40.63800048828125,6.427567028038508,0.017561782018414566,1.3522572154179215,77
110 138.6963803768158,2.52175237048756,6.668946743011475,0.8272403842232803,0.016272347149523823,0.8949790932238102,55
111 241.65850698947906,3.0207313373684883,19.399702072143555,2.1353345471026124,0.017683570575900375,1.41468564607203,80

View File

@ -0,0 +1,179 @@
import numpy as np
import matplotlib.pyplot as plt
import cv2
import os
import math
def calcNormalFunc(mean : float, sd : float, len : int):
f = np.zeros(len, dtype=np.longdouble)
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))
max = np.amax(f)
min = np.amin(f)
for x in range(len):
f[x] = (f[x] - min) / (max - min)
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)]
## 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] = 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')

View File

@ -0,0 +1,37 @@
import numpy as np
import matplotlib.pyplot as plt
import math
mean = 125
sd = 20
N = 255
f = np.zeros(N, dtype=np.longdouble)
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
f = calcNormalFunc(mean, sd, N)
plt.title("PDF: $\mu = %d$, $\sigma = %d$"%(mean, sd))
plt.plot(f)
plt.grid()
plt.xlim(0, 255)
plt.ylim(0, 1.05)
plt.show()
print("Score at 1 sigma: %f"%f[sd+mean])
print("Score at 2 sigma: %f"%f[2*sd+mean])
print("Score at 3 sigma: %f"%f[3*sd+mean])

View File

@ -0,0 +1,86 @@
import numpy as np
import matplotlib.pyplot as plt
import csv
def isFloat(num):
try:
float(num)
return True
except ValueError:
return False
DATA_PATH = "src\\experiments\\algorithms\\data\\data.csv"
BARK_TYPES = 8
tot_mag = [["", []] for x in range(BARK_TYPES)]
avg_mag = [["", []] for x in range(BARK_TYPES)]
max_mag = [["", []] for x in range(BARK_TYPES)]
std_mag = [["", []] for x in range(BARK_TYPES)]
avg_rep = [["", []] for x in range(BARK_TYPES)]
max_rep = [["", []] for x in range(BARK_TYPES)]
counts = [["", []] for x in range(BARK_TYPES)]
i = 0
with open(DATA_PATH, 'r') as file:
reader = csv.reader(file, delimiter=',')
for row in reader:
if isFloat(row[0]):
tot_mag[i-1][1].append(float(row[0]))
avg_mag[i-1][1].append(float(row[1]))
max_mag[i-1][1].append(float(row[2]))
std_mag[i-1][1].append(float(row[3]))
avg_rep[i-1][1].append(float(row[4]))
max_rep[i-1][1].append(float(row[5]))
counts[i-1][1].append(float(row[6]))
else:
tot_mag[i][0] = row[0]
avg_mag[i][0] = row[0]
max_mag[i][0] = row[0]
std_mag[i][0] = row[0]
avg_rep[i][0] = row[0]
max_rep[i][0] = row[0]
counts[i][0] = row[0]
i += 1
fig, axs = plt.subplots(2, 3)
for i in range(BARK_TYPES):
axs[0, 0].scatter(tot_mag[i][1], avg_mag[i][1], label=tot_mag[i][0], alpha=0.6)
axs[0, 1].scatter(tot_mag[i][1], max_mag[i][1], label=tot_mag[i][0], alpha=0.6)
axs[1, 0].scatter(tot_mag[i][1], std_mag[i][1], label=tot_mag[i][0], alpha=0.6)
axs[1, 1].scatter(tot_mag[i][1], counts[i][1], label=tot_mag[i][0], alpha=0.6)
axs[0, 2].scatter(tot_mag[i][1], avg_rep[i][1], label=tot_mag[i][0], alpha=0.6)
axs[1, 2].scatter(avg_rep[i][1], max_rep[i][1], label=tot_mag[i][0], alpha=0.6)
axs[0, 0].set_xlabel("Total")
axs[0, 0].set_ylabel("Average")
axs[0, 0].grid()
axs[0, 0].legend()
axs[0, 1].set_xlabel("Total")
axs[0, 1].set_ylabel("Maximum")
axs[0, 1].grid()
axs[0, 1].legend()
axs[1, 0].set_xlabel("Total")
axs[1, 0].set_ylabel("Standard deviation")
axs[1, 0].grid()
axs[1, 0].legend()
axs[1, 1].set_xlabel("Total")
axs[1, 1].set_ylabel("Count")
axs[1, 1].grid()
axs[1, 1].legend()
axs[0, 2].set_xlabel("Total")
axs[0, 2].set_ylabel("Average response")
axs[0, 2].grid()
axs[0, 2].legend()
axs[1, 2].set_xlabel("Average response")
axs[1, 2].set_ylabel("Max response")
axs[1, 2].grid()
axs[1, 2].legend()
plt.show()

View File

@ -1,69 +0,0 @@
import numpy as np
import cv2
import os
import matplotlib.pyplot as plt
import math
avg_magnitudes = np.zeros(10)
max_magnitudes = np.zeros(10)
avg_angle = np.zeros(10)
counts = np.zeros(10)
i = 0
for filename in os.listdir(os.path.join(os.getcwd(), "./res/trees/")):
## Load an image ##
directory = os.path.join(os.getcwd(), "./res/trees/")
path = os.path.join(directory, filename)
img = cv2.imread(path, 0)
## Detect Keypoints ##
sift = cv2.SIFT.create(enable_precise_upscale=True)
kp = sift.detect(img, None)
img = cv2.drawKeypoints(
img,
kp,
img,
flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
## Average and Max size ##
magnitudes = [keypoint.size for keypoint in kp]
max_magnitudes[i] = np.amax(magnitudes)
avg_magnitudes[i] = np.sum(magnitudes)/len(kp)
## Number of keypoints ##
counts[i] = len(kp)
## Average angle ##
angle_radians = [math.radians(keypoint.angle) for keypoint in kp]
sum_sin = sum(math.sin(angle) for angle in angle_radians)
sum_cos = sum(math.cos(angle) for angle in angle_radians)
avg_angle_rad = math.atan2(sum_sin, sum_cos)
avg_angle[i] = math.degrees(avg_angle_rad) % 360
i += 1
# break
# cv2.imshow("output", img)
# cv2.waitKey(0)
plt.scatter(counts, avg_magnitudes)
plt.title("Hoeveelheid keypoints vs gemiddelde magnitude")
plt.grid()
plt.show()
plt.scatter(counts, max_magnitudes)
plt.title("Hoeveelheid keypoints vs maximale magnitude")
plt.grid()
plt.show()
plt.scatter(avg_magnitudes, max_magnitudes)
plt.title("gemiddelde magnitude vs maximale magnitude")
plt.grid()
plt.show()
plt.scatter(counts, avg_angle)
plt.title("Hoeveelheid keypoints vs gemiddelde hoek")
plt.grid()
plt.show()
cv2.destroyAllWindows()

View File

@ -2,13 +2,14 @@ import numpy as np
import cv2 import cv2
import os import os
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
import csv
import pandas as pd
DATASET_PATH = "C:\\Users\\tomse\\Downloads\\Dataset\\" DATASET_PATH = "C:\\Users\\Tom\\Downloads\\Dataset_out\\"
CSV_PATH = "C:\\Users\\Tom\\Desktop\\Files\\Repositories\\EV5_Beeldherk_Bomen\\src\\experiments\\algorithms\\data\\"
DATASET_FOLDERS_LEN = len(os.listdir(DATASET_PATH)) DATASET_FOLDERS_LEN = len(os.listdir(DATASET_PATH))
EARLY_BREAK = 0 EARLY_BREAK = 0
SCALE = 1 SCALE = .25
# Plataan, Berk, Accasia
sift = cv2.SIFT.create(enable_precise_upscale=True) sift = cv2.SIFT.create(enable_precise_upscale=True)
@ -16,6 +17,9 @@ sift = cv2.SIFT.create(enable_precise_upscale=True)
max_magnitudes = [[] for x in range(DATASET_FOLDERS_LEN)] max_magnitudes = [[] for x in range(DATASET_FOLDERS_LEN)]
avg_magnitudes = [[] for x in range(DATASET_FOLDERS_LEN)] avg_magnitudes = [[] for x in range(DATASET_FOLDERS_LEN)]
tot_magnitudes = [[] for x in range(DATASET_FOLDERS_LEN)] tot_magnitudes = [[] for x in range(DATASET_FOLDERS_LEN)]
std_magnitudes = [[] for x in range(DATASET_FOLDERS_LEN)]
max_responses = [[] for x in range(DATASET_FOLDERS_LEN)]
avg_responses = [[] for x in range(DATASET_FOLDERS_LEN)]
counts = [[] for x in range(DATASET_FOLDERS_LEN)] counts = [[] for x in range(DATASET_FOLDERS_LEN)]
## Create other variables ## ## Create other variables ##
@ -50,17 +54,23 @@ for folder in os.listdir(DATASET_PATH):
tot_magnitudes[i].append(np.sum(magnitudes)) tot_magnitudes[i].append(np.sum(magnitudes))
max_magnitudes[i].append(np.amax(magnitudes)) max_magnitudes[i].append(np.amax(magnitudes))
avg_magnitudes[i].append(np.sum(magnitudes)/len(kp)) avg_magnitudes[i].append(np.sum(magnitudes)/len(kp))
std_magnitudes[i].append(np.std(magnitudes))
## Number of keypoints ## ## Number of keypoints ##
counts[i].append(len(kp)) counts[i].append(len(kp))
## Response ##
responses = [keypoint.response for keypoint in kp]
max_responses[i].append(np.sum(responses))
avg_responses[i].append(np.mean(responses))
# cv2.imshow("Opencv tech", image) # cv2.imshow("Opencv tech", image)
# cv2.waitKey(0) # cv2.waitKey(0)
## Store labels ## ## Store labels ##
labels[i] = folder labels[i] = folder
## Increment folder ## ## Increment arrays ##
i += 1 i += 1
if(i == EARLY_BREAK): if(i == EARLY_BREAK):
@ -68,8 +78,21 @@ for folder in os.listdir(DATASET_PATH):
print("Done!") print("Done!")
## CSV ##
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])):
file.write(str(tot_magnitudes[i][j]) + ',')
file.write(str(avg_magnitudes[i][j]) + ',')
file.write(str(max_magnitudes[i][j]) + ',')
file.write(str(std_magnitudes[i][j]) + ',')
file.write(str(avg_responses[i][j]) + ',')
file.write(str(max_responses[i][j]) + ',')
file.write(str(counts[i][j]) + '\n')
## Plots ## ## Plots ##
fig, ax = plt.subplots() # fig, ax = plt.subplots()
# for i in range(DATASET_FOLDERS_LEN): # for i in range(DATASET_FOLDERS_LEN):
# ax.scatter(tot_magnitudes[i], max_magnitudes[i],label=labels[i], alpha=0.7) # ax.scatter(tot_magnitudes[i], max_magnitudes[i],label=labels[i], alpha=0.7)
# ax.scatter(avg_magnitudes[0], max_magnitudes[0], label=labels[0], alpha=0.7) # ax.scatter(avg_magnitudes[0], max_magnitudes[0], label=labels[0], alpha=0.7)
@ -80,11 +103,11 @@ fig, ax = plt.subplots()
# ax.grid(True) # ax.grid(True)
# plt.show() # plt.show()
ax.scatter(tot_magnitudes[2], max_magnitudes[2], label='Berk', alpha=0.7) # ax.scatter(tot_magnitudes[2], max_magnitudes[2], label='Berk', alpha=0.7)
ax.scatter(tot_magnitudes[3], max_magnitudes[3], label='Els', alpha=0.7) # ax.scatter(tot_magnitudes[3], max_magnitudes[3], label='Els', alpha=0.7)
ax.scatter(tot_magnitudes[7], max_magnitudes[7], label='Plataan', alpha=0.7) # ax.scatter(tot_magnitudes[7], max_magnitudes[7], label='Plataan', alpha=0.7)
ax.set_xlabel("Total magnitude") # ax.set_xlabel("Total magnitude")
ax.set_ylabel("Maximal magnitude") # ax.set_ylabel("Maximal magnitude")
ax.legend() # ax.legend()
ax.grid(True) # ax.grid(True)
plt.show() # plt.show()

View File

@ -92,13 +92,16 @@ detector_params.adaptiveThreshWinSizeMax = 150 # Takes longer, but better chance
dictionary = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_ARUCO_ORIGINAL) dictionary = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_ARUCO_ORIGINAL)
detector = cv2.aruco.ArucoDetector(dictionary, detector_params) detector = cv2.aruco.ArucoDetector(dictionary, detector_params)
images_converted = 0
images_skipped = 0
### IMAGE CONVERSIE ### ### IMAGE CONVERSIE ###
for folder in os.listdir(input_directory): for folder in os.listdir(input_directory):
if folder.endswith('.py'): if folder.endswith('.py'):
print("Skipping", folder) print("Skipping", folder)
continue continue
if folder.endswith('.jpg'): if folder.lower().endswith('.jpg'):
continue continue
if SAVE: if SAVE:
@ -147,10 +150,12 @@ for folder in os.listdir(input_directory):
if ids is None: if ids is None:
print("Skipping: ", filename) print("Skipping: ", filename)
print("=============================================") print("=============================================")
images_skipped += 1
continue continue
if len(ids) != 4: if len(ids) != 4:
print("Skipping: ", filename) print("Skipping: ", filename)
print("=============================================") print("=============================================")
images_skipped += 1
continue continue
if VERBOSE: if VERBOSE:
@ -246,5 +251,10 @@ for folder in os.listdir(input_directory):
cv2.waitKey(0) cv2.waitKey(0)
if VERBOSE: if VERBOSE:
print("=============================================") print("=============================================")
images_converted += 1
if VERBOSE:
print("%d van de %d succesvol"
%(images_converted, (images_converted+images_skipped)))
cv2.destroyAllWindows() cv2.destroyAllWindows()

View File

@ -1,4 +1,5 @@
import numpy as np import numpy as np
import math
def imgStats(img): def imgStats(img):
mean = np.zeros(3) mean = np.zeros(3)
@ -6,4 +7,20 @@ def imgStats(img):
for i in range(img.shape[2]): for i in range(img.shape[2]):
mean[i] = np.mean(img[:, :, i]) mean[i] = np.mean(img[:, :, i])
std[i] = np.std(img[:, :, i]) std[i] = np.std(img[:, :, i])
return mean, std return mean, std
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

View File

@ -281,6 +281,9 @@ class MainApp:
images = [] images = []
for file in glob.glob(path + "/*.jpg"): for file in glob.glob(path + "/*.jpg"):
images.append(file) images.append(file)
for file in glob.glob(path + "/*.png"):
images.append(file)
self.img_max = len(images) self.img_max = len(images)
self.img_name = os.path.split(images[self.img_current]) self.img_name = os.path.split(images[self.img_current])