Explorar o código

Remove LUT based filters.

Caching kernel weights makes using the LUT based approach obsolete. Now they seem to be even slower than their counterparts.
jst %!s(int64=12) %!d(string=hai) anos
pai
achega
446eea2f7b
Modificáronse 3 ficheiros con 0 adicións e 61 borrados
  1. 0 2
      README.md
  2. 0 43
      filters.go
  3. 0 16
      resize_test.go

+ 0 - 2
README.md

@@ -36,9 +36,7 @@ The provided interpolation functions are (from fast to slow execution time)
 - `Bilinear`: [Bilinear interpolation](http://en.wikipedia.org/wiki/Bilinear_interpolation)
 - `Bicubic`: [Bicubic interpolation](http://en.wikipedia.org/wiki/Bicubic_interpolation)
 - `MitchellNetravali`: [Mitchell-Netravali interpolation](http://dl.acm.org/citation.cfm?id=378514)
-- `Lanczos2Lut`: [Lanczos resampling](http://en.wikipedia.org/wiki/Lanczos_resampling) with a=2 using a look-up table for fast computation
 - `Lanczos2`: [Lanczos resampling](http://en.wikipedia.org/wiki/Lanczos_resampling) with a=2
-- `Lanczos3Lut`: [Lanczos resampling](http://en.wikipedia.org/wiki/Lanczos_resampling) with a=3 using a look-up table for fast computation
 - `Lanczos3`: [Lanczos resampling](http://en.wikipedia.org/wiki/Lanczos_resampling) with a=3
 
 Which of these methods gives the best results depends on your use case.

+ 0 - 43
filters.go

@@ -156,35 +156,6 @@ func createFilter(img image.Image, factor float32, size int, kernel func(float32
 	return
 }
 
-// Return a filter kernel that performs nearly identically to the provided
-// kernel, but generates and uses a precomputed table rather than executing
-// the kernel for each evaluation. The table is generated with tableSize
-// values that cover the kernal domain from -maxX to +maxX. The input kernel
-// is assumed to be symmetrical around 0, so the table only includes values
-// from 0 to maxX.
-func tableKernel(kernel func(float32) float32, tableSize int,
-	maxX float32) func(float32) float32 {
-
-	// precompute an array of filter coefficients
-	weights := make([]float32, tableSize+1)
-	for i := range weights {
-		weights[i] = kernel(maxX * float32(i) / float32(tableSize))
-	}
-	weights[tableSize] = 0.0
-
-	return func(x float32) float32 {
-		if x < 0.0 {
-			x = -x
-		}
-		indf := x / maxX * float32(tableSize)
-		ind := int(indf)
-		if ind >= tableSize {
-			return 0.0
-		}
-		return weights[ind] + (weights[ind+1]-weights[ind])*(indf-float32(ind))
-	}
-}
-
 // Nearest-neighbor interpolation
 func NearestNeighbor(img image.Image, factor float32) Filter {
 	return createFilter(img, factor, 2, func(x float32) (y float32) {
@@ -263,21 +234,7 @@ func Lanczos2(img image.Image, factor float32) Filter {
 	return createFilter(img, factor, 4, lanczosKernel(2))
 }
 
-// Lanczos interpolation (a=2) using a look-up table
-// to speed up computation
-func Lanczos2Lut(img image.Image, factor float32) Filter {
-	return createFilter(img, factor, 4,
-		tableKernel(lanczosKernel(2), lanczosTableSize, 2.0))
-}
-
 // Lanczos interpolation (a=3)
 func Lanczos3(img image.Image, factor float32) Filter {
 	return createFilter(img, factor, 6, lanczosKernel(3))
 }
-
-// Lanczos interpolation (a=3) using a look-up table
-// to speed up computation
-func Lanczos3Lut(img image.Image, factor float32) Filter {
-	return createFilter(img, factor, 6,
-		tableKernel(lanczosKernel(3), lanczosTableSize, 3.0))
-}

+ 0 - 16
resize_test.go

@@ -61,14 +61,6 @@ func Benchmark_BigResizeLanczos3(b *testing.B) {
 	m.At(0, 0)
 }
 
-func Benchmark_BigResizeLanczos3Lut(b *testing.B) {
-	var m image.Image
-	for i := 0; i < b.N; i++ {
-		m = Resize(1000, 1000, img, Lanczos3Lut)
-	}
-	m.At(0, 0)
-}
-
 func Benchmark_Reduction(b *testing.B) {
 	largeImg := image.NewRGBA(image.Rect(0, 0, 1000, 1000))
 
@@ -107,18 +99,10 @@ func Benchmark_LargeJpegThumbMitchellNetravali(b *testing.B) {
 	jpegThumb(b, MitchellNetravali)
 }
 
-func Benchmark_LargeJpegThumbLanczos2Lut(b *testing.B) {
-	jpegThumb(b, Lanczos2Lut)
-}
-
 func Benchmark_LargeJpegThumbLanczos2(b *testing.B) {
 	jpegThumb(b, Lanczos2)
 }
 
-func Benchmark_LargeJpegThumbLanczos3Lut(b *testing.B) {
-	jpegThumb(b, Lanczos3Lut)
-}
-
 func Benchmark_LargeJpegThumbLanczos3(b *testing.B) {
 	jpegThumb(b, Lanczos3)
 }