diff options
Diffstat (limited to 'binarize/main.go')
-rw-r--r-- | binarize/main.go | 44 |
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)) + } +} |