eCognition 二次开发高级培训
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
代码的编写
//默认构造体 MergeObjects::MergeObjects() : bFsnUp(false), pClssFltr(NULL){ } //析构函数
MergeObjects::~MergeObjects() { } //删除 void MergeObjects::Delete() { delete this; } EPIComponentInfo* MergeObjects::GetInfo() const { return GetInfoStatic(); }
代码的编写
// MergeObjects.h //头文件
class MergeObjects : public EPIProcAlgr { public: // 结构体 MergeObjects(); // 析构函数 virtual ~MergeObjects(); // 删除函数 void Delete(); //! EPIComponentInfo* GetInfo() const; static EPIComponentInfo* GetInfoStatic();
代码的编写
//访问 public: bool SetParam(const char* id, const DValue&
value);
bool GetParam(const char* id, DValue* value) const; bool IsParamHidden(const char* id, DMIProcessDomain* domain) const ; DString GetAutoName(DMIProcess* procbase) const; bool GetFsnUp() const; void SetFsnUp(bool val);
EPIComponentInfo* MergeObjects::GetInfoStatic() return &info;
static struct Param1: public EPIParamInfo { const char* GetId() { return "bFsnUp"; } const char* GetName() { return "Fusion super objects"; } const char* GetDescription() { return "Fusion super objects"; } DValue::EDataType GetValueType() { return DValue::T_BOOL; } EPICfgControl* GetControlConfig() { return &glblCfgCheckBox; } } param1;
代码的编写
// MergeObjects.cpp //头文件
#include "SampleAlgr.h" #include "MergeObjects.h"
#include "DMIProcessContext.h" #include "DMIClass.h" #include "DMIProcessDomain.h" #include "DMIProcess.h" #include "DMIEnableModify.h" #include "resource.h"
代码的编写
//方法 private: void ExecFsn(DMIProcessContext *cntxt, DMIImageObjHndl& hCrntObj, const DMIImageObjHndl& hNghbObj, const DMINeighbConnHndl& hNghb); 、 void CollectNeighbours( const DMIImageObjHndl& hCrntObj, DVectorSafe<DMINeighbConnHndl>& vNghbs); private: bool bFsnUp; private: DMIClassFilter* pClssFltr;
代码的编写
// SampleAlgr.h
#include "windows.h" #include "EnginePluginInterface.h" class EPI_PLUGIN SampleAlgrPlugin : public EPIPlugin { Public: virtual EPIComponentInfo** GetComponentList() const; const char* GetPlugInLicenceId() const { return ""; } const char* GetPlugInLicenceVer() const {return ""; } const char* GetName() const { return "Definiens Sample SampleEPIAlgrSet"; } int GetVersionMajor(){return 1;} int GetVersionMinor(){return 1;} };
代码的编写
// 接口的实现 EPIComponentInfo** SampleAlgrPlugin::GetComponentList() const { static EPIComponentInfo* arrCompVector[] = { MergeObjects::GetInfoStatic(), NULL }; return arrCompVector; }
代码的编写
// 流程接口 Public: bool AlgrInit(DMIProcessContext* cntxt); bool AlgrExecBgn(DMIProcessContext* cntxt); void AlgrExec(DMIProcessContext* cntxt); bool AlgrExecEnd(DMIProcessContext* cntxt); void AlgrDone(DMIProcessContext* cntxt); bool SupportsDomain(int domain_type) const; void FromXMLNodeOld(DMIXMLNode* node); bool AcceptChildProcess() const;
编写一个简单的Hello World
Hello World插件的开发
EPIComponent::Delete EPIComponent::GetInfo EPIParamContainer::GetParam EPIParamContainer::SetParam EPIPropDscr::GetShortName EPIPropDscr::GetUnitInfo EPIPropDscr::GetMinRange EPIPropDscr::GetMaxRange EPIPropDscr::Calc
开发环境需求 API库文件 .\Engine\Lib\DataIO.lib .\Engine\Lib\Engine.lib .\Engine\Lib\AddinMngr.lib
编写一个简单的Hello World
建立一个Engine Plugin-in
通过EPICComponentInfo *list插件能运行多种功能, EPIComponentInfo** GetComponentList() const EPIComponentInfo类的执行 必须覆盖纯虚函数: EPIComponent* EPIComponentInfo::CreateComponent (DMIProject* project);
代码的编写
// MergeObjects.h //头文件
#include "EnginePluginInterface.h" #include "DMIImageObject.h" #include "DMINeighbConn.h" #include "DMIClassFilter.h" #include "DBase/DVectorSafe.h" #include "DBase/DString.h"
代码的编写
// SampleAlgr.cpp 实现基本的插件管理功能
#include "SampleAlgr.h" #include "MergeObjects.h“ #ifndef EPI_PLUGIN_EXPORTS #error "please define EPI_PLUGIN_EXPORTS, otherwise no function will be exported." #endif EPI_PLUGIN int EPIGetVersionMinor() { return 1; } EPI_PLUGIN int EPIGetVersionMajor() { return 0; } EPI_PLUGIN EPIPlugin* EPIGetPlugin() { static SampleAlgrPlugin smplPropDscrPlugin; return &smplPropDscrPlugin; }
编写一个简单的Hello World
执行一个算法组件——处理组件的运行过程
写一个运行函数抽象类EPIPropDscr。 推导 EPIComponentInfo算法时,需要运行纯虚函数 EPIComponentInfo::CreateComponent(DMIProject*) 从功能上来讲,运行类 EPIPropDscr的一个实例,返回 EPIPropDscr指针。
内容
1. Developer算法的封装
环境的搭建
代码的编写
dll的生成 存放指定目录
效果图
环境的搭建
环境的搭建
代码编写
插件管理文件的编写
算法文件的编写
代码的编写---流程分析
// SampleAlgr.h 对第一个头文件的编写
//引入window的基本接口文件 //引入插件接口文件 //定义一个EPI_PLUGIN类型的对象SampleAlgrPlugin并且继承于最 高级类EPIPlugin //为该类中定义抽象类---组件列表接口GetComponentList //重载插件许可id号函数GetPlugInLicenceId //重载插件版本号函数GetPlugInLicenceVer //重载插件名称GetName //定义插件的最大版本号 //定义插件最小版本号
eCognition 8
eCognition 二次开发高级培训
研发中心 尹超 北京全景天地科技有限公司
Pຫໍສະໝຸດ Baidunorama Space Technology Co., Ltd.
发掘影像最大潜能
Exploring The Soul Of Imagery
目录
1. SDK中三个API的详细介绍
2. Developer算法的封装
API接口的介绍 DataIO API接口 DataIO API可以用来开发驱动和插件, 应用于数据连接和交互。通过建立一个 连接器连接文件系统、二进制图像格式、 数据库等。
API接口的介绍 Automation API接口
应用程序
嵌入
Analysis AMIEngine
Local Automation
3. 嵌入式软件的实现
环境要求 环境要求 要想进行eCognition软件的二次开发,那 么需要具备哪些环境呢?
1. Developer的SDK以及相关动态链接库 2. eCognition Server的服务 3. VS2003 7.1的开发环境
API接口的介绍 Engine API接口 Engine API可以通过插件来扩大Analysis Engine的容量。一个Engine插件是由一 个或者多个插件组件组成的。一个插件 组件可以实现一个算法或者功能。
AMIEngine
Remote Automation
SOAP
图示
开发环境需求 API头文件 .\Engine\Include\*.h .\Engine\Include\AddinMngr\*.h .\Engine\Include\DataIO\*.h .\Engine\Include\Dbase\*.h