IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
UnionLinearOpening2dImgLvl1.h
1 // UnionLinearOpening2dImgLvl1.h:
3 // ------------------------------
4 //
14 
15 #ifndef __IPSDKIPLBASICMORPHOLOGY_UNIONLINEAROPENING2DIMGLVL1_H__
16 #define __IPSDKIPLBASICMORPHOLOGY_UNIONLINEAROPENING2DIMGLVL1_H__
17 
23 
24 // Attributes headers
25 #include <IPSDKIPL/IPSDKIPLAttributes/Attribute/Enumerate/InOptBorderExtensionPolicy.h>
26 #include <IPSDKIPL/IPSDKIPLAttributes/Attribute/Image/Input/InImg.h>
27 #include <IPSDKIPL/IPSDKIPLAttributes/Attribute/Image/Output/OutImg.h>
28 #include <IPSDKIPL/IPSDKIPLAttributes/Attribute/Image/Output/Working/Optional/OutOptWk1Img.h>
29 #include <IPSDKIPL/IPSDKIPLAttributes/Attribute/Image/Output/Working/Optional/OutOptWk2Img.h>
30 #include <IPSDKIPL/IPSDKIPLAttributes/Attribute/Image/Output/Working/OutWk1Img.h>
31 #include <IPSDKIPL/IPSDKIPLAttributes/Attribute/Image/Output/Working/OutWk2Img.h>
32 #include <IPSDKIPL/IPSDKIPLAttributes/Attribute/Value/InOptNbAngles2d.h>
33 #include <IPSDKIPL/IPSDKIPLAttributes/Attribute/Value/InRadius.h>
35 
36 namespace ipsdk {
37 namespace imaproc {
38 namespace morpho {
39 
42 
43 // declare processor class
44 IPSDK_DECLARE_LVL1_PROCESSOR(REP_ASYNC1, IPSDKIPLBasicMorphology, UnionLinearOpening2dImg,
45  (ipsdk::imaproc::matchSizeAndType(_pInImg, _pOutImg)) &&
46  (ipsdk::imaproc::customImageProperty(_pOutWk1Img,
47  matchBorderExtension1(_pInImg,
48  _pInRadius,
50  _pInOptBorderExtensionPolicy))) &&
51  (ipsdk::imaproc::customImageProperty(_pOutWk2Img,
52  matchBorderExtension1(_pInImg,
53  _pInRadius,
55  _pInOptBorderExtensionPolicy))) &&
56  (ipsdk::processor::ifIsSet(_pOutOptWk1Img,
57  ipsdk::imaproc::customImageProperty(_pOutOptWk1Img, matchBorderExtension1(_pInImg, _pInRadius, eSEXYSubType::eSEXY_Linear, _pInOptBorderExtensionPolicy)))) &&
58  (ipsdk::processor::ifIsSet(_pOutOptWk2Img,
59  ipsdk::imaproc::customImageProperty(_pOutOptWk2Img, matchBorderExtension1(_pInImg, _pInRadius, eSEXYSubType::eSEXY_Linear, _pInOptBorderExtensionPolicy)))),
60  (((ipsdk)(imaproc)(attr))(InImg))
61  (((ipsdk)(imaproc)(attr))(InRadius))
62  (((ipsdk)(imaproc)(attr))(InOptNbAngles2d))
63  (((ipsdk)(imaproc)(attr))(InOptBorderExtensionPolicy))
64  (((ipsdk)(imaproc)(attr))(OutOptWk1Img))
65  (((ipsdk)(imaproc)(attr))(OutOptWk2Img))
66  (((ipsdk)(imaproc)(attr))(OutWk1Img)(customOutput)(outputUnionLinear2d(_pInImg, _pInOptBorderExtensionPolicy, _pInRadius)))
67  (((ipsdk)(imaproc)(attr))(OutWk2Img)(customOutput)(outputUnionLinear2d(_pInImg, _pInOptBorderExtensionPolicy, _pInRadius)))
68  (((ipsdk)(imaproc)(attr))(OutImg)(ipsdk::imaproc::duplicateInOut)(_pInImg)))
69 
70 // methods
71 public:
72 
73 protected:
77 
78  processor::RetrievalResult provideProcessor(const boost::shared_ptr<core::BaseAction>& pProcessor,
79  const core::BasePriority& priority,
80  core::ActionProviderPtr& pProvider);
81 
82  processor::RetrievalResult eraseOutput(const core::BasePriority& priority, core::ActionProviderPtr& pProvider, const image::ImagePtr& pImg, const ipReal64 eraseValue);
83  processor::RetrievalResult erode(const core::BasePriority& priority, core::ActionProviderPtr& pProvider, const ipReal64 orientationIdx);
84  processor::RetrievalResult dilate(const core::BasePriority& priority, core::ActionProviderPtr& pProvider, const ipReal64 orientationIdx);
85  processor::RetrievalResult unionMax(const core::BasePriority& priority, core::ActionProviderPtr& pProvider);
86  processor::RetrievalResult putROI(const core::BasePriority& priority, core::ActionProviderPtr& pProvider);
87  processor::RetrievalResult getROI(const core::BasePriority& priority, core::ActionProviderPtr& pProvider);
88 
89 
90 // attributes
91 protected:
93  std::vector<ipReal64> _vOrientations;
94 
96  ipsdk::image::ImageConstPtr _pUsedInImg;
97 
99  ipsdk::image::ImagePtr _pUsedOutImg;
100 
102  ipsdk::image::ImagePtr _pUsedErosionImg;
103 
105  ipsdk::image::ImagePtr _pUsedDilationImg;
106 };
107 
110 
111 } // end of namespace morpho
112 } // end of namespace imaproc
113 } // end of namespace ipsdk
114 
115 #endif // __IPSDKIPLBASICMORPHOLOGY_UNIONLINEAROPENING2DIMGLVL1_H__
ProcessingResult< eRetrievalResultType > RetrievalResult
#define IPSDK_DECLARE_LVL1_PROCESSOR(ProcType, libraryName, algoName, RuleString, attributeSeq)
utility functions for union linear opening and closing calculations output attribute initialization m...
Utility functions for image attribute border extension rules management.
eSEXY_Linear
boost::shared_ptr< BaseImage > ImagePtr
processor::OutputInitializerPtr duplicateInOut(const boost::weak_ptr< OutputAttributeType > &pOutputAttribute, const boost::weak_ptr< InputAttributeType > &pInputAttribute, const eImageInitializerStoragePolicy &storagePolicy=eImageInitializerStoragePolicy::eIISP_Inherit)
double ipReal64
ipsdk::core::ExecResult preProcess()
method called before processing
boost::enable_if_c< AttributeType::g_bOptional, RulePtr >::type ifIsSet(const boost::shared_ptr< AttributeType > &pAttribute, const RulePtr &pRuleTrue)
IPSDKIPLBASICMORPHOLOGY_API CustomCheckedImagePropertyPtr matchBorderExtension1(const ImageAttributeConstPtr &pInImg, const StructuringElementXYAttributeConstPtr &pSEXY, const boost::shared_ptr< const attr::InOptBorderExtensionPolicy > pInBorderExtensionPolicy)
function allowing to define rule applied on working 2d image for morphological algorithms with option...
Definition of import/export macro for library.
processor::OutputInitializerPtr customOutput(const boost::weak_ptr< OutputAttributeType > &pOutputAttribute, const CustomImageInfoPtr &pCustomImageInfo)
boost::shared_ptr< const BaseImage > ImageConstPtr
IPSDKIPLBASICMORPHOLOGY_API CustomImageInfoPtr outputUnionLinear2d(const ImageAttributeConstPtr &pInputAttribute, const boost::shared_ptr< const attr::InOptBorderExtensionPolicy > &pInOptBorderExtensionPolicy, const boost::shared_ptr< const attr::InRadius > &pInRadius)
function allowing to create an union linear closing or opening image initializer
boost::shared_ptr< BaseActionProvider > ActionProviderPtr