You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
3.0 KiB
C
97 lines
3.0 KiB
C
3 weeks ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: vtkImageWeightedSum.h
|
||
|
|
||
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
||
|
All rights reserved.
|
||
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
||
|
|
||
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
||
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||
|
PURPOSE. See the above copyright notice for more information.
|
||
|
|
||
|
=========================================================================*/
|
||
|
/**
|
||
|
* @class vtkImageWeightedSum
|
||
|
* @brief adds any number of images, weighting
|
||
|
* each according to the weight set using this->SetWeights(i,w).
|
||
|
*
|
||
|
*
|
||
|
* All weights are normalized so they will sum to 1.
|
||
|
* Images must have the same extents. Output is
|
||
|
*
|
||
|
* @par Thanks:
|
||
|
* The original author of this class is Lauren O'Donnell (MIT) for Slicer
|
||
|
*/
|
||
|
|
||
|
#ifndef vtkImageWeightedSum_h
|
||
|
#define vtkImageWeightedSum_h
|
||
|
|
||
|
#include "vtkImagingMathModule.h" // For export macro
|
||
|
#include "vtkThreadedImageAlgorithm.h"
|
||
|
|
||
|
class vtkDoubleArray;
|
||
|
class VTKIMAGINGMATH_EXPORT vtkImageWeightedSum : public vtkThreadedImageAlgorithm
|
||
|
{
|
||
|
public:
|
||
|
static vtkImageWeightedSum* New();
|
||
|
vtkTypeMacro(vtkImageWeightedSum, vtkThreadedImageAlgorithm);
|
||
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* The weights control the contribution of each input to the sum.
|
||
|
* They will be normalized to sum to 1 before filter execution.
|
||
|
*/
|
||
|
virtual void SetWeights(vtkDoubleArray*);
|
||
|
vtkGetObjectMacro(Weights, vtkDoubleArray);
|
||
|
//@}
|
||
|
|
||
|
/**
|
||
|
* Change a specific weight. Reallocation is done
|
||
|
*/
|
||
|
virtual void SetWeight(vtkIdType id, double weight);
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Setting NormalizeByWeight on will divide the
|
||
|
* final result by the total weight of the component functions.
|
||
|
* This process does not otherwise normalize the weighted sum
|
||
|
* By default, NormalizeByWeight is on.
|
||
|
*/
|
||
|
vtkGetMacro(NormalizeByWeight, vtkTypeBool);
|
||
|
vtkSetClampMacro(NormalizeByWeight, vtkTypeBool, 0, 1);
|
||
|
vtkBooleanMacro(NormalizeByWeight, vtkTypeBool);
|
||
|
//@}
|
||
|
|
||
|
/**
|
||
|
* Compute the total value of all the weight
|
||
|
*/
|
||
|
double CalculateTotalWeight();
|
||
|
|
||
|
protected:
|
||
|
vtkImageWeightedSum();
|
||
|
~vtkImageWeightedSum() override;
|
||
|
|
||
|
// Array to hold all the weights
|
||
|
vtkDoubleArray* Weights;
|
||
|
|
||
|
// Boolean flag to divide by sum or not
|
||
|
vtkTypeBool NormalizeByWeight;
|
||
|
|
||
|
int RequestInformation(vtkInformation* vtkNotUsed(request),
|
||
|
vtkInformationVector** vtkNotUsed(inputVector), vtkInformationVector* outputVector) override;
|
||
|
|
||
|
void ThreadedRequestData(vtkInformation* request, vtkInformationVector** inputVector,
|
||
|
vtkInformationVector* outputVector, vtkImageData*** inData, vtkImageData** outData, int ext[6],
|
||
|
int id) override;
|
||
|
int FillInputPortInformation(int i, vtkInformation* info) override;
|
||
|
|
||
|
private:
|
||
|
vtkImageWeightedSum(const vtkImageWeightedSum&) = delete;
|
||
|
void operator=(const vtkImageWeightedSum&) = delete;
|
||
|
};
|
||
|
|
||
|
#endif
|