From b9e6c0d3ced0f1d56418b8538c79eede0152171b Mon Sep 17 00:00:00 2001 From: Nick White Date: Wed, 29 Jul 2020 18:18:40 +0100 Subject: Correct integral image implementation by ensuring that any request for column or row 0 returns 0 for calculations --- integralimg.go | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/integralimg.go b/integralimg.go index 53aec13..922b1ce 100644 --- a/integralimg.go +++ b/integralimg.go @@ -142,24 +142,36 @@ func highest(a, b int) int { func (i Image) topLeft(r image.Rectangle) uint64 { x := highest(r.Min.X, 0) y := highest(r.Min.Y, 0) + if x == 0 || y == 0 { + return 0 + } return i[y][x] } func (i Image) topRight(r image.Rectangle) uint64 { - x := lowest(r.Max.X, i.Bounds().Dx() - 1) + x := lowest(r.Max.X - 1, i.Bounds().Dx() - 1) y := highest(r.Min.Y, 0) + if x == 0 || y == 0 { + return 0 + } return i[y][x] } func (i Image) bottomLeft(r image.Rectangle) uint64 { x := highest(r.Min.X, 0) - y := lowest(r.Max.Y, i.Bounds().Dy() - 1) + y := lowest(r.Max.Y - 1, i.Bounds().Dy() - 1) + if x == 0 || y == 0 { + return 0 + } return i[y][x] } func (i Image) bottomRight(r image.Rectangle) uint64 { - x := lowest(r.Max.X, i.Bounds().Dx() - 1) - y := lowest(r.Max.Y, i.Bounds().Dy() - 1) + x := lowest(r.Max.X - 1, i.Bounds().Dx() - 1) + y := lowest(r.Max.Y - 1, i.Bounds().Dy() - 1) + if x == 0 || y == 0 { + return 0 + } return i[y][x] } -- cgit v1.2.1-24-ge1ad