# extend picture relation with distdata objects for all avaliable types: let images2 = images feed extend[ hsv128: getdistdata2(.Pic, hsv128), hsv256: getdistdata2(.Pic, hsv256), lab256: getdistdata2(.Pic, lab256), hsv128_ncompr: getdistdata2(.Pic, hsv128_ncompr), hsv256_ncompr: getdistdata2(.Pic, hsv256_ncompr), lab256_ncompr: getdistdata2(.Pic, lab256_ncompr)] consume; # create mtrees for all avaliable data and distance function types: # (using default config object) let mt_hsv128E = images2 createmtree2[hsv128, default, euclid]; let mt_hsv128Q = images2 createmtree2[hsv128, default, quadratic]; let mt_hsv256E = images2 createmtree2[hsv256, default, euclid]; let mt_hsv256Q = images2 createmtree2[hsv256, default, quadratic]; let mt_lab256E = images2 createmtree2[lab256, default, euclid]; let mt_lab256Q = images2 createmtree2[lab256, default, quadratic]; let mt_hsv128E_ncompr = images2 createmtree2[hsv128_ncompr, default, euclid]; let mt_hsv128Q_ncompr = images2 createmtree2[hsv128_ncompr, default, quadratic]; let mt_hsv256E_ncompr = images2 createmtree2[hsv256_ncompr, default, euclid]; let mt_hsv256Q_ncompr = images2 createmtree2[hsv256_ncompr, default, quadratic]; let mt_lab256E_ncompr = images2 createmtree2[lab256_ncompr, default, euclid]; let mt_lab256Q_ncompr = images2 createmtree2[lab256_ncompr, default, quadratic]; # create a mtree with default values from picture attribute query images createmtree[Pic]; # createmtree3 operator (only needed for non-distdata attributes - distdata will # also work, but the last parameter is ignored in this case, leading to the same # signature as createmtree2) let mt = images createmtree3[Pic, mlbdistHP, euclid, lab256]; let mt = images createmtree3[Pic, randomBal, quadratic, hsv256]; # example search querries (assuming an existung picture p1) # The relation must contain at least the tuples-ids, that had been indized in # the mtree, otherwhise the query would lead to a crash in the current version! query mt_lab256E nnsearch(images, p1, 10); query mt_lab256E rangesearch(images, p1, 0.1); # examples for gdistance operator (assuming two pictures p1 and p2) query gdistance(p1, p2); query gdistance2(p1, p2, quadratic); query gdistance3(p1, p2, euclid, lab256); query gdistance3(p1, p2, euclid, hsv256); # the same gdistance queries with distdata attributes: # # create distdata attributes: let dd1 = getdistdata(p1); let dd2 = getdistdata(p2); let dd1_lab256 = getdistdata2(p1, lab256); let dd2_lab256 = getdistdata2(p2, lab256); let dd1_hsv256 = getdistdata2(p1, hsv256); let dd2_hsv256 = getdistdata2(p2, hsv256); # use distdata attributes to compute the distance between p1 and p2: query gdistance(dd1, dd2); query gdistance2(dd1, dd2, quadratic); query gdistance2(dd1_lab256, dd2_lab256, euclid); query gdistance2(dd1_hsv256, dd2_hsv256, euclid);