![]() |
ImFusion C++ SDK 4.5.0
|
#include <ImFusion/GL/HessianAlgorithm.h>
Numerically compute the Hessian (and optionally the gradient) of a single-channel image. More...
Numerically compute the Hessian (and optionally the gradient) of a single-channel image.
The output always contains at least one SharedImageSet for the Hessian. For 3D images, the Hessian SharedImageSet contains two SharedImages:
If p_computeGradient is enabled, an additional SharedImageSet is appended to the output containing the gradient as a single SharedImage with dim channels (dx, dy[, dz]).
If p_computeEigenvalues is enabled, an additional SharedImageSet is appended containing the eigenvalues of the Hessian sorted in ascending order (lambda0 <= lambda1 [<= lambda2]) as a single SharedImage with dim channels.
Derivatives can be computed in pixel, image (mm), or world coordinates (see p_coordinates). For small p_sigmaSmooth (sigmaSmooth/spacing <= 1), central finite differences are used directly. For larger p_sigmaSmooth, properly normalized Gaussian derivative kernels are used.
Public Types | |
| enum class | Coordinates { Pixel = 0 , Image , World } |
| Coordinate system in which derivatives are computed. More... | |
| 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 | |
| HessianAlgorithm (SharedImageSet &input) | |
| Constructor. Input must contain exactly one single-channel image. | |
| void | compute () override |
| Execute the algorithm. | |
| OwningDataList | takeOutput () override |
| Return any new Data that was created by the Algorithm during the last call to compute(). | |
| std::unique_ptr< SharedImageSet > | takeHessian () |
| Take individual output components (available after compute()). | |
| std::unique_ptr< SharedImageSet > | takeGradient () |
| std::unique_ptr< SharedImageSet > | takeEigenvalues () |
| std::unique_ptr< SharedImageSet > | computeEigenvalues (SharedImageSet &hessianSis) |
| Compute eigenvalues of a symmetric matrix stored as a two-frame SharedImageSet (first frame: diagonal entries, second: upper off-diagonal entries). | |
| std::unique_ptr< SharedImageSet > | computeShapeOperator (SharedImageSet &hessianSis, SharedImageSet &gradientSis) |
| Compute the shape operator S = -(1/||g||) * P * H * P of the level sets of f, where g = grad(f), H = D^2(f), n = g/||g||, and P = I - n*n^T. | |
| 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 | configure (const Properties *p) |
| Configure this object instance by de-serializing the given Properties. | |
| virtual void | configuration (Properties *p) const |
| Serialize the current object configuration into the given Properties object. | |
| 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 &dl, Algorithm **alg) |
| static std::unique_ptr< TypedImage< float > > | createGaussdFilter (double sigma, double spacing, int order, bool physicalDerivativeScale=true, double finiteDiffThreshold=1.0, bool correctKernelSum=true) |
| Create a 1D Gaussian derivative kernel. | |
| 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. | |
Public Attributes | |
| Parameter< Coordinates > | p_coordinates = {"coordinates", Coordinates::Pixel, this} |
| Coordinate system for the computed derivatives. | |
| Parameter< double > | p_sigmaSmooth = {"sigmaSmooth", 0.0, this} |
| Standard deviation for Gaussian pre-smoothing to stabilize derivatives. | |
| Parameter< bool > | p_computeGradient = {"computeGradient", false, this} |
| If true, compute and output the gradient in addition to the Hessian. | |
| Parameter< bool > | p_computeEigenvalues = {"computeEigenvalues", false, this} |
| If true, compute and output the eigenvalues of the Hessian (sorted ascending). | |
| Parameter< bool > | p_splitChannels = {"splitChannels", false, this} |
| If true, split all multi-channel output images into separate single-channel images. | |
| 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. | |
Additional Inherited Members | |
| 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. | |
| 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. | |
|
strong |
|
static |
Create a 1D Gaussian derivative kernel.
| sigma | Standard deviation of the Gaussian in physical units (same units as spacing). Must be non-negative; zero or small values (sigma/spacing <= finiteDiffThreshold) fall back to central finite differences directly. |
| spacing | Pixel spacing along this axis. |
| order | Derivative order (0 = smoothing, 1 = first derivative, 2 = second derivative). |
| physicalDerivativeScale | If true (default), the kernel is scaled to produce derivatives in physical units. If false, the kernel operates in pixel units (used by legacy callers). |
| finiteDiffThreshold | Pixel-space sigma below which a central finite difference stencil is used instead of a Gaussian kernel. Pass 0.0 to always use the Gaussian kernel. |
| correctKernelSum | If true (default), derivative kernels are corrected so they sum to exactly zero, compensating for Gaussian tail truncation. |
|
overridevirtual |
Execute the algorithm.
Implements ImFusion::Algorithm.
|
overridevirtual |
Return any new Data that was created by the Algorithm during the last call to compute().
The default implementation will return an empty list.
Reimplemented from ImFusion::Algorithm.
|
inline |
Take individual output components (available after compute()).
These move ownership — each can only be called once.
| std::unique_ptr< SharedImageSet > ImFusion::HessianAlgorithm::computeEigenvalues | ( | SharedImageSet & | hessianSis | ) |
Compute eigenvalues of a symmetric matrix stored as a two-frame SharedImageSet (first frame: diagonal entries, second: upper off-diagonal entries).
Returns a SharedImageSet with a single image containing sorted eigenvalues (ascending) as channels.
| std::unique_ptr< SharedImageSet > ImFusion::HessianAlgorithm::computeShapeOperator | ( | SharedImageSet & | hessianSis, |
| SharedImageSet & | gradientSis ) |
Compute the shape operator S = -(1/||g||) * P * H * P of the level sets of f, where g = grad(f), H = D^2(f), n = g/||g||, and P = I - n*n^T.
Both inputs must be in split-channel format (p_splitChannels = true): hessianSis: [Hxx, Hyy, Hzz, Hxy, Hxz, Hyz] (3D) or [Hxx, Hyy, Hxy] (2D) gradientSis: [gx, gy, gz] (3D) or [gx, gy] (2D)
Returns a SharedImageSet in multi-channel format compatible with computeEigenvalues(): get(0): diagonal entries (Sxx, Syy[, Szz]) as multi-channel image get(1): off-diagonal entries (Sxy[, Sxz, Syz]) as multi-channel image
| Parameter<double> ImFusion::HessianAlgorithm::p_sigmaSmooth = {"sigmaSmooth", 0.0, this} |
Standard deviation for Gaussian pre-smoothing to stabilize derivatives.
Units depend on p_coordinates: pixels for Pixel mode, mm for Image/World mode. A value of 0 disables smoothing (pure central differences). Must not be negative.