arnaucube
arnaucube/galdricPublic Self-hosted repository
added filtered images analysis to neighbours
arnaucode idoctnef@openmailbox.org
Sat, 01 Jul 2017 01:55:49 +0200
commit

d0c35f8de81cbc2aa107b0dfb9bf0863c3bad11a

parent

03f62889e757a981c80fba0c638da2635dd7cea3

4 files changed, 39 insertions(+), 31 deletions(-)

jump to
M imageOperations.go → imageOperations.go

@@ -19,9 +19,7 @@ var err error

switch imageExtension { case "png": img, err = png.Decode(reader) - case "jpg": - img, err = jpeg.Decode(reader) - case "jpeg": + case "jpg", "jpeg": img, err = jpeg.Decode(reader) default: img = nil

@@ -38,9 +36,7 @@ var err error

switch imageExtension { case "png": err = png.Encode(buf, img) - case "jpg": - err = jpeg.Encode(buf, img, nil) - case "jpeg": + case "jpg", "jpeg": err = jpeg.Encode(buf, img, nil) default: img = nil
M knn.go → knn.go

@@ -5,6 +5,11 @@ "fmt"

"sort" ) +type Neighbour struct { + Dist float64 + Label string +} + func euclideanDist(img1, img2 [][]float64) float64 { var dist float64 for i := 0; i < len(img1); i++ {

@@ -14,11 +19,6 @@ }

} return dist -} - -type Neighbour struct { - Dist float64 - Label string } func isNeighbour(neighbours []Neighbour, dist float64, label string) []Neighbour {

@@ -71,30 +71,39 @@ fmt.Println(a)

//send the most appeared neighbour in k return a[0].Label } + +func distNeighboursFromDataset(dataset Dataset, neighbours []Neighbour, input [][]float64) []Neighbour { + //check the complete dataset, checking if each entry is a k nearest neighbour + for l, v := range dataset { + for i := 0; i < len(v); i++ { + dNew := euclideanDist(v[i], input) + neighbours = isNeighbour(neighbours, dNew, l) + } + } + return neighbours +} func knn(dataset Dataset, input [][]float64) string { - k := 10 + k := 6 var neighbours []Neighbour + var neighboursED []Neighbour + + //get a key from map dataset, the key is a label label := getMapKey(dataset) + //fill the first k neighbours for i := 0; i < k; i++ { - /*neighbours[i].Dist = euclideanDist(dataset["leopard"][0], input) - neighbours[i].Label = "leopard"*/ neighbours = append(neighbours, Neighbour{euclideanDist(dataset[label][0], input), label}) - } - for l, v := range dataset { - for i := 0; i < len(v); i++ { - dNew := euclideanDist(v[i], input) - /*if dNew < d { - d = dNew - label = l - }*/ - neighbours = isNeighbour(neighbours, dNew, l) - } + neighboursED = append(neighbours, Neighbour{euclideanDist(dataset[label][0], input), label}) } + + neighbours = distNeighboursFromDataset(dataset, neighbours, input) + neighboursED = distNeighboursFromDataset(datasetED, neighbours, input) + neighbours = append(neighbours, neighboursED...) + for i := 0; i < len(neighbours); i++ { fmt.Print(neighbours[i].Label + " - ") fmt.Println(neighbours[i].Dist) } - + //from the k nearest neighbours, get the more frequent neighbour r := averageLabel(neighbours) return r }
M main.go → main.go

@@ -10,13 +10,14 @@ )

//dataset := make(Dataset) var dataset Dataset +var datasetED Dataset func main() { readConfig("./config.json") c.Cyan("reading images datasets") tStart := time.Now() - dataset = readDataset("./dataset") + dataset, datasetED = readDataset("./dataset") fmt.Print("time spend reading images: ") fmt.Println(time.Since(tStart)) fmt.Println("total folders scanned: " + strconv.Itoa(len(dataset)))
M readDataset.go → readDataset.go

@@ -42,33 +42,35 @@ histogram := imageToHistogram(image)

return histogram */ } -func readDataset(path string) map[string]ImgDataset { +func readDataset(path string) (Dataset, Dataset) { dataset := make(Dataset) + datasetED := make(Dataset) folders, _ := ioutil.ReadDir(path) for _, folder := range folders { fmt.Println(folder.Name()) var imgDataset ImgDataset + var imgDatasetED ImgDataset folderFiles, _ := ioutil.ReadDir(path + "/" + folder.Name()) for _, file := range folderFiles { //get the image as original image := readImage(path + "/" + folder.Name() + "/" + file.Name()) histogram := imageToHistogram(image) + imgDataset = append(imgDataset, histogram) //get the image with EdgeDetection filter imageED := EdgeDetection(image) histogramED := imageToHistogram(imageED) - - imgDataset = append(imgDataset, histogram) - imgDataset = append(imgDataset, histogramED) + imgDatasetED = append(imgDatasetED, histogramED) } //add the foldername to the Dataset map dataset[folder.Name()] = imgDataset + datasetED[folder.Name()] = imgDatasetED } - return dataset + return dataset, datasetED }