/*
* Copyright (c) 2011-2016, Peter Abeles. All Rights Reserved.
*
* This file is part of BoofCV (http://boofcv.org).
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package boofcv.alg.denoise.impl;
import boofcv.abst.transform.wavelet.WaveletTransform;
import boofcv.alg.denoise.GenericDenoiseTests;
import boofcv.factory.transform.wavelet.FactoryWaveletTransform;
import boofcv.struct.image.ImageGray;
import boofcv.struct.wavelet.WaveletDescription;
import boofcv.testing.BoofTesting;
/**
* Handles the forward and inverse wavelet transform
*
* @author Peter Abeles
*/
@SuppressWarnings({"unchecked"})
public abstract class GenericWaveletDenoiseTests<T extends ImageGray> extends GenericDenoiseTests<T> {
WaveletTransform transform;
public GenericWaveletDenoiseTests(Class imageType, int noiseSigma,
WaveletDescription waveletDesc, int numLevels ) {
super(imageType, noiseSigma);
transform = FactoryWaveletTransform.create(imageType,waveletDesc,numLevels,0,255);
}
public abstract void denoiseWavelet(ImageGray transformedImg , int numLevels );
@Override
public void denoiseImage(T imageNoisy, T imageDenoised) {
ImageGray transformedImg = transform.transform(imageNoisy,null);
// if the input is a subimage make the transform a subimage
// so this condition is also tested
if( imageNoisy.isSubimage() ) {
transformedImg = BoofTesting.createSubImageOf(transformedImg);
}
denoiseWavelet(transformedImg,transform.getLevels());
transform.invert(transformedImg,imageDenoised);
}
}