Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

minor tune wavelethash #1

Merged
merged 2 commits into from
Feb 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
}