added filtered images analysis to neighbours
arnaucode idoctnef@openmailbox.org
Sat, 01 Jul 2017 01:55:49 +0200
4 files changed,
39 insertions(+),
31 deletions(-)
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 }