精华内容
下载资源
问答
  • 区域分割算法
    千次阅读
    2016-08-07 10:45:21

    思路参考了论文《基于特征线段匹配的救援机器人建图方法》


    特征识别主要分为两个过程:区域分割与特征提取


    首先要做的就是区域分割,假设激光雷达可以得到n个数据点,以这n个数据点作为一个区域,可以表示为A1{(Xi, Yi) | i = 1, 2, ..., n},利用两点间欧氏距离公式可得到两点间距Dj,同时确定一个阈值Delta,比较delta和Dj,确定两点是否在同一个线段特征集合范围内。当Dj大于Delta时,确定点(Xj, Yj)为区域的一个分割点,以此点将激光雷达的n个数据分割成两部分,分别得到区域A{(Xi, Yi) | i = 1, 2,..., j}和A’{(Xi, Yi) |  i = j+1, j+2, ..., n}。依次类推,对A和A‘应用算法进行分割,最后能够得到N个互不相连区域{A1, A2, ..., An}。


    因为做的是基于QT的程序,所以用的是QT下的模板类

    #include <QCoreApplication>
    #include "qvector.h"
    #include "math.h"
    #include "qlinkedlist.h"
    #include <iostream>
    
    using namespace std;
    
    typedef struct Point
    {
        double xpos;
        double ypos;
    }Point;
    
    QLinkedList<QVector<Point> > subset_list;    //声明全局变量,用于存储分割后的子集
    
    /***************************将点集分割为互不相连子集********************************/
    /*********************************************************************************/
    /*******输入:QVector<Point>点集数组、int n为点集内点的数量、double Delta分割阈值*********/
    /***********输出:QLinkedList<QVector<Point>> 链表存储每个点集的数组********************/
    /*******************************返回值:n为分割子集数目*****************************/
    
    int partition(const QVector<Point> &point_vector, int n, double Delta, QLinkedList<QVector<Point> > &sub_list)
    {
        int count = 1;      //保存分割子集数,初始有1个所有点的集合
        int pivot = 0;  //记录分割点
        double dist;
        for(int i = 0, j = i + 1; i < n - 1; i++, j++)
            {
                double x_dist = fabs(point_vector[i].xpos - point_vector[j].xpos);
                double y_dist = fabs(point_vector[i].ypos - point_vector[j].ypos);
                dist = sqrt(x_dist * x_dist + y_dist * y_dist);     //求相邻两点间距离
                if(dist >= Delta)
                {
                    //将集合分割
                    //建立临时数组保存分割子集
                    QVector<Point> tmp_array;
                    //将分割出来的点保存到临时子集中
                    for(int k = pivot;k <= i; k++)
                        tmp_array.append(point_vector[k]);
                    //更新分割点记录
                    pivot = j;
                    cout << "第" << count << "个分割点为:" << pivot << endl;
                    //将分割的子集加入链表中,分割子集数加1
                    sub_list.append(tmp_array);
                    count++;
                }
        }
        return count;
    }

    测试代码如下:

    int main()
    {
        QVector<Point> test_array;
        double set_1 = 1.0;
        double set_2 = 3.0;
        double set_3 = 5.0;
        Point p;
        p.xpos = 0.0; p.ypos = 0.0;
    
        for(int i = 0; i < 10; i++)
        {
            p.xpos = set_1; p.ypos = set_1;
            test_array.append(p);
            set_1 += 0.1;
        }
        for(int i = 0; i < 10; i++)
        {
            p.xpos = set_2; p.ypos = set_2;
            test_array.append(p);
            set_2 += 0.1;
        }
        for(int i = 0; i < 10; i++)
        {
            p.xpos = set_3; p.ypos = set_3;
            test_array.append(p);
            set_3 += 0.1;
        }
    
        int count = partition(test_array, test_array.length(), 0.5, subset_list);
        for(int i = 0; i < test_array.length(); i++)
        {
            if(i % 10 == 0 && i != 0)
                cout << endl;
            cout << "(" << test_array[i].xpos<<","<<test_array[i].ypos << ")   ";
        }
        cout << endl;
        cout<< "分割子集数为:" << count << endl;
        return 0;
    }



    更多相关内容
  • 因此,提出了一种新的图像中实施人脸区域分割算法。首先,利用同态滤波改善图像的光照条件并增强图像的对比度;然后,利用迭代式阈值选择算法对图像进行二值化并增强图像的对比度。在二值图像中依据一定的约束条件...
  • 基于深度学习的胃溃疡病变区域分割算法研究.pdf
  • 项目描述请参见:... 区域分割是将图像按照相似性准则分成不同区域的过程,主要包括:基于形态学的分水岭分割法和区域生长、区域分裂合方法等。 项目可直接运行~
  • 一种图像区域分割方法
  • 主要研究室外具有复杂背景环境中的视频图像火焰区域分割算法.在充分研究视频图像火焰运动特性并考虑实际应用环境的基础上,提出了一种基于多均匀分布背景模型的运动检测算法,以此来实现视频图像中火焰区域的分割....
  • 针对CCD采集的沥青路面病害图像分辨率过高且含信息的有效区域占比少的问题,提出一种基于图像内容的沥青路面病害图像区域分割算法,以剔除路面图像中的无效区域.首先通过预处理和病害提取过程将原图像处理成包含病害...
  • 一种基于8连通域的快速图像区域分割方法,采用种子标记点进行初始化,然后进行精确分割。
  • 彩色图像皮肤区域分割算法与实现-基于matlab的彩色图像皮肤区域分割算法与实现.rar 基于matlab的彩色图像皮肤区域分割算法与实现
  • 医学图像真皮区域分割算法.doc
  • 根据车辆轮廓凹陷区域提出一种分割算法。首先提取出二值化图像,在图像上检测并标记出目标遮挡区域,根据面积比来判断是否发生遮挡;然后提出了一种基于七宫格的凹陷区域检测算法,遍历每个区域找到符合条件域的凹陷...
  • 基于自适应FCM聚类的彩色图像区域分割算法.pdf
  • 第卷第期年月 郑州轻工业学院学报自然科学版 文章编号一一 基于视觉注意的图像感兴趣区域分割算法 程聪戴朝辉 河南财经政法大学计算机与信息工程学院河南郑州河南师范大学计算机与信息技术学院河南新乡 摘要为了更好...
  • 分割、改进视觉显著性度量进行图像分割、多尺度化视觉显著性检测算法、增量式支持向量机学习算法研宄方面、应用增量学习向量进行图像分割、变量学习支 持向量机学习算法研宄、应用视觉显著性和进行目标分割个方面...
  • 与5种分割算法的对比结果显示:本文提出的算法快速有效,并且能够很好地去除指纹采集器的边框和噪声等非纹理区域。将分割算法加入匹配实验中,结果表明:本文方法可以有效地提高指纹自动识别系统的性能。
  • 大数据-算法-基于非模糊均值漂移的高空间分辨率遥感影像区域分割算法研究.pdf
  • 主要研究室外具有复杂背景环境中的视频图像火焰区域分割算法.在充分研究视频图像火焰运动特性并考虑实际应用环境的基础上,提出了一种基于多均匀分布背景模型的运动检测算法,以此来实现视频图像中火焰区域的分割.该...
  • 行业文档-设计装置-一种基于新时空融合的步态区域分割算法
  • 基于非对称反打包模型和扩展阴影表示的压缩灰度图像快速区域分割算法
  • 针对现有掌纹分割算法中存在丢失部分有效信息的问题,提出了一种新的五点掌纹分割算法。首先,用基于仿射变换快速方法找到手掌的最大内切圆;然后,又用坐标变换和角度标定的方法找到手掌上的五个特征点;最后,通过...
  • 提出分治加工策略以保证复杂三角网格模型数控加工同时具有较高的加工效率和加工精度;针对分治加工的需求,提出一种将机械零件三角网格模型分割成具有加工意义...运行实例表明了该算法能够有效实现加工模型的区域分割
  • 基于区域相似的图像分割 matlab的区域生长算法
  • 针对网孔织物图像的对比度低和噪声点多而导致分割结果中存在网孔连在一起和残缺等问题,提出一种基于区域灰度极小值的分割算法以期提高网孔的分割精度。首先利用高斯金字塔缩放和直方图均衡化算法处理图像以增强图像...
  • 针对无线传感器网络区域已知的区域覆盖问题,提出了一种基于区域分割和Voronoi图的覆盖算法(RSV)。算法首先分析已知区域的地理信息和兴趣点,根据传感器感知能力,构造合适大小的网格将已知区域细化分割。然后基于...
  • MATLAB 皮肤区域 分割算法 人脸识别
  • 为克服一般区域生长算法对初始种子点选择以及生长顺序鲁棒性较差的问题,提出了一种鲁棒于生长顺序的彩色图像区域生长算法。首先计算所有像素点的局部颜色直方图以及领域相似性指标(neighbor similarity factor,NSF);...
  • 3D点云分割算法汇总

    2021-01-06 23:18:23
    来源:汇总|3D点云分割算法 前言 最近在arXiv和一些会议上看到了几篇3D点云分割paper,觉得还不错,在这里分享下基本思路。 1、SceneEncoder: Scene-Aware Semantic Segmentation of Point Clouds with A Learnable ...
  • 针对传统区域合并算法中存在的分割复杂度高、分割精度低的问题,提出一种将统计理论应用于区域合并的彩色图像分割算法,该算法通过建立图像生成模型,得到新的合并预测准则,有效地避免合并过程中可能导致的区域边界破坏...
  • 基于简单线性迭代聚类和快速最近邻区域合并的图像分割算法

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 90,319
精华内容 36,127
关键字:

区域分割算法