Skip to content

Commit

Permalink
Merge pull request #1 from octu0/fix-32x2-64x1
Browse files Browse the repository at this point in the history
minor tune wavelethash
  • Loading branch information
octu0 authored Feb 4, 2024
2 parents 7478ea0 + 74e67a8 commit b6a869e
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 40 deletions.
18 changes: 9 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,26 +31,26 @@ pkg: github.com/octu0/fastimagehash
cpu: Intel(R) Core(TM) i5-8210Y CPU @ 1.60GHz
BenchmarkAverageHash
BenchmarkAverageHash/goimagehash/8x8
BenchmarkAverageHash/goimagehash/8x8-4 2772 432437 ns/op
BenchmarkAverageHash/goimagehash/8x8-4 2707 424327 ns/op
BenchmarkAverageHash/goimagehash/32x32
BenchmarkAverageHash/goimagehash/32x32-4 1951 567546 ns/op
BenchmarkAverageHash/goimagehash/32x32-4 1836 570279 ns/op
BenchmarkAverageHash/fastimagehash/32x32
BenchmarkAverageHash/fastimagehash/32x32-4 39063 32761 ns/op
BenchmarkAverageHash/fastimagehash/32x32-4 39634 29911 ns/op
BenchmarkDifferenceHash
BenchmarkDifferenceHash/goimagehash/9x8
BenchmarkDifferenceHash/goimagehash/9x8-4 2305 522748 ns/op
BenchmarkDifferenceHash/goimagehash/9x8-4 2277 456987 ns/op
BenchmarkDifferenceHash/goimagehash/33x32
BenchmarkDifferenceHash/goimagehash/33x32-4 1864 790872 ns/op
BenchmarkDifferenceHash/goimagehash/33x32-4 1874 592438 ns/op
BenchmarkDifferenceHash/fastimagehash/33x32
BenchmarkDifferenceHash/fastimagehash/33x32-4 27858 43084 ns/op
BenchmarkDifferenceHash/fastimagehash/33x32-4 33601 34354 ns/op
BenchmarkPerceptionHash
BenchmarkPerceptionHash/goimagehash/64x64
BenchmarkPerceptionHash/goimagehash/64x64-4 1240 883755 ns/op
BenchmarkPerceptionHash/goimagehash/64x64-4 1311 813998 ns/op
BenchmarkPerceptionHash/fastimagehash/64x64
BenchmarkPerceptionHash/fastimagehash/64x64-4 6826 164496 ns/op
BenchmarkPerceptionHash/fastimagehash/64x64-4 7542 146732 ns/op
BenchmarkWaveletHash
BenchmarkWaveletHash/fastimagehash/64x64
BenchmarkWaveletHash/fastimagehash/64x64-4 5572 206503 ns/op
BenchmarkWaveletHash/fastimagehash/64x64-4 6045 191712 ns/op
```

# License
Expand Down
2 changes: 1 addition & 1 deletion version.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@ package fastimagehash

const (
AppName string = "fastimagehash"
Version string = "0.0.2"
Version string = "0.0.3"
)
52 changes: 22 additions & 30 deletions wavelethash.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,44 +31,36 @@ func WaveletHash(in image.Image) (Hash1024, error) {
return Hash1024{}, errors.WithStack(err)
}
median := pickMedian(hi)
return wavelethash32x32(hi, median), nil
return wavelethash64x16(hi, median), nil
}

func wavelethash32x32(hi []float32, median float32) Hash1024 {
func wavelethash64x16(hi []float32, median float32) Hash1024 {
return [16]uint64{
wavelethash32x2(hi[0:32], hi[32:64], median),
wavelethash32x2(hi[64:96], hi[96:128], median),
wavelethash32x2(hi[128:160], hi[160:192], median),
wavelethash32x2(hi[192:224], hi[224:256], median),
wavelethash32x2(hi[256:288], hi[288:320], median),
wavelethash32x2(hi[320:352], hi[352:384], median),
wavelethash32x2(hi[384:416], hi[416:448], median),
wavelethash32x2(hi[448:480], hi[480:512], median),
wavelethash32x2(hi[512:544], hi[544:576], median),
wavelethash32x2(hi[576:608], hi[608:640], median),
wavelethash32x2(hi[640:672], hi[672:704], median),
wavelethash32x2(hi[704:736], hi[736:768], median),
wavelethash32x2(hi[768:800], hi[800:832], median),
wavelethash32x2(hi[832:864], hi[864:896], median),
wavelethash32x2(hi[896:928], hi[928:960], median),
wavelethash32x2(hi[960:992], hi[992:1024], median),
wavelethash64x1(hi[0:64], median),
wavelethash64x1(hi[64:128], median),
wavelethash64x1(hi[128:192], median),
wavelethash64x1(hi[192:256], median),
wavelethash64x1(hi[256:320], median),
wavelethash64x1(hi[320:384], median),
wavelethash64x1(hi[384:448], median),
wavelethash64x1(hi[448:512], median),
wavelethash64x1(hi[512:576], median),
wavelethash64x1(hi[576:640], median),
wavelethash64x1(hi[640:704], median),
wavelethash64x1(hi[704:768], median),
wavelethash64x1(hi[768:832], median),
wavelethash64x1(hi[832:896], median),
wavelethash64x1(hi[896:960], median),
wavelethash64x1(hi[960:1024], median),
}
}

func wavelethash32x2(a, b []float32, median float32) uint64 {
func wavelethash64x1(signal []float32, median float32) uint64 {
index := uint64(0)
pos := 0
for i := 0; i < 32; i += 1 {
if median < a[i] {
index |= 1 << (64 - pos - 1)
for i := 0; i < 64; i += 1 {
if median < signal[i] {
index |= 1 << (64 - i - 1)
}
pos += 1
}
for i := 0; i < 32; i += 1 {
if median < b[i] {
index |= 1 << (64 - pos - 1)
}
pos += 1
}
return index
}

0 comments on commit b6a869e

Please sign in to comment.