public void testCrop() { Wavelet2D wavelet = new OrderWavelet2D(4, 4); float[,] test = new float[4, 4]; for (int y = 0; y < 4; y++) { for (int x = 0; x < 4; x++) { test[x, y] = 50.0f; } } float min; float max; test[1, 0] = 10.0f; test[0, 1] = -10.0f; wavelet.CropCoefficients(test, 10.1f); wavelet.EnableParallel = false; wavelet.getCoefficientsRange(test, out min, out max); Assert.AreEqual(0.0f, min); Assert.AreEqual(50.0f, max); test[1, 0] = 10.0f; test[0, 1] = -10.0f; wavelet.CropCoefficients(test, 9.9f); wavelet.EnableParallel = true; wavelet.getCoefficientsRange(test, out min, out max); Assert.AreEqual(10.0f, min); Assert.AreEqual(50.0f, max); }
public void testScale() { Wavelet2D wavelet = new OrderWavelet2D(16, 16); initArrays(16, 16); foreach (bool parallel in new bool[] { false, true }) { for (int y = 0; y < 16; y++) { for (int x = 0; x < 16; x++) { test [x, y] = x + y; if (((x % 8) == 7) && ((y % 8) == 7)) { valOrg [x, y] = 2.5f * test [x, y]; } else { valOrg [x, y] = test [x, y]; } } } wavelet.EnableParallel = parallel; wavelet.ScaleCoefficients(test, new float[] { 2.5f }, 8); Assert.True(compareSource()); } }
public void testRange() { Wavelet2D wavelet = new OrderWavelet2D(512, 512); float[,] test = new float[512, 512]; for (int y = 0; y < 512; y++) { for (int x = 0; x < 512; x++) { test[x, y] = 50.0f; } } float min; float max; wavelet.EnableParallel = false; wavelet.getCoefficientsRange(test, out min, out max); Assert.AreEqual(min, 50.0f); Assert.AreEqual(max, 50.0f); test[5, 5] = 100.0f; test[10, 100] = -10.0f; wavelet.getCoefficientsRange(test, out min, out max); Assert.AreEqual(min, 10.0f); Assert.AreEqual(max, 100.0f); wavelet.EnableParallel = true; wavelet.getCoefficientsRange(test, out min, out max); Assert.AreEqual(min, 10.0f); Assert.AreEqual(max, 100.0f); }
private static void applyAdaptiveDeadzone(float[,] array, int numCoeffs) { int width = array.GetLength(0); int height = array.GetLength(1); Biorthogonal53Wavelet2D wavelet53 = new Biorthogonal53Wavelet2D(width, height); OrderWavelet2D waveletOrder = new OrderWavelet2D(width, height); wavelet53.EnableCaching = true; waveletOrder.EnableCaching = true; wavelet53.TransformIsotropic2D(array); //Reverse the ordering of the coefficients waveletOrder.BacktransformIsotropic2D(array); //Use numCoeffs cofficient out of 64 (8x8) -> for e.g. numCoeffs = 5 this //means a compression to 7,8% of the original size waveletOrder.CropCoefficients(array, 7, 8); waveletOrder.TransformIsotropic2D(array); wavelet53.BacktransformIsotropic2D(array); }
private static void applyAdaptiveShapening(float[,] array, float position) { int width = array.GetLength(0); int height = array.GetLength(1); Biorthogonal53Wavelet2D wavelet53 = new Biorthogonal53Wavelet2D(width, height); OrderWavelet2D waveletOrder = new OrderWavelet2D(width, height); wavelet53.EnableCaching = true; waveletOrder.EnableCaching = true; wavelet53.TransformIsotropic2D(array); //Reverse the ordering of the coefficients waveletOrder.BacktransformIsotropic2D(array); float[] scale = new float[8 * 8]; for (int x = 0; x < 8 * 8; x++) { scale [x] = 1.0f + 2.0f / ((position - x) * (position - x) + 1.0f); } waveletOrder.ScaleCoefficients(array, scale, 8); waveletOrder.TransformIsotropic2D(array); wavelet53.BacktransformIsotropic2D(array); }