MeVisLab Toolbox Reference
ml::KernelBaseModule Class Referenceabstract

The module base class to apply kernels to an image. More...

#include <mlKernelBaseModule.h>

Inheritance diagram for ml::KernelBaseModule:
ml::Module ml::FieldContainer ml::Base ml::KernelModule ml::BitMorphologyFilter ml::CloseGapFilter ml::CompassFilter ml::ConvolutionFilter ml::Correlation ml::ExtConvolutionFilter ml::KernelCurvatureEstimationFilter ml::LocalMaximaFilter ml::MorphologyFilter ml::RankFilter ml::RobertsFilter ml::SigmaFilter ml::Sobel3DFilter ml::StdDeviationFilter ml::SurroundFilter ml::ZeroCrossingsFilter

Public Member Functions

Access to kernel.
KernelgetKernel ()
 
const KernelgetConstKernel () const
 Method to access the kernel as constant object. See also getKernel().
 
- Public Member Functions inherited from ml::Module
MLMetaProfilePtrgetMetaProfile () const
 Returns the meta profile for the base operator.
 
const chargetTypeNameFast () const
 Macro to declare methods for the ML runtime type system (see mlRuntimeSubClass.h).
 
 Module (int numInputImages, int numOutputImages)
 Constructor: Initializes numInputImages input images and numOutputImages output images of the module.
 
 ~Module () override
 Destructor: Destroys this module.
 
InputConnectorFieldgetInputImageField (MLint i) const
 Returns the field representing input image i. i must be a valid index.
 
OutputConnectorFieldgetOutputImageField (MLint i=0) const
 Returns field representing output image i. i must be a valid index.
 
MLint getNumInputImages () const
 Returns number of input images of this module.
 
MLint getNumOutputImages () const
 Returns number of output images of this module.
 
PagedImagegetOutputImage (MLint outputIndex=0) const
 Returns output image outputIndex. The index needs to be in the range [0, getNumOutputImages()-1].
 
InputConnectorFieldaddInputImage (const char *name=nullptr)
 Adds a new input image with name to the module.
 
OutputConnectorFieldaddOutputImage (const char *name=nullptr)
 Adds a new output image with name to the module.
 
PagedImagegetInputImage (MLint inputIndex, bool getReal=false) const
 Returns the output image of the module connected to input inputIndex.
 
PagedImagegetUpdatedInputImage (MLint inputIndex, bool getReal=false) const
 Convenience method for safe access to the input image at index inputIndex.
 
MLErrorCode processAllPages (int outputIndex=-1, SubImageBox region=SubImageBox(), MLRequestProgressCB *progressCallback=nullptr, void *progressCallbackUserData=nullptr)
 Processes all pages of a module for easy implementation of page-based image processing of complete images.
 
MLErrorCode processAllPages (ProcessAllPagesHandler &handler, SubImageBox region=SubImageBox(), MLRequestProgressCB *progressCallback=nullptr, void *progressCallbackUserData=nullptr)
 Process input images with a ProcessAllPagesHandler handler on a temporary output image (which allocates no data) For details, see processAllPages(-1) above.
 
MLErrorCode processMissingPages (int outputIndex=0, SubImageBox region=SubImageBox(), MLRequestProgressCB *progressCallback=nullptr, void *progressCallbackUserData=nullptr)
 Processes all missing pages on the given output image.
 
void clearOutputImage (MLint i=0)
 Clear cached output image pages of output image i.
 
MLint getOutputImageInplace (MLint outputIndex=0) const
 Return optimization flag: Return index of input image whose input tile is used also as output page for output outputIndex in calculateOutputSubImage() (instead of allocating its own memory).
 
MLint getBypass (MLint outputIndex=0) const
 Returns the currently bypass index or -1 if bypassing is disabled (default).
 
THREAD_SUPPORT getThreadSupport () const
 Returns the multithreading mode supported by this module, default is NO_THREAD_SUPPORT.
 
bool areRecursiveHandleNotificationsPermitted () const
 Returns if recursive entries in handleNotification are permitted.
 
MLint getHandleNotificationEntryCounter () const
 A counter returning the current number of (recursive re)entries in handleNotification.
 
PERMITTED_TYPES getVoxelDataTypeSupport () const
 Returns the current state of supported voxel data types.
 
bool isSupportedVoxelDataType (MLDataType dt) const
 Check if a given data type is supported on the module as configured with setVoxelDataTypeSupport.
 
virtual INPUT_HANDLE handleInput (int, INPUT_STATE) const
 This method may be reimplemented to enable support for invalid input images on the module.
 
INPUT_STATE getInputState (MLint index)
 Returns the current state of the input connection.
 
INPUT_STATE getUpdatedInputState (MLint index)
 Returns the updated state of the input image by calling updateImageProperties(index) and returning getInputState(index) afterwards.
 
bool isInputImageField (Field *field) const
 Returns if the given field is an input image field. This can be used in handleNotification(), to check if one of the input images has changed.
 
void touchOutputImageFields () const
 Touch all output image fields to indicate that the images have changed.
 
virtual void beginSaveFields ()
 Called before all fields data contents of this modules are saved.
 
virtual void endSaveFields ()
 Called after saving all field contents of this module.
 
- Public Member Functions inherited from ml::FieldContainer
 FieldContainer ()
 Constructor.
 
 ~FieldContainer () override
 Destructor: Deletes all added fields.
 
std::string whoAmI (bool withInstanceName=true) const
 Returns type and instance name of format "ClassTypeName(instanceName)" if the instance name is not empty and withInstanceName is true.
 
FieldaddField (const char *name, const char *type, const char *value)
 Adds a new field with name name, type type and value value (coded as string) to the container.
 
FieldaddField (Field *field)
 Adds a field, the ownership of the field is passed to the FieldContainer.
 
BoolFieldaddBool (const char *name)
 Creates a BoolField with name and adds it to the container. Default value is false.
 
BoolFieldaddBool (const char *name, bool value)
 Creates a BoolField with name and adds it to the container.
 
IntFieldaddInt (const char *name)
 Creates an IntField with name and adds it to the container. Default value is 0.
 
IntFieldaddInt (const char *name, MLint value)
 Creates an IntField with name and adds it to the container.
 
EnumFieldaddEnum (const char *name, const char *const *enumerationItemNames, MLint numEnumerationItems)
 Creates an EnumField field with name and adds it to the container.
 
EnumFieldaddEnum (const char *name, const std::vector< std::string > &enumerationItemNames)
 Creates an EnumField field with name and adds it to the container.
 
template<typename EnumType >
TypedEnumField< EnumType > * addEnum (const char *name, const EnumValues< EnumType > &values, EnumType initialValue)
 Creates a TypedEnumField field with name and adds it to the container.
 
FloatFieldaddFloat (const char *name)
 Creates a FloatField with name and adds it to the container. Default value is 0.f.
 
FloatFieldaddFloat (const char *name, float value)
 Creates a FloatField with name and adds it to the container.
 
ProgressFieldaddProgress (const char *name)
 Creates a float ProgressField with name and adds it to the container. Default value is 0.f.
 
ProgressFieldaddProgress (const char *name, float value)
 Creates a float ProgressField with name and adds it to the container.
 
DoubleFieldaddDouble (const char *name)
 Creates a DoubleField with name and adds it to the container. Default value is 0.
 
DoubleFieldaddDouble (const char *name, double value)
 Creates a DoubleField with name and adds it to the container.
 
StringFieldaddString (const char *name)
 Creates a StringField with name and adds it to the container. Default value is empty string.
 
StringFieldaddString (const char *name, const std::string &value)
 Creates a StringField with name and adds it to the container.
 
NotifyFieldaddNotify (const char *name)
 Creates a NotifyField field with name and adds it to the container.
 
TriggerFieldaddTrigger (const char *name)
 Creates a TriggerField field with name and adds it to the container.
 
BaseFieldaddBase (const char *name)
 Creates a Base field with name and adds it to the container. Default value is NULL.
 
BaseFieldaddBase (const char *name, Base *value)
 Creates a Base field with name and adds it to the container.
 
BaseFieldaddBase (const char *name, const RefCountedBasePtr &value)
 Creates a Base field with name and adds it to the container. Sets the value from intrusive pointer.
 
template<typename T >
BaseFieldaddBaseWithAllowedType (const char *name, T *value=nullptr)
 As above, but also sets the allowed type of the field.
 
template<typename T >
BaseFieldaddBaseWithAllowedType (const char *name, const ::boost::intrusive_ptr< T > &value)
 As above, but also sets the allowed type of the field.
 
template<typename T >
TypedBaseField< T > * addTypedBase (const char *name)
 Creates a TypedBaseField with name and adds it to the container. Default value is NULL.
 
template<typename T >
TypedBaseField< T > * addTypedBase (const char *name, T *value)
 Creates a TypedBaseField with name and adds it to the container.
 
template<typename T >
TypedBaseField< T > * addTypedBase (const char *name, const ::boost::intrusive_ptr< T > &value)
 Creates a TypedBaseField with name and adds it to the container. Sets the value from intrusive pointer.
 
SoNodeFieldaddSoNode (const char *name)
 Creates a SoNodeField with name and adds it to the container. Default value is NULL.
 
SoNodeFieldaddSoNode (const char *name, SoNode *value)
 Creates a SoNodeField with name and adds it to the container.
 
PointerFieldaddPointer (const char *name)
 Creates a PointerField with name and adds it to the container.
 
Vector2FieldaddVector2 (const char *name)
 Creates a Vector2Field with name and adds it to the container.
 
Vector2FieldaddVector2 (const char *name, const Vector2 &value)
 Creates a Vector2Field with name and adds it to the container.
 
Vector2FieldaddVector2 (const char *name, double x, double y)
 Creates a Vector2Field with name and adds it to the container.
 
Vector3FieldaddVector3 (const char *name)
 Creates a Vector3Field with name and adds it to the container.
 
Vector3FieldaddVector3 (const char *name, const Vector3 &value)
 Creates a Vector3Field with name and adds it to the container.
 
Vector3FieldaddVector3 (const char *name, double x, double y, double z)
 Creates a Vector3Field with name and adds it to the container.
 
Vector4FieldaddVector4 (const char *name)
 Creates a Vector4Field with name and adds it to the container.
 
Vector4FieldaddVector4 (const char *name, const Vector4 &value)
 Creates a Vector4Field with name and adds it to the container.
 
Vector4FieldaddVector4 (const char *name, double x, double y, double z, double w)
 Creates a Vector4Field with name and adds it to the container.
 
Vector5FieldaddVector5 (const char *name)
 Creates a Vector5Field with name and adds it to the container.
 
Vector5FieldaddVector5 (const char *name, const Vector5 &value)
 Creates a Vector5Field with name and adds it to the container.
 
Vector6FieldaddVector6 (const char *name)
 Creates a Vector6Field with name and adds it to the container.
 
Vector6FieldaddVector6 (const char *name, const Vector6 &value)
 Creates a Vector6Field with name and adds it to the container.
 
Vector10FieldaddVector10 (const char *name)
 Creates a Vector10Field with name and adds it to the container.
 
Vector10FieldaddVector10 (const char *name, const Vector10 &value)
 Creates a Vector10Field with name and adds it to the container.
 
ImageVectorFieldaddImageVector (const char *name)
 Creates a ImageVectorField with name and adds it to the container.
 
ImageVectorFieldaddImageVector (const char *name, const ImageVector &value)
 Creates a ImageVectorField with name and adds it to the container.
 
ImageVectorFieldaddImageVector (const char *name, MLint x, MLint y, MLint z, MLint c, MLint t, MLint u)
 Creates a ImageVectorField with name and adds it to the container.
 
SubImageBoxFieldaddSubImageBox (const char *name)
 Creates a SubImageBoxField with name and adds it to the container.
 
SubImageBoxFieldaddSubImageBox (const char *name, const SubImageBox &value)
 Creates a SubImageBoxField with name and adds it to the container.
 
SubImageBoxdFieldaddSubImageBoxd (const char *name)
 Creates a SubImageBoxd field with name and adds it to the container.
 
SubImageBoxdFieldaddSubImageBoxd (const char *name, const SubImageBoxd &value)
 Creates a SubImageBoxd field with name and adds it to the container.
 
ColorFieldaddColor (const char *name)
 Creates a ColorField with name and adds it to the container.
 
ColorFieldaddColor (const char *name, float r, float g, float b)
 Creates a ColorField with name and adds it to the container.
 
ColorFieldaddColor (const char *name, const Vector3 &value)
 Creates a ColorField with name and adds it to the container.
 
PlaneFieldaddPlane (const char *name)
 Creates a PlaneField with name and adds it to the container.
 
PlaneFieldaddPlane (const char *name, double f0, double f1, double f2, double f3)
 Creates a PlaneField with name and adds it to the container.
 
PlaneFieldaddPlane (const char *name, const Plane &value)
 Creates a PlaneField with name and adds it to the container.
 
RotationFieldaddRotation (const char *name)
 Creates a RotationField with name and adds it to the container.
 
RotationFieldaddRotation (const char *name, const Rotation &value)
 Creates a RotationField with name and adds it to the container.
 
Matrix2FieldaddMatrix2 (const char *name)
 Creates a Matrix2Field with name and adds it to the container.
 
Matrix2FieldaddMatrix2 (const char *name, const Matrix2 &value)
 Creates a Matrix2Field with name and adds it to the container.
 
Matrix3FieldaddMatrix3 (const char *name)
 Creates a Matrix3Field with name and adds it to the container.
 
Matrix3FieldaddMatrix3 (const char *name, const Matrix3 &value)
 Creates a Matrix3Field with name and adds it to the container.
 
Matrix4FieldaddMatrix4 (const char *name)
 Creates a Matrix4Field with name and adds it to the container.
 
Matrix4FieldaddMatrix4 (const char *name, const Matrix4 &value)
 Creates a Matrix4Field with name and adds it to the container.
 
Matrix5FieldaddMatrix5 (const char *name)
 Creates a Matrix5Field with name and adds it to the container.
 
Matrix5FieldaddMatrix5 (const char *name, const Matrix5 &value)
 Creates a Matrix5Field with name and adds it to the container.
 
Matrix6FieldaddMatrix6 (const char *name)
 Creates a Matrix6Field with name and adds it to the container.
 
Matrix6FieldaddMatrix6 (const char *name, const Matrix6 &value)
 Creates a Matrix6Field with name and adds it to the container.
 
MatrixFieldaddMatrix (const char *name)
 Creates a MatrixField with name and adds it to the container.
 
MatrixFieldaddMatrix (const char *name, const Matrix4 &value)
 Creates a MatrixField with name and adds it to the container.
 
MLDataTypeFieldaddMLDataType (const char *name)
 Creates a MTDataTypeField with name and adds it to the container.
 
MLDataTypeFieldaddMLDataType (const char *name, MLDataType value)
 Creates a MTDataTypeField with name and adds it to the container.
 
UniversalTypeFieldaddUniversalType (const char *name)
 Creates an UniversalTypeField field with name and adds it to the container.
 
IntListFieldaddIntList (const char *name)
 Creates an IntListField field with name and empty list value and adds it to the container.
 
IntListFieldaddIntList (const char *name, const std::vector< MLint > &value)
 Creates an IntListField field with name and given list value and adds it to the container.
 
DoubleListFieldaddDoubleList (const char *name)
 Creates an DoubleListField field with name and empty list value and adds it to the container.
 
DoubleListFieldaddDoubleList (const char *name, const std::vector< double > &value)
 Creates an DoubleListField field with name and given list value and adds it to the container.
 
Vector2ListFieldaddVector2List (const char *name)
 Creates an Vector2ListField field with name and empty list value and adds it to the container.
 
Vector2ListFieldaddVector2List (const char *name, const std::vector< Vector2 > &value)
 Creates an Vector2ListField field with name and given list value and adds it to the container.
 
Vector3ListFieldaddVector3List (const char *name)
 Creates an Vector3ListField field with name and empty list value and adds it to the container.
 
Vector3ListFieldaddVector3List (const char *name, const std::vector< Vector3 > &value)
 Creates an Vector3ListField field with name and given list value and adds it to the container.
 
Vector4ListFieldaddVector4List (const char *name)
 Creates an Vector4ListField field with name and empty list value and adds it to the container.
 
Vector4ListFieldaddVector4List (const char *name, const std::vector< Vector4 > &value)
 Creates an Vector4ListField field with name and given list value and adds it to the container.
 
size_t getNumFields () const
 Returns the number of added fields.
 
bool hasField (const std::string &name) const
 Returns true if the field with name name exists; otherwise false is returned.
 
FieldgetField (const std::string &name) const
 Returns the pointer to the field with name name.
 
FieldgetField (MLint index) const
 Returns pointer of field at index if it exists. If not, -1 is returned.
 
MLint getFieldIndex (Field *field) const
 Returns index of field if it exists. If not, -1 is returned.
 
void setFieldStringValue (const std::string &name, const std::string &value)
 Sets the value of the field with name if it exists.
 
std::string getFieldStringValue (const std::string &name) const
 Returns the string value of the field with name if it is found.
 
virtual void activateAttachments ()
 Reactivates notification handling, i.e., all fields of this module will send notifications again to attached sensors and fields if their value is set or changed.
 
virtual void deactivateAttachments ()
 Disables notification handling, i.e., all fields of this module will not send notifications to attached sensors and fields any more if their values are set or changed.
 
- Public Member Functions inherited from ml::Base
 Base ()
 Constructor.
 
virtual ~Base ()
 Destructor.
 
virtual BasedeepCopy () const
 Set addStateToTree version number that can be accessed via getAddStateVersion()
 
bool isOfAllowedType (const std::vector< const RuntimeType * > &types) const
 Check if this object's type is equal to or derived from one of the types given in the argument.
 
virtual bool isRefCountedBase () const
 Returns if the instance is derived from RefCountedBase.
 
virtual std::string detailString () const
 Return a string describing this object.
 
virtual bool implementsPersistence (PersistenceInterface) const
 Override this method to declare which persistence interfaces are implemented by your derived class.
 
virtual std::string persistentState () const
 Returns a string describing the object's internal state.
 
virtual void setPersistentState (const std::string &state)
 Restores the object's internal state from a string that had been previously generated using persistentState().
 
virtual void addStateToTree (TreeNode *) const
 Attaches the object state as children of the given parent node.
 
virtual void readStateFromTree (TreeNode *)
 Reads the object state from the children of the given parent node.
 
virtual void writeTo (AbstractPersistenceOutputStream *) const
 Write the objects state to the data stream object.
 
virtual void readFrom (AbstractPersistenceInputStream *, int)
 Read the objects state from the data stream object.
 

Protected Member Functions

 KernelBaseModule (int inputNum=1, int outputNum=1)
 Constructor.
 
virtual void _setCorrectCorrelationMinMax (bool imageIntervalUsed=false, MLdouble intervalMin=0, MLdouble intervalMax=0, MLint inIdx=0, MLint outIdx=0)
 This method calculates and sets the possible min/max values for output image outIdx if a correlation or convolution filtering is assumed on input inIdx.
 
virtual ImageVector _getCalculatedReferenceInputExt () const
 Return the reference extent of input image dependent on the current value of _referenceExtentFld.
 
virtual void _calcKernelPage (SubImage *outSubImg, int outIndex, SubImage *inSubImgs, int numInSubImgs, MLsoffset *indexTab, size_t indexTabSize, MLsoffset srcVoxelOffset, size_t loopIdx, size_t iteration, const ImageVector &ov1, const ImageVector &ov2, const ImageVector &pOf, size_t numVox)=0
 This method is not intended to be overloaded directly, because it is subject to change.
 
Methods overloaded from \c Module.

Computes the output image properties for output outIndex.

The world coordinates and the extents of the output image are corrected dependent on the border handling. In the case of multiple input images input image 0 provides the reference image extent. This function also updates min/max values of output images on border handling mode KernelTools::PAD_DST_FILL values. Note that KernelTools::PAD_SRC_FILL has to be handled by derived classes.

void calculateOutputImageProperties (int outputIndex, PagedImage *outputImage) override
 Set properties of output image outputImage with output index outputIndex.
 
SubImageBox calculateInputSubImageBox (int inIndex, const SubImageBox &outSubImgBox, int outIndex) override
 Calculates the region of the input image needed for the calculation of the output image region defined by outSubImg and output index outIndex.
 
virtual void calcInSubImagePreparation (int outIndex, SubImage *inSubImgs)
 Does some preprocessing on input subimages if we have more than one.
 
virtual void calcOutSubImagePostProcessing (SubImage *outSubImg, int outIndex, SubImage *inSubImgs)
 Called to postProcess the output image outSubImg with the index outIndex from the input subimage inSubImgs.
 
virtual SubImageBox calculateAreaToBeCalculated (const SubImageBox &areaToBeCalculated, const SubImageBox &outSubImageBox)
 Function called after the Kernel Framework calculated which box needs to be calculated for the current outImage.
 
virtual ImageVector calculateOutInCoordShift (const ImageVector shift, const SubImageBox &outSubImageBox)
 Function called after the Kernel Framework calculated the shift vector between input and output.
 
virtual SubImageBox calculateValidDestArea (const SubImageBox &validDestArea, const SubImageBox &outSubImageBox)
 Function called after the Kernel Framework calculated the valid area in the global destination image.
 
virtual void _connectToAllOutputs (Field *field)
 Helper function to connect a field field to all output fields.
 
- Protected Member Functions inherited from ml::Module
void handleNotificationInternal (Field *field, FieldSensor::Strength strength) override
 Called from FieldContainer whenever a field changes.
 
virtual void provideCustomPage (int, const SubImageBox &, MLMemoryBlockHandle &)
 This method allows a Module to provide its own pages to the Host for the outputIndex output image.
 
void handleNotificationOff ()
 Decreases lock counter for handleNotification calls.
 
void handleNotificationOn ()
 Increases lock counter for handleNotification calls.
 
bool isHandleNotificationOn ()
 Returns true if handleNotification calls are permitted, otherwise false.
 
void setOutputImageInplace (MLint outputIndex=0, MLint inputIndex=0)
 Set optimization flag: If calculating a page in calculateOutputSubImage(), the output image page of output outputIndex shall use the same memory as the input page of input inputIndex.
 
void unsetOutputImageInplace (MLint outputIndex=0)
 Clear optimization flag: output page of output at outputIndex and input tile shall use different memory buffers in calculateOutputSubImage().
 
void setBypass (MLint outputIndex=0, MLint inputIndex=0)
 Sets the input image whose pages can also be used instead of output pages for the output image at outputIndex to avoid recalculations.
 
void setClampPagesToImageExtent (bool flag=true)
 Enables/disables page clamping on all output images.
 
void setThreadSupport (THREAD_SUPPORT supportMode)
 Pass any THREAD_SUPPORT supportMode to decide whether and what type of multithreading is supported by this module.
 
void permitRecursiveHandleNotifications (bool enable)
 If this flag is set to enable =true, recursive entries in handleNotification are permitted.
 
void setVoxelDataTypeSupport (PERMITTED_TYPES permTypes)
 Specifies which types this module supports.
 
virtual void handleNotification (Field *)
 Called when any field data in the field container of this module is modified.
 
virtual void calculateOutputSubImage (SubImage *outputSubImage, int outputIndex, SubImage *inputSubImages)
 Calculate page outputSubImage of output image with index outputIndex given the input image tiles in array inputSubImages.
 

Friends

class KernelBaseOpCalculateOutputImageHandler
 

Standard control fields for all kernel modules.

enum  InputImageRefExtent {
  Overlap = 0 , Input0_ExtWithoutFill , Input0_ExtWithFill , MaxExtentsWithoutFill ,
  MaxExtentsWithFill , NumImageRefExtents
}
 Enumerator specifying the calculation mode for the extent of the reference extent of the input image. More...
 
EnumFieldgetBorderHandlingFld () const
 
DoubleFieldgetFillValueFld () const
 The field value is value written in input or output image borders where a border handling requires filling with a fill value.
 
EnumFieldgetReferenceExtentModeFld () const
 Returns how the reference extent for input images is calculated; valid values are InputImageRefExtent (except of NumImageRefExtents) and default is Overlap.
 

Additional Inherited Members

- Public Types inherited from ml::Module
enum  PERMITTED_TYPES { ONLY_SCALAR_TYPES , ONLY_DEFAULT_TYPES , ALL_REGISTERED_TYPES }
 See documentation of setVoxelDataTypeSupport. More...
 
enum  INPUT_STATE { DISCONNECTED = 0 , CONNECTED_BUT_INVALID = 1 , CONNECTED_AND_VALID = 2 , CONNECTED_BUT_NEEDS_UPDATE = 3 }
 See documentation of handleInput. More...
 
enum  INPUT_HANDLE { INVALIDATE = 0 , ALLOW_INVALID_INPUT = 2 }
 See documentation of handleInput. More...
 
- Public Types inherited from ml::Base
enum  PersistenceInterface { PersistenceByString , PersistenceByTreeNode , PersistenceByStream }
 This enum describes the different persistence interfaces available. More...
 
- Static Public Member Functions inherited from ml::Module
static MLErrorCode getTile (PagedImage *image, SubImageBox loc, MLDataType datatype, void **data, const ScaleShiftData &scaleShiftData=ScaleShiftData(), MLRequestProgressCB *progressCallback=nullptr, void *progressCallbackUserData=nullptr)
 For documentation see Host::getTile() function with same signature.
 
static MLErrorCode getTile (PagedImage *image, SubImage &subimg, const ScaleShiftData &scaleShiftData=ScaleShiftData(), MLRequestProgressCB *progressCallback=nullptr, void *progressCallbackUserData=nullptr)
 For documentation see Host::getTile() function with same signature and Module passed as reference.
 
static MLErrorCode updateImageProperties (PagedImage *image)
 For documentation see Host::updateImageProperties() function with same signature.
 
static void freeTile (void *data)
 For documentation see Host::freeTile().
 
static void updateProgress (const char *info1, const char *info2)
 For documentation see Host::updateProgress().
 
static bool shouldTerminate ()
 For documentation see Host::shouldTerminate().
 
static FieldgetPressedNotifyField ()
 For documentation see Host::getPressedNotifyField().
 
static void adaptPageExtent (ImageVector &pageExtent, MLDataType imageType, const ImageVector &newImgExtent, const ImageVector &oldImgExtent, const ImageVector &pageUnit=ImageVector(0), const ImageVector &minPageExtent=ImageVector(0), const ImageVector &maxPageExtent=ImageVector(0))
 Adapt page size.
 
static std::string getVoxelValueAsString (PagedImage *image, const ImageVector &position, MLErrorCode *errorCode=nullptr, const std::string &errorResult="")
 Returns the voxel value at position position of the image image.
 
static size_t getNumModules ()
 Returns number of instantiated modules.
 
static ModulegetModule (size_t index)
 Returns pointer to instantiated module index.
 
static MLint findModuleIndex (Module &module)
 Returns index of Module module. If not found -1 is returned.
 
static void destroyModule ()
 Destroys static allocated tables to avoid memory leaks.
 
- Protected Types inherited from ml::Module
enum  THREAD_SUPPORT { NO_THREAD_SUPPORT = PagedImage::NO_THREAD_SUPPORT , MULTITHREADED = PagedImage::MULTITHREADED , IO_THREAD = PagedImage::IO_THREAD }
 Enumerator deciding whether and which type of multithreading is supported by this module. More...
 

Detailed Description

The module base class to apply kernels to an image.

Fields for border handling and fill value are automatically created. Macros are available for simple usage and implementation of the templated kernel algorithm, see mlKernelMacros.h, KernelModule, KernelTools and KernelExample for more information and examples.

This class also creates a border handling field and a fill value field by default and connects image input 0 with the output image 0.

Also have a look to the more elaborated class KernelModule which implements much convenience functionality. It is typically used to derive from.

In the following paragraphs you find documentation which describes how to implement a kernel operation.

Since the implementation has to be done for all data types the filtering code needs to be implemented as template and a dispatcher is needed which calls the correct templated versions of this method.

The template is typically implemented in a template function called calcRow().

The dispatcher should be implemented by using macros from the file mlKernelMacros.h. For the header file typically CALC_ROW_H() is used and for implementations typically CALC_ROW_CPP(). The default implementation is pure virtual, i.e. the KernelBaseModule cannot be instantiated.

Note that there are also a more elaborated versions of CALC_ROW_H() and CALC_ROW_CPP() which provide more parameters, CALC_ROW_H_EXT() and CALC_ROW_CPP_EXT().

They pass more parameters to the template function which therefore requires the implementation of the template function calcRow() with more parameters.

Some other macros, CALC_ROW_CPP_ANY(CLASS_NAME, KERNEL_SUPER_CLASS, SWITCH_SELECTION), CALC_ROW_CPP_ANY_SUBIMG(CLASS_NAME, KERNEL_SUPER_CLASS, SWITCH_SELECTION), CALC_ROW_CPP_SUBIMG(CLASS_NAME, KERNEL_SUPER_CLASS), and CALC_ROW_CPP_SUBIMG_EXT(CLASS_NAME, KERNEL_SUPER_CLASS) provide additional functionality to compile kernel filter for a subset of data types or with the subimages in which the voxel rows are filtered. They require additional parameters and/or other signatures of the template function calcRow().

Please use only the macros for dispatching this call to the template function of a derived class since calcRow() parameters are subject to change.

A derived class typically would implement a kernel algorithm as follows:

CALC_ROW_H() implements the header code for the dispatcher to call the right template function from. Use CALC_ROW_CPP() in the implementation file to implement the standard stuff there.

outCursor is a pointer to the output image voxel in which needs to be written the result value of the kernel operation.

inCursor is the pointer to the input image voxel covered by the origin of the kernel. Note that the kernel does not necessarily have an entry at that position. Anyway, it represents a pointer to the input image voxel under the kernel element (0,0,0,0,0,0).

// Moves write cursor forward.
// Moves forward the kernel origin pointer.
Target mlrange_cast(Source arg)
Generic version of checked ML casts.

numVox is the number of voxels which needs to be filtered by calcRow(). Loop numVox times to filter the row and move the cursor of the input and the output subimage in that loop

srcVoxelOffset is the offset from the current cursor of the input subimage to get access to that voxel which corresponds to the voxel position written to the output image. So

*outCursor = inCursor[srcVoxOffset]

copies the input image to the output image without shifting. srcVoxelOffst can be considered as an offset to the kernel center. Note that the kernel does NOT necessarily have a valid entry there.

indexTabSize contains the number of elements in the kernel and is identical to getKernel().getTabSize(). The number of elements in getKernel().getCoordTab() and getKernel().getValueTab() are also identical.

indexTab contains a table of offsets from the current cursor of the input subimage (inCursor) to get access to the image voxels covered by kernel elements. So

inCursor[indexTab[3]]

is the input image voxel covered by the third kernel element.

If you use the macros CALC_ROW_H_EXT() and CALC_ROW_CPP_EXT() then you also get the following parameters:

outIndex specifying the index of the output image from which the row shall be processed.

separationPass specifying the index of the processing pass of the buffer if a separable kernel filtering is applied.

The following stuff is needed to be implement as a kernel operation:

In the header file:

template <typename DATATYPE>
void calcRow(MLsoffset *indexTab,
size_t indexTabSize,
size_t numVox,
#define CALC_ROW_H()
This file contains macros CALC_ROW_H() and CALC_ROW_CPP() used in classes derived from KernelBaseOp a...
MLint MLsoffset
Signed ML offset type which is a 32 bit signed integer on 32 bit platforms and a 64 bit integer on 64...
Definition mlTypeDefs.h:562

The following code implements a standard correlation of the input image with an arbitrary kernel in the .cpp file:

template <typename DATATYPE>
void ClassName::calcRow(MLsoffset *indexTab,
size_t indexTabSize,
size_t numVox,
{
// Get fast pointer to tables of kernel values.
// Scan entire voxel line to be filtered.
for (long i=0; i < numVox; i++){
// Sum up the products of the kernel element values and the input image voxels
// found in the input page covered by the kernel elements. Input image voxels
// are found by offsetting the input image cursor with the indexes from \c indexTab.
// Loop over all kernel elements and the input voxels covered by them.
for (size_t c=0; c < indexTabSize; ++c){
}
// Write result into output subimage.
// Move read and write cursor forward.
} // for
} // calcRow
const KDATATYPE * getValueTab(size_t dim=0) const
Gets the table of kernel element values which are currently defined.
Definition mlKernel.h:656
MLdouble KernelDataType
Define the standard data type for kernel elements to be used in this library.
Definition mlKernel.h:2168

You can also use the KernelTools class to do the same stuff:

template <typename DATATYPE>
void ClassName::calcRow(MLsoffset *indexTab,
size_t indexTabSize,
size_t numVox,
const ImageVector &/*rowStart*/)
{
}
static void correlateLine(const IN_DATATYPE *inCursor, OUT_DATATYPE *outCursor, size_t numVox, const K_DATATYPE *valTab, const MLsoffset *indexTab, size_t indexTabSize)
See MLKernelToolsCorrelateLine.

For related code and more information see mlKernelExample.h, mlKernel.h, mlKernelBaseModule.h, mlKernelModule.h, mlKernelEditor.h, mlRankFilter.h, mlExtConvolutionFilter.h, mlKernelMacros, mlKernelTools.h and mlConvolutionFilter.h.

Definition at line 227 of file mlKernelBaseModule.h.

Member Enumeration Documentation

◆ InputImageRefExtent

Enumerator specifying the calculation mode for the extent of the reference extent of the input image.

Enumerator
Overlap 

Smallest component wise extent of all inputs (Overlap).

Input0_ExtWithoutFill 

Input 0 defines the reference extent of the input image, leaving undefined input areas undefined.

Input0_ExtWithFill 

Input 0 defines the reference extent of the input image, filling undefined input areas with fill value.

MaxExtentsWithoutFill 

Maximum component wise extent of all inputs, leaving undefined input areas undefined.

MaxExtentsWithFill 

Maximum component wise extent of all inputs, filling undefined input areas with fill value.

NumImageRefExtents 

Number of modes to determine reference extent of input image, not to be used as mode.

Definition at line 270 of file mlKernelBaseModule.h.

Constructor & Destructor Documentation

◆ KernelBaseModule()

ml::KernelBaseModule::KernelBaseModule ( int inputNum = 1,
int outputNum = 1 )
protected

Constructor.

Initializes the fields, the members and the field connections with the field container. Default configuration is with one input and one output if no arguments are passed. The constructor is protected to avoid direct instantiations of this module.

Member Function Documentation

◆ _calcKernelPage()

virtual void ml::KernelBaseModule::_calcKernelPage ( SubImage * outSubImg,
int outIndex,
SubImage * inSubImgs,
int numInSubImgs,
MLsoffset * indexTab,
size_t indexTabSize,
MLsoffset srcVoxelOffset,
size_t loopIdx,
size_t iteration,
const ImageVector & ov1,
const ImageVector & ov2,
const ImageVector & pOf,
size_t numVox )
protectedpure virtual

This method is not intended to be overloaded directly, because it is subject to change.

It will be overloaded by CALC_ROW macros. number of voxels in row to be processed.

Parameters
outSubImgoutput subimage to be written
outIndexindex of output subimage
inSubImgsarray of input subimages
numInSubImgsnumber of input subimages
indexTaboffset table to input cursor
indexTabSizenumber of offsets in indexTab
srcVoxelOffsetoffset to input cursor to corresponding input voxel for output voxel
loopIdxcurrent pass of separable filtering
iterationcurrent pass of iterative filtering
ov1first corner voxel of output area to be written.
ov2second corner voxel of output area to be written.
pOfcoordinate shift between input kernel origin and written output voxel

◆ _connectToAllOutputs()

virtual void ml::KernelBaseModule::_connectToAllOutputs ( Field * field)
protectedvirtual

Helper function to connect a field field to all output fields.

NULL field pointers are legal and will be ignored.

◆ _getCalculatedReferenceInputExt()

virtual ImageVector ml::KernelBaseModule::_getCalculatedReferenceInputExt ( ) const
protectedvirtual

Return the reference extent of input image dependent on the current value of _referenceExtentFld.

◆ _setCorrectCorrelationMinMax()

virtual void ml::KernelBaseModule::_setCorrectCorrelationMinMax ( bool imageIntervalUsed = false,
MLdouble intervalMin = 0,
MLdouble intervalMax = 0,
MLint inIdx = 0,
MLint outIdx = 0 )
protectedvirtual

This method calculates and sets the possible min/max values for output image outIdx if a correlation or convolution filtering is assumed on input inIdx.

Often also an interval is used to limit filtering. The interval [intervalMin, intervalMax] can be used to specify voxel values which includes the voxels values to be filtered or excludes them if intervalMin is smaller than intervalMax, i.e. which remain unchanged by the filtering process. If imageIntervalUsed is passed as true then image interval and normal min/max values from input image are included for the case that voxels are simply copied and not filtered. Also exclusive intervals with intervalMax < intervalMin are considered correctly. If the getFillValueFld() value is outside the incoming min/max values and border handling is KernelTools::PAD_SRC_FILL then it will be included in the calculation of the new min/max values. Note that intervalMin and intervalMax only need to contain correct values if imageIntervalUsed is true; otherwise they're ignored. Only to be called in calculateOutputImageProperties()!

◆ calcInSubImagePreparation()

virtual void ml::KernelBaseModule::calcInSubImagePreparation ( int outIndex,
SubImage * inSubImgs )
protectedvirtual

Does some preprocessing on input subimages if we have more than one.

In modes Input0_ExtWithFill and MaxExtentsWithFill in _referenceExtentFld we might have undefined regions in input subimages which we fill with the fill value. Normally it is automatically called by CALC_ROW macros. So "overloading by hand" is typically not recommended.

◆ calcOutSubImagePostProcessing()

virtual void ml::KernelBaseModule::calcOutSubImagePostProcessing ( SubImage * outSubImg,
int outIndex,
SubImage * inSubImgs )
protectedvirtual

Called to postProcess the output image outSubImg with the index outIndex from the input subimage inSubImgs.

Currently it does nothing. Normally it is automatically called by CALC_ROW macros. So "overloading by hand" is typically not recommended.

Reimplemented in ml::KernelModule.

◆ calculateAreaToBeCalculated()

virtual SubImageBox ml::KernelBaseModule::calculateAreaToBeCalculated ( const SubImageBox & areaToBeCalculated,
const SubImageBox & outSubImageBox )
protectedvirtual

Function called after the Kernel Framework calculated which box needs to be calculated for the current outImage.

This must be overridden in case the input and output images do not have the same dimensions when calculateInputSubImageBox is overridden.

◆ calculateInputSubImageBox()

SubImageBox ml::KernelBaseModule::calculateInputSubImageBox ( int inIndex,
const SubImageBox & outSubImgBox,
int outIndex )
overrideprotectedvirtual

Calculates the region of the input image needed for the calculation of the output image region defined by outSubImg and output index outIndex.

The border handling is considered correctly in the calculation of the box of the input subimage.

Reimplemented from ml::Module.

◆ calculateOutInCoordShift()

virtual ImageVector ml::KernelBaseModule::calculateOutInCoordShift ( const ImageVector shift,
const SubImageBox & outSubImageBox )
protectedvirtual

Function called after the Kernel Framework calculated the shift vector between input and output.

This must be overridden in case the input and output images do not have the same dimensions when calculateInputSubImageBox is overridden.

◆ calculateOutputImageProperties()

void ml::KernelBaseModule::calculateOutputImageProperties ( int outputIndex,
PagedImage * outputImage )
overrideprotectedvirtual

Set properties of output image outputImage with output index outputIndex.

With getInputImage(inputIndex) the input images can be accessed to calculate output image properties. By default, the properties of input image are copied to output image and all input sub images are requested with the datatype of the outputImage. If you want to request input sub images of a different type as your output image, you can use the PagedImage::setInSubImageDataType() to specify those types. See PagedImage for details on the properties you can set for input sub images. In case of a processAllPages(-1) call, the outputIndex will be -1 and outImage will be a temporary output image whose properties can be set. To invalidate the output image, do:

outputImage->setInvalid();
return;

Reimplemented from ml::Module.

Reimplemented in ml::KernelCurvatureEstimationFilter, ml::KernelModule, ml::LocalMaximaFilter, ml::MorphologyFilter, ml::RankFilter, ml::RobertsFilter, ml::SigmaFilter, ml::Sobel3DFilter, ml::StdDeviationFilter, ml::SurroundFilter, and ml::ZeroCrossingsFilter.

◆ calculateValidDestArea()

virtual SubImageBox ml::KernelBaseModule::calculateValidDestArea ( const SubImageBox & validDestArea,
const SubImageBox & outSubImageBox )
protectedvirtual

Function called after the Kernel Framework calculated the valid area in the global destination image.

This must be overridden in case the input and output images do not have the same dimensions when calculateInputSubImageBox is overridden.

◆ getBorderHandlingFld()

EnumField * ml::KernelBaseModule::getBorderHandlingFld ( ) const
inline

Definition at line 256 of file mlKernelBaseModule.h.

◆ getConstKernel()

const Kernel & ml::KernelBaseModule::getConstKernel ( ) const
inline

Method to access the kernel as constant object. See also getKernel().

Definition at line 247 of file mlKernelBaseModule.h.

◆ getFillValueFld()

DoubleField * ml::KernelBaseModule::getFillValueFld ( ) const
inline

The field value is value written in input or output image borders where a border handling requires filling with a fill value.

Default field value is 0.

Definition at line 261 of file mlKernelBaseModule.h.

◆ getKernel()

Kernel & ml::KernelBaseModule::getKernel ( )
inline

Definition at line 244 of file mlKernelBaseModule.h.

◆ getReferenceExtentModeFld()

EnumField & ml::KernelBaseModule::getReferenceExtentModeFld ( ) const
inline

Returns how the reference extent for input images is calculated; valid values are InputImageRefExtent (except of NumImageRefExtents) and default is Overlap.

Definition at line 298 of file mlKernelBaseModule.h.

Friends And Related Symbol Documentation

◆ KernelBaseOpCalculateOutputImageHandler

friend class KernelBaseOpCalculateOutputImageHandler
friend

Definition at line 229 of file mlKernelBaseModule.h.


The documentation for this class was generated from the following file: