Mercurial > cgi-bin > hgweb.cgi > SimpleResizer
annotate app/src/main/java/com/bartsent/simpleresizer/lib/LanczosKernel.kt @ 8:6ae738b8a814 memo
Memoize. Only modest improvement results.
author | David Barts <n5jrn@me.com> |
---|---|
date | Wed, 17 Feb 2021 07:43:50 -0800 |
parents | e8059b166de1 |
children | 678adef4774f |
rev | line source |
---|---|
6
e8059b166de1
Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
1 package com.bartsent.simpleresizer.lib |
e8059b166de1
Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
2 |
e8059b166de1
Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
3 import kotlin.math.PI |
e8059b166de1
Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
4 import kotlin.math.abs |
e8059b166de1
Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
5 import kotlin.math.sin |
e8059b166de1
Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
6 |
e8059b166de1
Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
7 object LanczosKernel: ScalingKernel { |
e8059b166de1
Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
8 override val size = 3.0 |
8
6ae738b8a814
Memoize. Only modest improvement results.
David Barts <n5jrn@me.com>
parents:
6
diff
changeset
|
9 private val memory = HashMap<Double, Double>() |
6ae738b8a814
Memoize. Only modest improvement results.
David Barts <n5jrn@me.com>
parents:
6
diff
changeset
|
10 init { |
6ae738b8a814
Memoize. Only modest improvement results.
David Barts <n5jrn@me.com>
parents:
6
diff
changeset
|
11 memory.put(0.0, 1.0) |
6ae738b8a814
Memoize. Only modest improvement results.
David Barts <n5jrn@me.com>
parents:
6
diff
changeset
|
12 } |
6
e8059b166de1
Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
13 |
e8059b166de1
Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
14 private fun sinc(x: Double): Double { |
8
6ae738b8a814
Memoize. Only modest improvement results.
David Barts <n5jrn@me.com>
parents:
6
diff
changeset
|
15 val remembered = memory.get(x) |
6ae738b8a814
Memoize. Only modest improvement results.
David Barts <n5jrn@me.com>
parents:
6
diff
changeset
|
16 if (remembered != null) |
6ae738b8a814
Memoize. Only modest improvement results.
David Barts <n5jrn@me.com>
parents:
6
diff
changeset
|
17 return remembered |
6
e8059b166de1
Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
18 val pix = PI * x |
8
6ae738b8a814
Memoize. Only modest improvement results.
David Barts <n5jrn@me.com>
parents:
6
diff
changeset
|
19 val calculated = sin(pix) / pix |
6ae738b8a814
Memoize. Only modest improvement results.
David Barts <n5jrn@me.com>
parents:
6
diff
changeset
|
20 memory.put(x, calculated) |
6ae738b8a814
Memoize. Only modest improvement results.
David Barts <n5jrn@me.com>
parents:
6
diff
changeset
|
21 return calculated |
6
e8059b166de1
Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
22 } |
e8059b166de1
Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
23 |
e8059b166de1
Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
24 override fun weight(x: Double): Double = |
e8059b166de1
Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
25 if (abs(x) < size) sinc(x) * sinc(x/size) else 0.0 |
e8059b166de1
Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff
changeset
|
26 } |