HALCON12里的example,classify_pills_auto_select_features.hdev.

执行流程:

1.选取相关特征(本例选取color和region组的所有特征)
(本例用get_feature_names( : : GroupNames : Names),根据特征组名得到一系列特征
2.创建训练数据,添加样本的相关特征至训练数据结构中。
 (本例用calculate_features(RegionImage : : FeatureNames : Features)),根据特征名计算特征
3.自动选择最适合特征
(本例用select_feature_set_svm( : : ClassTrainDataHandleSelectionMethodGenParamNamesGenParamValues : SVMHandle,SelectedFeatureIndicesScore)
4.用分类器对测试图片进行分类

* This example shows how to use the calculate_feature_set
* procedure library together with the automatic feature selection
* to classify different pill types using a SVM classifier.
*  该示例演示如何从calculate_feature得到的特征,进行自动最佳特征选择,
*  并使用SVM分类器对各类型的pill进行分类。
* First, the pills are segmented in some training images.
* Then, a list of color and region features are calculated
* for each pill and stored in a classifier training data structure.
* After that, the best features are automatically selected
* with the operator select_feature_set_svm, and finally
* the resulting classifier is applied on a number of test
* images.
* 首先,对包含有pills的训练图片进行分割。
* 计算color和region组相关的特征。
* 每1个pill的相关特征添加至分类器训练数据结构里。
* 所有的训练数据添加完毕,用select_feature_set_svm
* 也可以用其他的分类器类型选择比如(select_feature_set_knn(mlp,gmm))
* 自动选择最佳特征,最后应用分类器对测试图像分类。
* Init visualization
dev_close_window ()
dev_update_off ()
read_image (Image, 'color/pills_class_01')
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_set_draw ('margin')
dev_set_line_width (2)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_set_colored (12)
*
PillNames := ['big_round_red','round_green','small_round_red','yellow_trans','brown','brown_green']
PillNames := [PillNames,'brown_grain','purple','turquese','pink']
PillColors := ['#D08080','#ADC691','#FFB0A1','#D5C398','#B59C87','#BCB3B8','#B7ACA1','#908E99','#97B9BC','#C0ABA9']
*
* Check, which features and feature groups are available
query_feature_group_names (AvailableGroupNames)
query_feature_names_by_group (AvailableGroupNames, AvailableFeatureNames, AvailableCorrespondingGroups)
*
* Generate list of color and region features using the
* calculate_feature_set library procedures.
* 获取相关特征组的对应的特征名称(1个特征组包含许多特征),比如region组,有area,width,height,phi,ra,rb等。
* 获取相关特征的特征向量长度,比如rgb_mean特征,特征向量长度为3(每个通道对应1个值),area特征向量长度为1。
FeatureGroups := ['region','color']
get_feature_names (FeatureGroups, FeatureNames)
get_feature_lengths (FeatureNames, FeatureLengths)
*
* Create and prepare classifier training data structure
* 创建和准备分类训练数据结构
create_class_train_data (sum(FeatureLengths), ClassTrainDataHandle)
set_feature_lengths_class_train_data (ClassTrainDataHandle, FeatureLengths, FeatureNames)
*
* Training loop  循环训练
*
for I := 1 to 10 by 1
    * Segment pills in training image
    read_image (Image, 'color/pills_class_' + I$'.2d')
    segment_pills (Image, Pills)
    * Display segmentation result
    dev_display (Image)
    dev_set_color ('white')
    dev_display (Pills)
    disp_message (WindowHandle, 'Collecting ' + PillNames[I - 1] + ' samples', 'window', 12, 12, 'black', 'true')
    *
    * Calculate features for all segmented pills and store
    * them in the training data structure
    count_obj (Pills, Number)
    calculate_features (Pills, Image, FeatureNames, Features)
    add_sample_class_train_data (ClassTrainDataHandle, 'feature_column', Features, I - 1)
    * 以上注意第二参数'feature_column'的选择,此例中由于Number的数大于1,以特征列做为顺序。
    * Visualize processed pills
    dev_set_color (PillColors[I - 1])
    dev_display (Pills)
    GroupList := sum('\'' + FeatureGroups + '\', ')
    tuple_str_first_n (GroupList, strlen(GroupList) - 3, GroupList)
    Message := 'Calculate ' + |FeatureNames| + ' features from following feature groups:'
    disp_message (WindowHandle, [Message,GroupList], 'window', 40, 12, 'black', 'true')
    disp_continue_message (WindowHandle, 'black', 'true')
    stop ()
endfor
*
* Automatically select suitable features from the training data
* 自动选择训练数据的最合适的特征
disp_message (WindowHandle, 'Selecting optimal features...', 'window', 90, 12, 'black', 'true')
select_feature_set_svm (ClassTrainDataHandle, 'greedy', [], [], SVMHandle, SelectedFeatures, Score)
disp_message (WindowHandle, ['Selected:',SelectedFeatures], 'window', 120, 12, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
* Free memory, because the training data is no longer used
clear_class_train_data (ClassTrainDataHandle)
*
* Classify pills in test images
* using the automatically trained classifier with the
* automatically selected features
* 用分类器对测试图片进行测试,使用训练分类器和自动选择的最佳特征。
dev_set_line_width (4)
dev_set_colored (12)
for I := 1 to 3 by 1
    * Segment pills in test image
    read_image (Image, 'color/pills_test_' + I$'.2d')
    dev_display (Image)
    segment_pills (Image, Pills)
    * For all pills, calculate selected features
    * using the calculate_features procedure from the
    * calculate_feature_set library and classify them.
    PillsIDs := []
    count_obj (Pills, NPills)
    for P := 1 to NPills by 1
        select_obj (Pills, PillSelected, P)
        calculate_features (PillSelected, Image, SelectedFeatures, Features)
        classify_class_svm (SVMHandle, real(Features), 1, Class)
        * Display results
        PillsIDs := [PillsIDs,Class]
        dev_set_color (PillColors[Class])
        dev_display (PillSelected)
        area_center (PillSelected, Area, Row, Column)
        disp_message (WindowHandle, Class + 1, 'image', Row, Column - 10, 'black', 'true')
    endfor
    disp_message (WindowHandle, 'Classify image ' + I + ' of 3 using following features:', 'window', 12, 12, 'black', 'true')
    disp_message (WindowHandle, SelectedFeatures, 'window', 40, 12, 'black', 'true')
    if (I < 3)
        disp_continue_message (WindowHandle, 'black', 'true')
        stop ()
    endif
endfor
* Clean up memory
* 清除内存
clear_class_svm (SVMHandle)

自动选择最佳特征进行分类-SVM (Halcon)的更多相关文章

  1. SpringCloud系列九:SpringCloudConfig 基础配置(SpringCloudConfig 的基本概念、配置 SpringCloudConfig 服务端、抓取配置文件信息、客户端使用 SpringCloudConfig 进行配置、单仓库目录匹配、应用仓库自动选择、仓库匹配模式)

    1.概念:SpringCloudConfig 基础配置 2.具体内容 通过名词就可以发现,SpringCloudConfig 核心作用一定就在于进行配置文件的管理上.也就是说为了更好的进行所有微服务的 ...

  2. Debian初识(选择最佳镜像发布站点加入source.list文件)

    选择最佳镜像发布站点加入source.list文件:netselect,netselect-apt “该将哪个Debian镜像发布站点加入source.list文件?”.有很多方法来选择镜像发布站点, ...

  3. 如何为应用选择最佳的FPGA(下)

    如何为应用选择最佳的FPGA(下) How to select an FPGA board? FPGA板的选择在很大程度上受FPGA本身的影响,也受整个板的特性和性能的影响.们已经在上面的章节中讨论了 ...

  4. js单击自动选择文本

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  5. [大牛翻译系列]Hadoop(4)MapReduce 连接:选择最佳连接策略

    4.1.4 为你的数据选择最佳连接策略 已介绍的每个连接策略都有不同的优点和缺点.那么,怎么来判断哪个最适合待处理的数据? 图4.11给出了一个决策树.这个决策树是于论文<A Compariso ...

  6. ECshop网点程序优化-后台添加类目自动选择上次父类目并计算Sort Order

    如果在ECshop后台批量添加过大量类目的人都能体会到是多么的不方便(这点还是要说一下ECshop的产品经理,细节上还是要多注意),每次添加都需要在几百个类目里面找到要添加的父类目也是一个麻烦事,比如 ...

  7. Android自定义垂直滚动自动选择日期控件

    ------------------本博客如未明正声明转载,皆为原创,转载请注明出处!------------------ 项目中需要一个日期选择控件,该日期选择控件是垂直滚动,停止滚动时需要校正日期 ...

  8. 【百度地图API】——如何让标注自动呈现在最佳视野内

    原文:[百度地图API]--如何让标注自动呈现在最佳视野内 摘要: “我有一堆标注,不规则的散落在地图的各个地方,我想把它们展示在一个最佳视野中,怎么办呢?”一位API爱好者咨询道. -------- ...

  9. C#自动选择出系统中最合适的IP地址

    写这个是因为很长时间以来,碰到过很多次这个问题,但都没当回事,这次又碰到了这个老问题,无奈百度了一圈儿未果,身边又没有大牛可以请教,就自己先“总结”了一套方法,一来给自己记录,二来如果碰巧能有朋友看到 ...

随机推荐

  1. EditorConfig知识点

    .editorconfig 该文件定义项目的编码规范,编辑器的行为会与.editorconfig 文件中定义的一致,并且其优先级比编辑器自身的设置要高,这在多人合作开发项目时十分有用而且必要. 在哪里 ...

  2. svn知识点

    svn checkout [url] [dir]: 从版本库中检出代码到本地文件夹 svn status :查看当前工作副本的代码变更状态信息 svn diff [file]:比对工作副本与版本库之间 ...

  3. CRM 2011 Plugin 知识的总结加代码解释

    1.??的使用,就是判断值是否为null,为null的话,给赋初值,否则就直接取值. decimal new_amount = 0; if (targetEntity.Contains("字 ...

  4. ComboBox智能搜索功能

    cmbList.AutoCompleteSource = AutoCompleteSource.ListItems; cmbList.AutoCompleteMode = AutoCompleteMo ...

  5. Oracle-EXP-00011 表不存在

    Oracle-EXP-00011 表不存在 点我,点我~

  6. C++将整型数据转换成大端或小端存储顺序

    大端和小端的概念参考之前博客: 大端/小端,高字节/低字节,高地址/低地址,移位运算 昨晚帮导师从指令中恢复图像的时候,导师要我转换成raw格式,也就是记录图像像素的二进制序列,然后反复强调让我注意大 ...

  7. 智能跳转---TC资源管理器

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;作者:天甜:QQ: ;一花一世界,一叶一枯荣,心无挂碍,无挂碍故 ...

  8. bzoj 4842: [Neerc2016]Delight for a Cat

    Description ls是一个特别堕落的小朋友,对于n个连续的小时,他将要么睡觉要么打隔膜,一个小时内他不能既睡觉也打隔膜 ,因此一个小时内他只能选择睡觉或者打隔膜,当然他也必须选择睡觉或打隔膜, ...

  9. java操作Excel之POI(1)

    一.新建工作簿.sheet.单元格 public static void main(String[] args) throws Exception { Workbook wb = new HSSFWo ...

  10. 统计numpy数组中每个值的个数

    import numpy as np from collections import Counter data = np.array([1.1,2,3,4,4,5]) Counter(data) #简 ...