mirror of https://bitbucket.org/ausocean/av.git
Updated experiment
This commit is contained in:
parent
6622c884ea
commit
f87dee289f
|
@ -14,17 +14,14 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
nImages = 6
|
nImages = 13
|
||||||
nSamples = 10
|
nSamples = 10
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
nImages := 6
|
|
||||||
nSamples := 10
|
|
||||||
|
|
||||||
// Load template and standard image.
|
// Load template and standard image.
|
||||||
template := gocv.IMRead("template.jpg", gocv.IMReadGrayScale)
|
template := gocv.IMRead("template.jpg", gocv.IMReadGrayScale)
|
||||||
standard := gocv.IMRead("standard.jpg", gocv.IMReadGrayScale)
|
standard := gocv.IMRead("default.jpg", gocv.IMReadGrayScale)
|
||||||
|
|
||||||
imgs := make([][]gocv.Mat, nImages)
|
imgs := make([][]gocv.Mat, nImages)
|
||||||
|
|
||||||
|
@ -40,7 +37,7 @@ func main() {
|
||||||
ts := TurbiditySensor{template: template, standard: standard, k1: 90, k2: 90, scale: 5.0, alpha: 1.0}
|
ts := TurbiditySensor{template: template, standard: standard, k1: 90, k2: 90, scale: 5.0, alpha: 1.0}
|
||||||
|
|
||||||
var finalRes Results
|
var finalRes Results
|
||||||
finalRes.New(nImages)
|
finalRes.new(nImages)
|
||||||
|
|
||||||
// Score each image by calculating the average score from camera burst.
|
// Score each image by calculating the average score from camera burst.
|
||||||
for i := range imgs {
|
for i := range imgs {
|
||||||
|
@ -52,7 +49,7 @@ func main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the average result from camera burst.
|
// Add the average result from camera burst.
|
||||||
finalRes.Update(average(sample_result.saturation), average(sample_result.contrast), float64(i*10), i)
|
finalRes.update(average(sample_result.saturation), average(sample_result.contrast), float64(i*10), i)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Plot the final results.
|
// Plot the final results.
|
||||||
|
@ -91,7 +88,6 @@ func normalize(slice []float64) []float64 {
|
||||||
for i := range slice {
|
for i := range slice {
|
||||||
out[i] = (slice[i] - min) / (max - min)
|
out[i] = (slice[i] - min) / (max - min)
|
||||||
}
|
}
|
||||||
|
|
||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,7 +99,6 @@ func average(slice []float64) float64 {
|
||||||
for i := range slice {
|
for i := range slice {
|
||||||
out += slice[i]
|
out += slice[i]
|
||||||
}
|
}
|
||||||
|
|
||||||
return out / float64(len(slice))
|
return out / float64(len(slice))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -120,11 +115,9 @@ func plotResults(x, saturation, contrast []float64) error {
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Could not plot results: %w", err)
|
return fmt.Errorf("Could not plot results: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,14 +7,14 @@ type Results struct {
|
||||||
contrast []float64
|
contrast []float64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Results) New(n int) {
|
func (r *Results) new(n int) {
|
||||||
r.turbidity = make([]float64, n)
|
r.turbidity = make([]float64, n)
|
||||||
r.saturation = make([]float64, n)
|
r.saturation = make([]float64, n)
|
||||||
r.contrast = make([]float64, n)
|
r.contrast = make([]float64, n)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update results to add new values at specified index.
|
// Update results to add new values at specified index.
|
||||||
func (r *Results) Update(saturation, contrast, turbidity float64, index int) {
|
func (r *Results) update(saturation, contrast, turbidity float64, index int) {
|
||||||
r.saturation[index] = saturation
|
r.saturation[index] = saturation
|
||||||
r.contrast[index] = contrast
|
r.contrast[index] = contrast
|
||||||
r.turbidity[index] = turbidity
|
r.turbidity[index] = turbidity
|
||||||
|
|
|
@ -20,7 +20,7 @@ type TurbiditySensor struct {
|
||||||
func (ts TurbiditySensor) Evaluate(imgs []gocv.Mat) (Results, error) {
|
func (ts TurbiditySensor) Evaluate(imgs []gocv.Mat) (Results, error) {
|
||||||
|
|
||||||
var result Results
|
var result Results
|
||||||
result.New(len(imgs))
|
result.new(len(imgs))
|
||||||
|
|
||||||
for i := range imgs {
|
for i := range imgs {
|
||||||
|
|
||||||
|
@ -33,13 +33,16 @@ func (ts TurbiditySensor) Evaluate(imgs []gocv.Mat) (Results, error) {
|
||||||
// Apply sobel filter.
|
// Apply sobel filter.
|
||||||
edge := ts.Sobel(marker, ts.scale)
|
edge := ts.Sobel(marker, ts.scale)
|
||||||
|
|
||||||
|
gocv.IMWrite("marker.jpg", marker)
|
||||||
|
gocv.IMWrite("edge.jpg", edge)
|
||||||
|
|
||||||
// Evaluate image.
|
// Evaluate image.
|
||||||
out, err := ts.EvaluateImage(marker, edge, ts.k1, ts.k2, ts.alpha)
|
out, err := ts.EvaluateImage(marker, edge, ts.k1, ts.k2, ts.alpha)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
|
|
||||||
result.Update(out[0], out[1], float64(i*10), i)
|
result.update(out[0], out[1], float64(i*10), i)
|
||||||
}
|
}
|
||||||
|
|
||||||
return result, nil
|
return result, nil
|
||||||
|
@ -48,7 +51,6 @@ func (ts TurbiditySensor) Evaluate(imgs []gocv.Mat) (Results, error) {
|
||||||
// Evaluate image sharpness and contrast using blocks of size k1 by k2. Return a slice of the respective scores.
|
// Evaluate image sharpness and contrast using blocks of size k1 by k2. Return a slice of the respective scores.
|
||||||
func (ts TurbiditySensor) EvaluateImage(img, edge gocv.Mat, k1, k2 int, alpha float64) ([]float64, error) {
|
func (ts TurbiditySensor) EvaluateImage(img, edge gocv.Mat, k1, k2 int, alpha float64) ([]float64, error) {
|
||||||
|
|
||||||
// Slice to store results.
|
|
||||||
result := make([]float64, 2) // [0.0, 0.0]
|
result := make([]float64, 2) // [0.0, 0.0]
|
||||||
|
|
||||||
if img.Rows()%k1 != 0 || img.Cols()%k2 != 0 {
|
if img.Rows()%k1 != 0 || img.Cols()%k2 != 0 {
|
||||||
|
@ -127,9 +129,9 @@ func (ts TurbiditySensor) Transform(img gocv.Mat) (gocv.Mat, error) {
|
||||||
corners_template := gocv.NewMat()
|
corners_template := gocv.NewMat()
|
||||||
|
|
||||||
// Find corners in image.
|
// Find corners in image.
|
||||||
if !gocv.FindChessboardCorners(img, image.Pt(3, 3), &corners_img, gocv.CalibCBNormalizeImage) {
|
if !gocv.FindChessboardCorners(ts.standard, image.Pt(3, 3), &corners_img, gocv.CalibCBNormalizeImage) {
|
||||||
// Apply default if transformation fails.
|
// Apply default if transformation fails.
|
||||||
// fmt.Println("Corner detection failed applying standard transformation")
|
fmt.Println("Corner detection failed applying standard transformation")
|
||||||
if !gocv.FindChessboardCorners(ts.standard, image.Pt(3, 3), &corners_img, gocv.CalibCBNormalizeImage) {
|
if !gocv.FindChessboardCorners(ts.standard, image.Pt(3, 3), &corners_img, gocv.CalibCBNormalizeImage) {
|
||||||
return out, errors.New("Could not find corners in default image")
|
return out, errors.New("Could not find corners in default image")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue