diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..1d3a9b4 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module github.com/firestuff/goplate + +go 1.18 diff --git a/main.go b/main.go new file mode 100644 index 0000000..2a0d3b7 --- /dev/null +++ b/main.go @@ -0,0 +1,154 @@ +package main + +import ( + "fmt" + "image" + "image/color" + "image/png" + "math" + "net/http" + "os" + + _ "image/jpeg" +) + +func max16(a, b uint16) uint16 { + if a > b { + return a + } else { + return b + } +} + +func max32(a, b uint32) uint32 { + if a > b { + return a + } else { + return b + } +} + +func maxDiff(a, d1, d2 uint32) uint32 { + var d uint32 + if d1 > d2 { + d = d1 - d2 + } else { + d = d2 - d1 + } + + return max32(a, d) +} + +func detectEdges(src image.Image) *image.Gray16 { + bounds := src.Bounds() + ret := image.NewGray16(bounds) + + for y := bounds.Min.Y + 1; y < bounds.Max.Y; y++ { + for x := bounds.Min.X + 1; x < bounds.Max.X; x++ { + inr, ing, inb, _ := src.At(x, y).RGBA() + tempr, tempg, tempb, _ := src.At(x - 1, y - 1).RGBA() + + var c uint32 + c = maxDiff(c, inr, tempr) + c = maxDiff(c, ing, tempg) + c = maxDiff(c, inb, tempb) + + outc := color.Gray16{Y: uint16(c)} + ret.Set(x, y, outc) + } + } + + return ret +} + +func loadImage(path string) (image.Image, error) { + fh, err := os.Open(path) + if err != nil { + return nil, err + } + defer fh.Close() + + img, _, err := image.Decode(fh) + if err != nil { + return nil, err + } + + return img, nil +} + +func normalize(src *image.Gray16) *image.Gray16 { + bounds := src.Bounds() + var m uint16 + + for y := bounds.Min.Y + 1; y < bounds.Max.Y; y++ { + for x := bounds.Min.X + 1; x < bounds.Max.X; x++ { + m = max16(m, src.Gray16At(x, y).Y) + } + } + + scale := math.MaxUint16 / m + ret := image.NewGray16(bounds) + + for y := bounds.Min.Y + 1; y < bounds.Max.Y; y++ { + for x := bounds.Min.X + 1; x < bounds.Max.X; x++ { + c := src.Gray16At(x, y) + c.Y *= scale + ret.Set(x, y, c) + } + } + + return ret +} + +func find(shape, img *image.Gray16) { + sb := shape.Bounds() + imgb := img.Bounds() + + for y := imgb.Min.Y; y < imgb.Max.Y - (sb.Max.Y - sb.Min.Y); y++ { + for x := imgb.Min.X; x < imgb.Max.X - (sb.Max.X - sb.Min.X); x++ { + score(shape, img, x, y) + } + } +} + +func score(shape, img *image.Gray16, ox, oy int) { + sb := shape.Bounds() + imgb := img.Bounds() + + for y := sb.Min.Y; y < sb.Max.Y; y++ { + for x := sb.Min.X; x < sb.Max.X; x++ { + // imgy := oy + y + // + + } + } +} + +func test(w http.ResponseWriter, req *http.Request) { + w.Header().Add("Content-Type", "image/png") + + t, err := loadImage("shapes/T.png") + if err != nil { + panic(err) + } + te := detectEdges(t) + + src, err := loadImage("samples/big.png") + if err != nil { + panic(err) + } + srce := detectEdges(src) + + find(te, srce) + + err = png.Encode(w, srce) + if err != nil { + panic(err) + } +} + +func main() { + fmt.Printf("starting...\n") + http.HandleFunc("/test", test) + http.ListenAndServe(":8090", nil) +} diff --git a/samples/Alabama.jpg b/samples/Alabama.jpg new file mode 100644 index 0000000..070a3c4 Binary files /dev/null and b/samples/Alabama.jpg differ diff --git a/samples/Alaska.jpg b/samples/Alaska.jpg new file mode 100644 index 0000000..9195267 Binary files /dev/null and b/samples/Alaska.jpg differ diff --git a/samples/Arizona.jpg b/samples/Arizona.jpg new file mode 100644 index 0000000..d45fdf2 Binary files /dev/null and b/samples/Arizona.jpg differ diff --git a/samples/Arkansas.jpg b/samples/Arkansas.jpg new file mode 100644 index 0000000..ba08758 Binary files /dev/null and b/samples/Arkansas.jpg differ diff --git a/samples/California.jpg b/samples/California.jpg new file mode 100644 index 0000000..ec0a46e Binary files /dev/null and b/samples/California.jpg differ diff --git a/samples/Colorado.jpg b/samples/Colorado.jpg new file mode 100644 index 0000000..9aab968 Binary files /dev/null and b/samples/Colorado.jpg differ diff --git a/samples/Connecticut.jpg b/samples/Connecticut.jpg new file mode 100644 index 0000000..a18f979 Binary files /dev/null and b/samples/Connecticut.jpg differ diff --git a/samples/Delaware.jpg b/samples/Delaware.jpg new file mode 100644 index 0000000..6775147 Binary files /dev/null and b/samples/Delaware.jpg differ diff --git a/samples/DistrictOfColumbia.jpg b/samples/DistrictOfColumbia.jpg new file mode 100644 index 0000000..0353065 Binary files /dev/null and b/samples/DistrictOfColumbia.jpg differ diff --git a/samples/Florida.jpg b/samples/Florida.jpg new file mode 100644 index 0000000..2c1fc01 Binary files /dev/null and b/samples/Florida.jpg differ diff --git a/samples/Georgia.jpg b/samples/Georgia.jpg new file mode 100644 index 0000000..4b69b7f Binary files /dev/null and b/samples/Georgia.jpg differ diff --git a/samples/Guam.jpg b/samples/Guam.jpg new file mode 100644 index 0000000..49e793f Binary files /dev/null and b/samples/Guam.jpg differ diff --git a/samples/Hawaii.jpg b/samples/Hawaii.jpg new file mode 100644 index 0000000..78fcea8 Binary files /dev/null and b/samples/Hawaii.jpg differ diff --git a/samples/Idaho.jpg b/samples/Idaho.jpg new file mode 100644 index 0000000..067f978 Binary files /dev/null and b/samples/Idaho.jpg differ diff --git a/samples/Illinois.jpg b/samples/Illinois.jpg new file mode 100644 index 0000000..a590e2c Binary files /dev/null and b/samples/Illinois.jpg differ diff --git a/samples/Indiana.jpg b/samples/Indiana.jpg new file mode 100644 index 0000000..bf16ae6 Binary files /dev/null and b/samples/Indiana.jpg differ diff --git a/samples/Iowa.jpg b/samples/Iowa.jpg new file mode 100644 index 0000000..5c43abd Binary files /dev/null and b/samples/Iowa.jpg differ diff --git a/samples/Kansas.jpg b/samples/Kansas.jpg new file mode 100644 index 0000000..076f862 Binary files /dev/null and b/samples/Kansas.jpg differ diff --git a/samples/Kentucky.jpg b/samples/Kentucky.jpg new file mode 100644 index 0000000..4c6949f Binary files /dev/null and b/samples/Kentucky.jpg differ diff --git a/samples/Louisiana.jpg b/samples/Louisiana.jpg new file mode 100644 index 0000000..a118031 Binary files /dev/null and b/samples/Louisiana.jpg differ diff --git a/samples/Maine.jpg b/samples/Maine.jpg new file mode 100644 index 0000000..e06c2d3 Binary files /dev/null and b/samples/Maine.jpg differ diff --git a/samples/Maryland.jpg b/samples/Maryland.jpg new file mode 100644 index 0000000..203e465 Binary files /dev/null and b/samples/Maryland.jpg differ diff --git a/samples/Massachusetts.jpg b/samples/Massachusetts.jpg new file mode 100644 index 0000000..c785165 Binary files /dev/null and b/samples/Massachusetts.jpg differ diff --git a/samples/Michigan.jpg b/samples/Michigan.jpg new file mode 100644 index 0000000..b24ec00 Binary files /dev/null and b/samples/Michigan.jpg differ diff --git a/samples/Minnesota.jpg b/samples/Minnesota.jpg new file mode 100644 index 0000000..36bf530 Binary files /dev/null and b/samples/Minnesota.jpg differ diff --git a/samples/Mississippi.jpg b/samples/Mississippi.jpg new file mode 100644 index 0000000..9e2afce Binary files /dev/null and b/samples/Mississippi.jpg differ diff --git a/samples/Missouri.jpg b/samples/Missouri.jpg new file mode 100644 index 0000000..18a5ac7 Binary files /dev/null and b/samples/Missouri.jpg differ diff --git a/samples/Montana.jpg b/samples/Montana.jpg new file mode 100644 index 0000000..54a0334 Binary files /dev/null and b/samples/Montana.jpg differ diff --git a/samples/Nebraska.jpg b/samples/Nebraska.jpg new file mode 100644 index 0000000..ea4b161 Binary files /dev/null and b/samples/Nebraska.jpg differ diff --git a/samples/Nevada.jpg b/samples/Nevada.jpg new file mode 100644 index 0000000..ff5f22c Binary files /dev/null and b/samples/Nevada.jpg differ diff --git a/samples/NewHampshire.jpg b/samples/NewHampshire.jpg new file mode 100644 index 0000000..97fb8a7 Binary files /dev/null and b/samples/NewHampshire.jpg differ diff --git a/samples/NewJersey.jpg b/samples/NewJersey.jpg new file mode 100644 index 0000000..3fac8c1 Binary files /dev/null and b/samples/NewJersey.jpg differ diff --git a/samples/NewMexico.jpg b/samples/NewMexico.jpg new file mode 100644 index 0000000..6535e5a Binary files /dev/null and b/samples/NewMexico.jpg differ diff --git a/samples/NewYork.jpg b/samples/NewYork.jpg new file mode 100644 index 0000000..151fcb5 Binary files /dev/null and b/samples/NewYork.jpg differ diff --git a/samples/NorthCarolina.jpg b/samples/NorthCarolina.jpg new file mode 100644 index 0000000..d8288ab Binary files /dev/null and b/samples/NorthCarolina.jpg differ diff --git a/samples/NorthDakota.jpg b/samples/NorthDakota.jpg new file mode 100644 index 0000000..40cdbb1 Binary files /dev/null and b/samples/NorthDakota.jpg differ diff --git a/samples/Ohio.jpg b/samples/Ohio.jpg new file mode 100644 index 0000000..d76463c Binary files /dev/null and b/samples/Ohio.jpg differ diff --git a/samples/Oklahoma.jpg b/samples/Oklahoma.jpg new file mode 100644 index 0000000..8c3c50f Binary files /dev/null and b/samples/Oklahoma.jpg differ diff --git a/samples/Oregon.jpg b/samples/Oregon.jpg new file mode 100644 index 0000000..8a392e0 Binary files /dev/null and b/samples/Oregon.jpg differ diff --git a/samples/Pennsylvania.jpg b/samples/Pennsylvania.jpg new file mode 100644 index 0000000..9d5b034 Binary files /dev/null and b/samples/Pennsylvania.jpg differ diff --git a/samples/PuertoRico.jpg b/samples/PuertoRico.jpg new file mode 100644 index 0000000..3289ed2 Binary files /dev/null and b/samples/PuertoRico.jpg differ diff --git a/samples/RhodeIsland.jpg b/samples/RhodeIsland.jpg new file mode 100644 index 0000000..b493ded Binary files /dev/null and b/samples/RhodeIsland.jpg differ diff --git a/samples/SouthCarolina.jpg b/samples/SouthCarolina.jpg new file mode 100644 index 0000000..0a15b40 Binary files /dev/null and b/samples/SouthCarolina.jpg differ diff --git a/samples/SouthDakota.jpg b/samples/SouthDakota.jpg new file mode 100644 index 0000000..1c345b2 Binary files /dev/null and b/samples/SouthDakota.jpg differ diff --git a/samples/Tennessee.jpg b/samples/Tennessee.jpg new file mode 100644 index 0000000..ca344b8 Binary files /dev/null and b/samples/Tennessee.jpg differ diff --git a/samples/Texas.jpg b/samples/Texas.jpg new file mode 100644 index 0000000..3464a06 Binary files /dev/null and b/samples/Texas.jpg differ diff --git a/samples/Utah.jpg b/samples/Utah.jpg new file mode 100644 index 0000000..61c1fce Binary files /dev/null and b/samples/Utah.jpg differ diff --git a/samples/Vermont.jpg b/samples/Vermont.jpg new file mode 100644 index 0000000..ddcea0d Binary files /dev/null and b/samples/Vermont.jpg differ diff --git a/samples/Virginia.jpg b/samples/Virginia.jpg new file mode 100644 index 0000000..7880ed9 Binary files /dev/null and b/samples/Virginia.jpg differ diff --git a/samples/Washington.jpg b/samples/Washington.jpg new file mode 100644 index 0000000..0dba14d Binary files /dev/null and b/samples/Washington.jpg differ diff --git a/samples/WestVirginia.jpg b/samples/WestVirginia.jpg new file mode 100644 index 0000000..933f153 Binary files /dev/null and b/samples/WestVirginia.jpg differ diff --git a/samples/Wisconsin.jpg b/samples/Wisconsin.jpg new file mode 100644 index 0000000..d49de01 Binary files /dev/null and b/samples/Wisconsin.jpg differ diff --git a/samples/Wyoming.jpg b/samples/Wyoming.jpg new file mode 100644 index 0000000..f3c8986 Binary files /dev/null and b/samples/Wyoming.jpg differ diff --git a/samples/big.png b/samples/big.png new file mode 100644 index 0000000..bfc3b19 Binary files /dev/null and b/samples/big.png differ diff --git a/shapes/T.png b/shapes/T.png new file mode 100644 index 0000000..fa29a0f Binary files /dev/null and b/shapes/T.png differ