![]() |
ImFusion C++ SDK 4.5.0
|
#include <ImFusion/GL/BilateralFilterAlgorithm.h>
Algorithm for edge-preserving image smoothening using the Bilateral filter. More...
Algorithm for edge-preserving image smoothening using the Bilateral filter.
Guide for general algorithm can be found in Szeliski's Computer Vision or at http://people.csail.mit.edu/sparis/bf_course/
Public Types | |
| enum | ComputationMethod { CPU , OpenGL , OpenCL , NrMethods } |
| Specify how to perform computation. | |
| enum | AdaptiveMode { None , Linear , Exponential } |
| Selects function on how to compute adaptive intensity weights in shader. | |
| Public Types inherited from ImFusion::Algorithm | |
| enum | Status { Unknown = -1 , Success = 0 , Error = 1 , InvalidInput , IncompleteInput , OutOfMemoryHost , OutOfMemoryGPU , UnsupportedGPU , UnknownAction , AbortedByUser , User = 1000 } |
| Status codes. More... | |
Public Member Functions | |
| BilateralFilterAlgorithm (SharedImageSet &imgIn, SharedImageSet *imgGuide) | |
| Creates glPrograms and output and sets defaults. | |
| ~BilateralFilterAlgorithm () override | |
| Destroy glPrograms and output. | |
| void | setParameters (double sigmaPosition, double sigmaIntensity, int computationMethod, bool inPlace, int adaptive=None) |
| Set the parameters for the bilateral filter. | |
| void | setAdaptiveParameters (double offset, double incline) |
| Set global parameters for adaptive computation. | |
| bool | setAdaptiveParameters (const std::vector< double > &offsets, const std::vector< double > &inclines) |
| Set image-specific parameters for adaptive computation. | |
| void | setInPlace (bool inplace) |
| Set whether the result should be computed in place. | |
| void | configure (const Properties *p) override |
| Set one or multiple properties. | |
| void | configuration (Properties *p) const override |
| Retrieve the properties of this object. | |
| void | compute () override |
| Compute the result. | |
| OwningDataList | takeOutput () override |
| If the algorithm creates new image data, it has to be transferred here. | |
| SharedImageSet * | output () |
| Access the output SIS. | |
| Public Member Functions inherited from ImFusion::Algorithm | |
| Algorithm () | |
| Default constructor will registers a single "compute" action that calls compute() and returns status(). | |
| virtual void | setProgress (Progress *progress) |
| Sets a Progress interface the algorithm can use to notify observers about its computing progress. | |
| Progress * | progress () const |
| Returns the progress interface if set. | |
| virtual int | status () const |
| Indicates the status of the last call to compute(). | |
| virtual bool | survivesDataDeletion (const Data *) const |
| Indicates whether the algorithm can handle (partial) deletion of the specified data, by default this checks whether the data is in the input list. | |
| const FactoryInfo & | factoryInfo () const |
| Returns the record describing how this Algorithm was instantiated by the AlgorithmFactory. | |
| void | setFactoryInfo (const FactoryInfo &value) |
| Sets the record describing how this Algorithm was instantiated by the AlgorithmFactory. | |
| Status | runAction (const std::string &id) |
| Run the action with name id if it exists. | |
| const std::vector< Action > & | actions () |
| Get a mapping from Action id to Action as registered in this algorithm. | |
| Public Member Functions inherited from ImFusion::Configurable | |
| virtual void | configureDefaults () |
| Retrieve the properties of this object, replaces values with their defaults and sets it again. | |
| void | registerParameter (ParameterBase *param) |
| Register the given Parameter or SubProperty, so that it will be configured during configure()/configuration(). | |
| void | unregisterParameter (const ParameterBase *param) |
| Remove the given Parameter or SubProperty from the list of registered parameters. | |
| Configurable (const Configurable &rhs) | |
| Configurable (Configurable &&rhs) noexcept | |
| Configurable & | operator= (const Configurable &) |
| Configurable & | operator= (Configurable &&) noexcept |
Static Public Member Functions | |
| static bool | createCompatible (const DataList &data, Algorithm **a) |
| If data is compatible with algorithm return true. If a is not zero, create algorithm with input data. | |
| Static Public Member Functions inherited from ImFusion::Algorithm | |
| static bool | createCompatible (const DataList &data, Algorithm **a=nullptr) |
| Factory function to check algorithm compatibility with input data and optionally instantiate it. | |
Protected Attributes | |
| SharedImageSet * | m_img |
| Input, to be filtered. | |
| SharedImageSet * | m_guide |
| optional guide | |
| std::unique_ptr< SharedImageSet > | m_output |
| Output. | |
| std::unique_ptr< TypedImage< float > > | m_inImage |
| The currently processed image. | |
| GL::ImageProgram * | m_glProgram |
| Program for filtering with OpenGL. | |
| GlImage * | m_spatialGpuKernel |
| Precomputed spatial kernel on the GPU. | |
| std::vector< float > | m_spatialCpuKernel |
| Precomputed spatial kernel in memory (optional in GPU mode). | |
| std::vector< double > | m_offsets |
| Offset coefficients for computing adaptive intensity weights in shader. | |
| std::vector< double > | m_inclines |
| Incline coefficients. | |
| double | m_sigmaPosition |
| Defines width of spatial Gaussian [mm]. | |
| double | m_sigmaIntensity |
| Defines width of intensity Gaussian. | |
| double | m_kernelRadiusScaling |
| Defines how to scale the spatial kernel radius with respect to sigmaPosition. | |
| bool | m_inPlace |
| True: replace input image with filtered image. | |
| int | m_adaptiveMode |
| Apply adaptive computation of sigmaIntensity in shader if != 0. | |
| double | m_adaptiveIncline |
| Defines global incline of linear sigmaSq-vs-mean relation. | |
| double | m_adaptiveOffset |
| Defines global y-offset of linear sigmaSq-vs-mean relation. | |
| bool | m_precomputeSpatialKernel |
| True: precompute spatial kernel on CPU. | |
| int | m_computationMethod |
| Defines method/device to compute algorithm. | |
| Protected Attributes inherited from ImFusion::Algorithm | |
| std::string | m_name |
| Algorithm name. | |
| Progress * | m_progress = nullptr |
| Non-owing pointer to a progress interface. May be a nullptr. | |
| FactoryInfo | m_factoryInfo = {} |
| Record describing how this algorithm was instantiated by the AlgorithmFactory. | |
| int | m_status = Status::Unknown |
| Algorithm status after last call to compute(). | |
| std::vector< Action > | m_actions |
| Map of key given by the id of the action, of the available actions of this algorithm. | |
| Protected Attributes inherited from ImFusion::Configurable | |
| std::vector< Param > | m_params |
| List of all registered Parameter and SubProperty instances. | |
OpenCL-specific members | |
| ClEnvironment * | m_env |
| bool | m_ownEnv |
| ClProgram * | m_clProgram |
| ClProgram holding two kernels for different computation methods. | |
| ClKernel * | m_clKernel |
| ClKernel used for computation. | |
| ClSampler * | m_clSampler |
| ClSampler instance for ClImage::IMAGE types. Only required for global computation method. | |
| bool | m_clUseLocalMem |
| True: perform caching to local memory before filtering. False: use global memory only. | |
| unsigned int | m_gws [3] |
| Global number of workitems. | |
| unsigned int | m_lws [3] |
| Local workgroup size. | |
Additional Inherited Members | |
| Public Attributes inherited from ImFusion::Algorithm | |
| Signal | signalOutputChanged |
| Signal should be emitted by Algorithms when their output/result has changed. | |
| Signal | signalParametersChanged |
| Signal should be emitted by Algorithms when their parameter configuration has changed. | |
| Public Attributes inherited from ImFusion::Configurable | |
| Signal | signalParametersChanged |
| Emitted whenever one of the registered Parameters' or SubPropertys' signalValueChanged signal was emitted. | |
| Protected Member Functions inherited from ImFusion::Algorithm | |
| void | loadDefaults () |
| void | registerAction (const std::string &id, const std::string &guiName, const std::function< Algorithm::Status(void)> &action) |
| Register an action to be run via runAction. | |
| template<typename D> | |
| void | registerAction (const std::string &id, const std::string &guiName, Algorithm::Status(D::*action)(void)) |
| Template version of runAction that can be used with a pointer to a member function. | |
| void | registerAction (const Action &action) |
| Register an action. | |
| void ImFusion::BilateralFilterAlgorithm::setParameters | ( | double | sigmaPosition, |
| double | sigmaIntensity, | ||
| int | computationMethod, | ||
| bool | inPlace, | ||
| int | adaptive = None ) |
Set the parameters for the bilateral filter.
| bool ImFusion::BilateralFilterAlgorithm::setAdaptiveParameters | ( | const std::vector< double > & | offsets, |
| const std::vector< double > & | inclines ) |
Set image-specific parameters for adaptive computation.
|
overridevirtual |
Set one or multiple properties.
Reimplemented from ImFusion::Configurable.
|
overridevirtual |
Retrieve the properties of this object.
Reimplemented from ImFusion::Configurable.
|
overridevirtual |
Compute the result.
Implements ImFusion::Algorithm.
|
overridevirtual |
If the algorithm creates new image data, it has to be transferred here.
Reimplemented from ImFusion::Algorithm.
|
protected |
ClKernel used for computation.
'computeFilter' uses only global GPU memory, 'computeFilterUsingLocalMem' caches an image patch into local workgroup memory before filtering