void SlidingWindowFitAction::Perform(ArtifactSet &artifacts, class ProgressListener &listener) { LocalFitMethod method; switch(_parameters.method) { case SlidingWindowFitParameters::None: method.SetToNone(); break; case SlidingWindowFitParameters::Average: method.SetToAverage( _parameters.timeDirectionWindowSize, _parameters.frequencyDirectionWindowSize); break; case SlidingWindowFitParameters::GaussianWeightedAverage: method.SetToWeightedAverage( _parameters.timeDirectionWindowSize, _parameters.frequencyDirectionWindowSize, _parameters.timeDirectionKernelSize, _parameters.frequencyDirectionKernelSize); break; case SlidingWindowFitParameters::Median: method.SetToMedianFilter( _parameters.timeDirectionWindowSize, _parameters.frequencyDirectionWindowSize); break; case SlidingWindowFitParameters::Minimum: method.SetToMinimumFilter( _parameters.timeDirectionWindowSize, _parameters.frequencyDirectionWindowSize); break; } method.Initialize(artifacts.ContaminatedData()); size_t taskCount = method.TaskCount(); for(size_t i=0;i<taskCount;++i) { method.PerformFit(i); listener.OnProgress(*this, i+1, taskCount); } TimeFrequencyData newRevisedData = method.Background(); newRevisedData.SetMask(artifacts.RevisedData()); TimeFrequencyData *contaminatedData = TimeFrequencyData::CreateTFDataFromDiff(artifacts.ContaminatedData(), newRevisedData); contaminatedData->SetMask(artifacts.ContaminatedData()); artifacts.SetRevisedData(newRevisedData); artifacts.SetContaminatedData(*contaminatedData); delete contaminatedData; }
void TestSetGenerator::SubtractBackground(Image2D& image) { Mask2DPtr zero = Mask2D::CreateSetMaskPtr<false>(image.Width(), image.Height()); LocalFitMethod fittedImage; fittedImage.SetToWeightedAverage(20, 40, 7.5, 15.0); Image2DPtr imagePtr = Image2D::MakePtr(image); TimeFrequencyData data(TimeFrequencyData::AmplitudePart, Polarization::StokesI, imagePtr); data.SetGlobalMask(zero); fittedImage.Initialize(data); for(unsigned i=0;i<fittedImage.TaskCount();++i) fittedImage.PerformFit(i); image = Image2D::MakeFromDiff(image, *fittedImage.Background().GetSingleImage()); for(unsigned y=0;y<image.Height();++y) { for(unsigned x=0;x<image.Width();++x) { image.AddValue(x, y, 1.0); } } }