diff options
| author | Nick White <git@njw.name> | 2020-07-13 18:09:15 +0100 | 
|---|---|---|
| committer | Nick White <git@njw.name> | 2020-07-13 18:17:48 +0100 | 
| commit | 0ceaa5d97b585987539c51b8b8ce0705c06fc3a8 (patch) | |
| tree | e229f7879ddcd9b4f7165e76733cbb88e3b8718e /cmd/wipe | |
| parent | c3ae25f63823501fc7f92e6e291df60c282be138 (diff) | |
Improve wiper algorithm
Several changes made to wiper to improve things:
- If findbestedge finds more than one 'best' line, choose
  the middle one, rather than the first.
- findbestedge selects the line with the lowest number of
  black pixels, rather than (erroneously) the highest.
- Added a findedgesOutin() function, which finds edges like
  findedges() but looking from the outside edges of the image
  inwards, rather than from the inside out. More testing is
  needed to decide whether this is useful; initial testing
  showed very little difference, but that was limited to lightly
  binarised images. This is in use by VWipe() at present, where
  worries about several gutters thanks to the edges of other
  pages aren't present.
- Added separate vwsize, vthresh and vmin arguments to WipeFile
  so that vertical wiping can have different parameters (which
  is very important for good quality vertical wiping).
- Updated wiping tests.
- Rewrote the wipe cmd to use WipeFile() directly.
Diffstat (limited to 'cmd/wipe')
| -rw-r--r-- | cmd/wipe/main.go | 31 | 
1 files changed, 3 insertions, 28 deletions
diff --git a/cmd/wipe/main.go b/cmd/wipe/main.go index 30b0061..c69836d 100644 --- a/cmd/wipe/main.go +++ b/cmd/wipe/main.go @@ -9,10 +9,6 @@ package main  import (  	"flag"  	"fmt" -	"image" -	"image/draw" -	_ "image/jpeg" -	"image/png"  	"log"  	"os" @@ -25,7 +21,7 @@ func main() {  		fmt.Fprintf(os.Stderr, "Wipes the sections of an image which are outside the content area.\n")  		flag.PrintDefaults()  	} -	min := flag.Int("hm", 30, "Minimum percentage of the image width for the content width calculation to be considered valid.") +	hmin := flag.Int("hm", 30, "Minimum percentage of the image width for the content width calculation to be considered valid.")  	thresh := flag.Float64("ht", 0.05, "Threshold for the proportion of black pixels below which a window is determined to be the edge. Higher means more aggressive wiping.")  	wsize := flag.Int("hw", 5, "Window size for mask finding algorithm.")  	vmin := flag.Int("vm", 30, "Minimum percentage of the image height for the content width calculation to be considered valid.") @@ -37,29 +33,8 @@ func main() {  		os.Exit(1)  	} -	f, err := os.Open(flag.Arg(0)) -	defer f.Close() +	err := preproc.WipeFile(flag.Arg(0), flag.Arg(1), *wsize, *thresh, *hmin, *vwsize, *vthresh, *vmin)  	if err != nil { -		log.Fatalf("Could not open file %s: %v\n", flag.Arg(0), err) -	} -	img, _, err := image.Decode(f) -	if err != nil { -		log.Fatalf("Could not decode image: %v\n", err) -	} -	b := img.Bounds() -	gray := image.NewGray(image.Rect(0, 0, b.Dx(), b.Dy())) -	draw.Draw(gray, b, img, b.Min, draw.Src) - -	sidesdone := preproc.Wipe(gray, *wsize, *thresh, *min) -	clean := preproc.VWipe(sidesdone, *vwsize, *vthresh, *vmin) - -	f, err = os.Create(flag.Arg(1)) -	if err != nil { -		log.Fatalf("Could not create file %s: %v\n", flag.Arg(1), err) -	} -	defer f.Close() -	err = png.Encode(f, clean) -	if err != nil { -		log.Fatalf("Could not encode image: %v\n", err) +		log.Fatalf("Failed to wipe image: %v\n", err)  	}  }  | 
