summaryrefslogtreecommitdiff
path: root/binarize/main.go
diff options
context:
space:
mode:
authorNick White <git@njw.name>2019-01-30 16:42:02 +0000
committerNick White <git@njw.name>2019-01-30 19:19:44 +0000
commit6bb8ffba746fbcea8a8a359a32afdd591dab0f25 (patch)
treee3c43d69b64d9e6fdc3e09e2a8e80122271568ea /binarize/main.go
parent26a61941cf0216202aee3378f17b05255170da17 (diff)
Add integral image functionality to enable massive speedup of Sauvola
Note that there are some very small differences to the output compared to the basic algorithm, but this doesn't make much difference. This is due to minor differences with the standard deviation calculation throughout, and with mean calculation at edges, for reasons I'm unclear about. WIP integral image speedup. mean is working Very WIP, but mean is perfect once full window is used Integral version all working! Remove debugging info Organise code better
Diffstat (limited to 'binarize/main.go')
-rw-r--r--binarize/main.go44
1 files changed, 44 insertions, 0 deletions
diff --git a/binarize/main.go b/binarize/main.go
new file mode 100644
index 0000000..610effc
--- /dev/null
+++ b/binarize/main.go
@@ -0,0 +1,44 @@
+package main
+
+// TODO: could look into other algorithms, see for examples see
+// the README at https://github.com/brandonmpetty/Doxa
+
+import (
+ "flag"
+ "fmt"
+ "log"
+ "os"
+
+ "github.com/Ernyoke/Imger/imgio" // TODO: get rid of this and do things myself
+)
+
+func main() {
+ flag.Usage = func() {
+ fmt.Fprintf(os.Stderr, "Usage: binarize [-w num] [-k num] inimg outimg\n")
+ flag.PrintDefaults()
+ }
+ wsize := flag.Int("w", 31, "Window size for sauvola algorithm (needs to be odd)")
+ ksize := flag.Float64("k", 0.5, "K for sauvola algorithm")
+ flag.Parse()
+ if flag.NArg() < 2 {
+ flag.Usage()
+ os.Exit(1)
+ }
+
+ if *wsize % 2 == 0 {
+ *wsize++
+ }
+
+ img, err := imgio.ImreadGray(flag.Arg(0))
+ if err != nil {
+ log.Fatalf("Could not read image %s\n", flag.Arg(0))
+ }
+
+ // TODO: estimate an appropriate window size based on resolution
+ thresh := IntegralSauvola(img, *ksize, *wsize)
+
+ err = imgio.Imwrite(thresh, flag.Arg(1))
+ if err != nil {
+ log.Fatalf("Could not write image %s\n", flag.Arg(1))
+ }
+}