|
MeVisLab Toolbox Reference
|
#include <mlKernelBaseModule.h>
Public Member Functions | |
Access to kernel. | |
| Kernel & | getKernel () |
| const Kernel & | getConstKernel () const |
Method to access the kernel as constant object. See also getKernel(). | |
| Public Member Functions inherited from ml::Module | |
| MLMetaProfilePtr & | getMetaProfile () const |
| Returns the metaprofile for the base operator. | |
| const char * | getTypeNameFast () const |
| Module (int numInputImages, int numOutputImages) | |
| ~Module () override | |
| InputConnectorField * | getInputImageField (MLint i) const |
Returns the field representing input image i. i must be a valid index. | |
| OutputConnectorField * | getOutputImageField (MLint i=0) const |
Returns the field representing output image i. i must be a valid index. | |
| MLint | getNumInputImages () const |
| Returns the number of input images of this module. | |
| MLint | getNumOutputImages () const |
| Returns the number of output images of this module. | |
| PagedImage * | getOutputImage (MLint outputIndex=0) const |
Returns the output image outputIndex. The index needs to be in the range [0, getNumOutputImages()-1]. | |
| InputConnectorField * | addInputImage (const char *name=nullptr) |
| OutputConnectorField * | addOutputImage (const char *name=nullptr) |
| PagedImage * | getInputImage (MLint inputIndex, bool getReal=false) const |
| PagedImage * | getUpdatedInputImage (MLint inputIndex, bool getReal=false) const |
| MLErrorCode | processAllPages (int outputIndex=-1, SubImageBox region=SubImageBox(), MLRequestProgressCB *progressCallback=nullptr, void *progressCallbackUserData=nullptr) |
| MLErrorCode | processAllPages (ProcessAllPagesHandler &handler, SubImageBox region=SubImageBox(), MLRequestProgressCB *progressCallback=nullptr, void *progressCallbackUserData=nullptr) |
| MLErrorCode | processMissingPages (int outputIndex=0, SubImageBox region=SubImageBox(), MLRequestProgressCB *progressCallback=nullptr, void *progressCallbackUserData=nullptr) |
| void | clearOutputImage (MLint i=0) |
Clears cached output image pages of output image i. | |
| MLint | getOutputImageInplace (MLint outputIndex=0) const |
| MLint | getBypass (MLint outputIndex=0) const |
| THREAD_SUPPORT | getThreadSupport () const |
| bool | areRecursiveHandleNotificationsPermitted () const |
| MLint | getHandleNotificationEntryCounter () const |
| PERMITTED_TYPES | getVoxelDataTypeSupport () const |
| bool | isSupportedVoxelDataType (MLDataType dt) const |
| virtual INPUT_HANDLE | handleInput (int, INPUT_STATE) const |
| INPUT_STATE | getInputState (MLint index) |
| INPUT_STATE | getUpdatedInputState (MLint index) |
| bool | isInputImageField (Field *field) const |
| void | touchOutputImageFields () const |
| Touches all output image fields to indicate that the images have changed. | |
| virtual void | beginSaveFields () |
| virtual void | endSaveFields () |
| Public Member Functions inherited from ml::FieldContainer | |
| FieldContainer () | |
| Constructor. | |
| ~FieldContainer () override | |
| Destructor: Deletes all added fields. | |
| std::string | whoAmI (bool withInstanceName=true) const |
| Field * | addField (const char *name, const char *type, const char *value) |
| Field * | addField (Field *field) |
Adds a field, the ownership of the field is passed to the FieldContainer. | |
| BoolField * | addBool (const char *name) |
Creates a BoolField with name and adds it to the container. Default value is false. | |
| BoolField * | addBool (const char *name, bool value) |
Creates a BoolField with name and adds it to the container. | |
| IntField * | addInt (const char *name) |
Creates an IntField with name and adds it to the container. Default value is 0. | |
| IntField * | addInt (const char *name, MLint value) |
Creates an IntField with name and adds it to the container. | |
| EnumField * | addEnum (const char *name, const char *const *enumerationItemNames, MLint numEnumerationItems) |
| EnumField * | addEnum (const char *name, const std::vector< std::string > &enumerationItemNames) |
| template<typename EnumType> | |
| TypedEnumField< EnumType > * | addEnum (const char *name, const EnumValues< EnumType > &values, EnumType initialValue) |
| FloatField * | addFloat (const char *name) |
Creates a FloatField with name and adds it to the container. Default value is 0.f. | |
| FloatField * | addFloat (const char *name, float value) |
Creates a FloatField with name and adds it to the container. | |
| ProgressField * | addProgress (const char *name) |
Creates a float ProgressField with name and adds it to the container. Default value is 0.f. | |
| ProgressField * | addProgress (const char *name, float value) |
Creates a float ProgressField with name and adds it to the container. | |
| DoubleField * | addDouble (const char *name) |
Creates a DoubleField with name and adds it to the container. Default value is 0. | |
| DoubleField * | addDouble (const char *name, double value) |
Creates a DoubleField with name and adds it to the container. | |
| StringField * | addString (const char *name) |
Creates a StringField with name and adds it to the container. Default value is empty string. | |
| StringField * | addString (const char *name, const std::string &value) |
Creates a StringField with name and adds it to the container. | |
| NotifyField * | addNotify (const char *name) |
Creates a NotifyField field with name and adds it to the container. | |
| TriggerField * | addTrigger (const char *name) |
| BaseField * | addBase (const char *name) |
Creates a Base field with name and adds it to the container. Default value is NULL. | |
| BaseField * | addBase (const char *name, Base *value) |
Creates a Base field with name and adds it to the container. | |
| BaseField * | addBase (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> | |
| BaseField * | addBaseWithAllowedType (const char *name, T *value=nullptr) |
| As above, but also sets the allowed type of the field. | |
| template<typename T> | |
| BaseField * | addBaseWithAllowedType (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. | |
| SoNodeField * | addSoNode (const char *name) |
Creates a SoNodeField with name and adds it to the container. Default value is NULL. | |
| SoNodeField * | addSoNode (const char *name, SoNode *value) |
Creates a SoNodeField with name and adds it to the container. | |
| PointerField * | addPointer (const char *name) |
Creates a PointerField with name and adds it to the container. | |
| Vector2Field * | addVector2 (const char *name) |
Creates a Vector2Field with name and adds it to the container. | |
| Vector2Field * | addVector2 (const char *name, const Vector2 &value) |
Creates a Vector2Field with name and adds it to the container. | |
| Vector2Field * | addVector2 (const char *name, double x, double y) |
Creates a Vector2Field with name and adds it to the container. | |
| Vector3Field * | addVector3 (const char *name) |
Creates a Vector3Field with name and adds it to the container. | |
| Vector3Field * | addVector3 (const char *name, const Vector3 &value) |
Creates a Vector3Field with name and adds it to the container. | |
| Vector3Field * | addVector3 (const char *name, double x, double y, double z) |
Creates a Vector3Field with name and adds it to the container. | |
| Vector4Field * | addVector4 (const char *name) |
Creates a Vector4Field with name and adds it to the container. | |
| Vector4Field * | addVector4 (const char *name, const Vector4 &value) |
Creates a Vector4Field with name and adds it to the container. | |
| Vector4Field * | addVector4 (const char *name, double x, double y, double z, double w) |
Creates a Vector4Field with name and adds it to the container. | |
| Vector5Field * | addVector5 (const char *name) |
Creates a Vector5Field with name and adds it to the container. | |
| Vector5Field * | addVector5 (const char *name, const Vector5 &value) |
Creates a Vector5Field with name and adds it to the container. | |
| Vector6Field * | addVector6 (const char *name) |
Creates a Vector6Field with name and adds it to the container. | |
| Vector6Field * | addVector6 (const char *name, const Vector6 &value) |
Creates a Vector6Field with name and adds it to the container. | |
| Vector10Field * | addVector10 (const char *name) |
Creates a Vector10Field with name and adds it to the container. | |
| Vector10Field * | addVector10 (const char *name, const Vector10 &value) |
Creates a Vector10Field with name and adds it to the container. | |
| ImageVectorField * | addImageVector (const char *name) |
Creates a ImageVectorField with name and adds it to the container. | |
| ImageVectorField * | addImageVector (const char *name, const ImageVector &value) |
Creates a ImageVectorField with name and adds it to the container. | |
| ImageVectorField * | addImageVector (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. | |
| SubImageBoxField * | addSubImageBox (const char *name) |
Creates a SubImageBoxField with name and adds it to the container. | |
| SubImageBoxField * | addSubImageBox (const char *name, const SubImageBox &value) |
Creates a SubImageBoxField with name and adds it to the container. | |
| SubImageBoxdField * | addSubImageBoxd (const char *name) |
Creates a SubImageBoxd field with name and adds it to the container. | |
| SubImageBoxdField * | addSubImageBoxd (const char *name, const SubImageBoxd &value) |
Creates a SubImageBoxd field with name and adds it to the container. | |
| ColorField * | addColor (const char *name) |
Creates a ColorField with name and adds it to the container. | |
| ColorField * | addColor (const char *name, float r, float g, float b) |
Creates a ColorField with name and adds it to the container. | |
| ColorField * | addColor (const char *name, const Vector3 &value) |
Creates a ColorField with name and adds it to the container. | |
| PlaneField * | addPlane (const char *name) |
Creates a PlaneField with name and adds it to the container. | |
| PlaneField * | addPlane (const char *name, double f0, double f1, double f2, double f3) |
Creates a PlaneField with name and adds it to the container. | |
| PlaneField * | addPlane (const char *name, const Plane &value) |
Creates a PlaneField with name and adds it to the container. | |
| RotationField * | addRotation (const char *name) |
Creates a RotationField with name and adds it to the container. | |
| RotationField * | addRotation (const char *name, const Rotation &value) |
Creates a RotationField with name and adds it to the container. | |
| Matrix2Field * | addMatrix2 (const char *name) |
Creates a Matrix2Field with name and adds it to the container. | |
| Matrix2Field * | addMatrix2 (const char *name, const Matrix2 &value) |
Creates a Matrix2Field with name and adds it to the container. | |
| Matrix3Field * | addMatrix3 (const char *name) |
Creates a Matrix3Field with name and adds it to the container. | |
| Matrix3Field * | addMatrix3 (const char *name, const Matrix3 &value) |
Creates a Matrix3Field with name and adds it to the container. | |
| Matrix4Field * | addMatrix4 (const char *name) |
Creates a Matrix4Field with name and adds it to the container. | |
| Matrix4Field * | addMatrix4 (const char *name, const Matrix4 &value) |
Creates a Matrix4Field with name and adds it to the container. | |
| Matrix5Field * | addMatrix5 (const char *name) |
Creates a Matrix5Field with name and adds it to the container. | |
| Matrix5Field * | addMatrix5 (const char *name, const Matrix5 &value) |
Creates a Matrix5Field with name and adds it to the container. | |
| Matrix6Field * | addMatrix6 (const char *name) |
Creates a Matrix6Field with name and adds it to the container. | |
| Matrix6Field * | addMatrix6 (const char *name, const Matrix6 &value) |
Creates a Matrix6Field with name and adds it to the container. | |
| MatrixField * | addMatrix (const char *name) |
Creates a MatrixField with name and adds it to the container. | |
| MatrixField * | addMatrix (const char *name, const Matrix4 &value) |
Creates a MatrixField with name and adds it to the container. | |
| MLDataTypeField * | addMLDataType (const char *name) |
Creates a MTDataTypeField with name and adds it to the container. | |
| MLDataTypeField * | addMLDataType (const char *name, MLDataType value) |
Creates a MTDataTypeField with name and adds it to the container. | |
| UniversalTypeField * | addUniversalType (const char *name) |
Creates an UniversalTypeField field with name and adds it to the container. | |
| IntListField * | addIntList (const char *name) |
Creates an IntListField field with name and empty list value and adds it to the container. | |
| IntListField * | addIntList (const char *name, const std::vector< MLint > &value) |
Creates an IntListField field with name and given list value and adds it to the container. | |
| DoubleListField * | addDoubleList (const char *name) |
Creates an DoubleListField field with name and empty list value and adds it to the container. | |
| DoubleListField * | addDoubleList (const char *name, const std::vector< double > &value) |
Creates an DoubleListField field with name and given list value and adds it to the container. | |
| Vector2ListField * | addVector2List (const char *name) |
Creates an Vector2ListField field with name and empty list value and adds it to the container. | |
| Vector2ListField * | addVector2List (const char *name, const std::vector< Vector2 > &value) |
Creates an Vector2ListField field with name and given list value and adds it to the container. | |
| Vector3ListField * | addVector3List (const char *name) |
Creates an Vector3ListField field with name and empty list value and adds it to the container. | |
| Vector3ListField * | addVector3List (const char *name, const std::vector< Vector3 > &value) |
Creates an Vector3ListField field with name and given list value and adds it to the container. | |
| Vector4ListField * | addVector4List (const char *name) |
Creates an Vector4ListField field with name and empty list value and adds it to the container. | |
| Vector4ListField * | addVector4List (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. | |
| Field * | getField (const std::string &name) const |
| Field * | getField (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) |
| std::string | getFieldStringValue (const std::string &name) const |
| virtual void | activateAttachments () |
| virtual void | deactivateAttachments () |
| Public Member Functions inherited from ml::Base | |
| Base () | |
| Constructor. | |
| virtual | ~Base () |
| Destructor. | |
| virtual Base * | deepCopy () const |
| bool | isOfAllowedType (const std::vector< const RuntimeType * > &types) const |
| virtual bool | isRefCountedBase () const |
| Returns whether the instance is derived from RefCountedBase. | |
| virtual std::string | detailString () const |
| virtual bool | implementsPersistence (PersistenceInterface) const |
| virtual std::string | persistentState () const |
| Returns a string describing the object's internal state. | |
| virtual void | setPersistentState (const std::string &state) |
| 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 |
| virtual void | readFrom (AbstractPersistenceInputStream *, int) |
Protected Member Functions | |
| KernelBaseModule (int inputNum=1, int outputNum=1) | |
| virtual void | _setCorrectCorrelationMinMax (bool imageIntervalUsed=false, MLdouble intervalMin=0, MLdouble intervalMax=0, MLint inIdx=0, MLint outIdx=0) |
| virtual ImageVector | _getCalculatedReferenceInputExt () const |
| 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 |
| number of voxels in row to be processed. | |
Methods overloaded from \c Module. | |
| void | calculateOutputImageProperties (int outputIndex, PagedImage *outputImage) override |
| SubImageBox | calculateInputSubImageBox (int inIndex, const SubImageBox &outSubImgBox, int outIndex) override |
| virtual void | calcInSubImagePreparation (int outIndex, SubImage *inSubImgs) |
| virtual void | calcOutSubImagePostProcessing (SubImage *outSubImg, int outIndex, SubImage *inSubImgs) |
| virtual SubImageBox | calculateAreaToBeCalculated (const SubImageBox &areaToBeCalculated, const SubImageBox &outSubImageBox) |
| virtual ImageVector | calculateOutInCoordShift (const ImageVector shift, const SubImageBox &outSubImageBox) |
| virtual SubImageBox | calculateValidDestArea (const SubImageBox &validDestArea, const SubImageBox &outSubImageBox) |
| virtual void | _connectToAllOutputs (Field *field) |
| Protected Member Functions inherited from ml::Module | |
| void | handleNotificationInternal (Field *field, FieldSensor::Strength strength) override |
| virtual void | provideCustomPage (int, const SubImageBox &, MLMemoryBlockHandle &) |
| void | handleNotificationOff () |
| void | handleNotificationOn () |
| bool | isHandleNotificationOn () |
Returns true if handleNotification calls are permitted; otherwise, it returns false. | |
| void | setOutputImageInplace (MLint outputIndex=0, MLint inputIndex=0) |
| void | unsetOutputImageInplace (MLint outputIndex=0) |
| void | setBypass (MLint outputIndex=0, MLint inputIndex=0) |
| void | setClampPagesToImageExtent (bool flag=true) |
| void | setThreadSupport (THREAD_SUPPORT supportMode) |
| void | permitRecursiveHandleNotifications (bool enable) |
| void | setVoxelDataTypeSupport (PERMITTED_TYPES permTypes) |
| virtual void | handleNotification (Field *) |
Friends | |
| class | KernelBaseOpCalculateOutputImageHandler |
Standard control fields for all kernel modules. | |
| enum | InputImageRefExtent { Overlap = 0 , Input0_ExtWithoutFill , Input0_ExtWithFill , MaxExtentsWithoutFill , MaxExtentsWithFill , NumImageRefExtents } |
| EnumField * | getBorderHandlingFld () const |
| DoubleField * | getFillValueFld () const |
| EnumField & | getReferenceExtentModeFld () const |
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) |
| static MLErrorCode | getTile (PagedImage *image, SubImage &subimg, const ScaleShiftData &scaleShiftData=ScaleShiftData(), MLRequestProgressCB *progressCallback=nullptr, void *progressCallbackUserData=nullptr) |
| static MLErrorCode | updateImageProperties (PagedImage *image) |
| 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 Field * | getPressedNotifyField () |
| 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)) |
| static std::string | getVoxelValueAsString (PagedImage *image, const ImageVector &position, MLErrorCode *errorCode=nullptr, const std::string &errorResult="") |
| static size_t | getNumModules () |
| Returns the number of instantiated modules. | |
| static Module * | getModule (size_t index) |
Returns a pointer to instantiated module index. | |
| static MLint | findModuleIndex (Module &module) |
Returns the index of Module module. If not found, -1 is returned. | |
| static void | destroyModule () |
| Protected Types inherited from ml::Module | |
| enum | THREAD_SUPPORT { NO_THREAD_SUPPORT = PagedImage::NO_THREAD_SUPPORT , MULTITHREADED = PagedImage::MULTITHREADED , IO_THREAD = PagedImage::IO_THREAD } |
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).
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:
The following code implements a standard correlation of the input image with an arbitrary kernel in the .cpp file:
You can also use the KernelTools class to do the same stuff:
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.
Enumerator specifying the calculation mode for the extent of the reference extent of the input image.
Definition at line 270 of file mlKernelBaseModule.h.
|
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.
Referenced by _calcKernelPage().
|
protectedpure virtual |
number of voxels in row to be processed.
This method is not intended to be overloaded directly, because it is subject to change. It will be overloaded by CALC_ROW macros.
| outSubImg | output subimage to be written |
| outIndex | index of output subimage |
| inSubImgs | array of input subimages |
| numInSubImgs | number of input subimages |
| indexTab | offset table to input cursor |
| indexTabSize | number of offsets in indexTab |
| srcVoxelOffset | offset to input cursor to corresponding input voxel for output voxel |
| loopIdx | current pass of separable filtering |
| iteration | current pass of iterative filtering |
| ov1 | first corner voxel of output area to be written. |
| ov2 | second corner voxel of output area to be written. |
| pOf | coordinate shift between input kernel origin and written output voxel |
References ml::Module::calculateOutputSubImage(), KernelBaseModule(), and ml::Module::PagedImage.
|
protectedvirtual |
Helper function to connect a field field to all output fields. NULL field pointers are legal and will be ignored.
|
protectedvirtual |
Return the reference extent of input image dependent on the current value of _referenceExtentFld.
|
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()!
|
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.
|
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.
|
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.
|
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.
|
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.
|
overrideprotectedvirtual |
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.
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.
References ml::Module::PagedImage.
|
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.
|
inline |
The field to handle the mode how kernel operations work on image borders. See BorderHandling documentation in mlKernelTools.h. Default value of the field is NO_PAD.
Definition at line 256 of file mlKernelBaseModule.h.
|
inline |
Method to access the kernel as constant object. See also getKernel().
Definition at line 247 of file mlKernelBaseModule.h.
|
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.
|
inline |
Definition at line 244 of file mlKernelBaseModule.h.
|
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.
|
friend |
Definition at line 229 of file mlKernelBaseModule.h.
References KernelBaseOpCalculateOutputImageHandler.
Referenced by KernelBaseOpCalculateOutputImageHandler.