Robot Vision Segment

姓名:崔少杰       学号:16040510021

转载自:http://www.jianshu.com/p/973e4ce0e975=有修改

【嵌牛导读】:深度不连续,表面方向不连续,物质属性变化,场景照明变化,优秀的分割算法可以大幅度减少数据量

【嵌牛鼻子】:OpenCV、经典分割方法

【嵌牛提问】:图像中的显著属性变化怎么反映了该属性的重要性和影响?

【嵌牛正文】:基于边缘分割

实际场景中图像边缘往往是各种类型的边缘及模糊化后的结果组合,且实际信号噪声较多。

噪声和边缘都属于高频噪声,难用频带取舍。

边界分割法

点+线+边缘检测

可以加一些图像增强或腐蚀膨胀等形态学处理,强化或弱化目标边界,去噪

1_1.png

一阶算子介绍

Roberts2*2四邻域差分寻找边缘无平滑,噪声较敏感

1_1_roberts.png

Sobel/Prewitt3*3邻域卷积梯度微分,处理垂直和水平边缘处理灰度渐变低噪声,定位校准

1_1_sobel.png

Log先平滑,拉氏变换后求二阶积分再卷积消除尺度小于σ的图像强度变化,计算量小,易丢失细节

1_1_log.png

Canny准高斯函数做平滑,带方向一阶微分算子定位导数最大值检测弱边缘效果很好,运算较慢

1_1_canny.png

检测完提取

物体边界一般是线,不是单独的点。边界表示使图像表示更简介,方便高层次理解

难点在于边界分叉缺损,不是闭合连通边界图,梯度大的点也不一定真是边缘点

可以加一些开闭运算,形态学梯度,顶帽黑帽,颗粒分析,流域变换,骨架提取,击中击不中变换等形态学处理,强化或弱化目标边界,强化物体结构

数学形态学是一门建立在严格数学理论基础上的学科。象方差,弦长分布,周长测量,颗粒统计等 统称为击中击不中变换

数学形态学理论基础是击中击不中变换,开闭运算,布尔模型和纹理分析器

方法介绍

简单连接相邻点边缘强度差和边缘方向小于阈值时,可以连接。无则停止,多则取差最小的点

启发式搜索从多种可能路径中选优,评价函数打分

曲线拟合若边缘点很稀疏,可以用分段性或高阶样条曲线来拟合这些点,形成边界。拟合方法多为均方误差最小准则

其他还有hough变换,图搜索,动态规划等

阈值分割

1_2.png

阈值分割算法实际上就是设定阈值的矩阵二值化,所以这个输入的灰度矩阵可以变成以0:255为范围的任何其他矩阵

比如速度矩阵,深度矩阵,明度矩阵等等以及其他具有统计特性的矩阵

利用图像中要提取目标和背景在某一特性上的差异,选取合适阈值进行分割。

单阈值分割方法(全局)

多阈值分割方法(局部)

基于像素值/区域性质/坐标位置的阈值分割方法

根据分割方法所具有的特征或准则,可分为直方图峰谷法/最大类空间方差法/最大熵法/模糊集法/特征空间聚类法/基于过渡区的阈值选取法等

直方图阈值的双峰法

迭代法(最佳阀值分割迭代法 k-means)

大律法(otsu阈值分割算法)

类内方差最小方差法

最小错误概率分类法

基于熵的二值化方法

局部自适应

基于区域分割

1_3.png

区域生长法

区域生长的一致性描述是区域生长法的基本准则,一般是灰度,也可以考虑颜色/纹理/形状等其他属性

基于阈值的方法是基于单个点的特点。基于区域的方法考虑到相邻点的一致性。

需要确定:

种子像素,一般可以根据聚类中心作为种子中心,也可以设定一个阈值,在此阈值内的点为种子点

生长方法和每次生长后这个区域的一致性准则,如灰度差小于阈值,简单的生长方法,区域的所有8邻域点。

若该点加入后,该区域满足一致性准则,则加入。

当两个区域满足一定准则时,合并两个区域。该准则可以考虑两个区域分别的均值和方差。

如果没有预先确定的种子点,可采用一般步骤:

1.用某种准则把图像分割成许多小区域

2.定义合并相邻区域的准则,需要注意区域合并得到的结果受区域合并顺序影响

3.按照合并准则合并所有相邻的区域,如果没有再能够合并的块后停止。

不同的分割方法和合并准则适应不同情况。相邻区域特征值之间的差异是计算强度的一个尺度。

强边界保留,弱边界消除,相邻区域合并。计算是一个迭代,每一步重新计算区域成员隶属关系,并消除弱边界。无弱边界消除时合并结束。

计算开销较大,但综合利用的话对自然场景分割效果相对最好。

生长准则:

灰度差准则

1.dd 扫描图像,找出无隶属的像素

2.检查邻域像素,逐个比较,灰度差小于阈值即合并

(对种子点依赖较大,可以求所有邻接区域平均灰度差,合并差小的邻接区域/

还可直接用像素所在区域平均灰度值代替此像素灰度值进行比较。)

3.以新合并的像素为中心,重复步骤2,直至区域不能进一步扩张

4.返回步骤一,重复,至找不到无隶属像素,结束生长。(可以自己设定终止准则)

灰度分布统计准则

以灰度分布相似性座位上生长准则来决定区域的合并,步骤如下:

1.把图像分为互不重叠的小区域

2.比较邻接区域的累积灰度直方图很据灰度分布相似性进行区域合并

3.设定终止准则,重复步骤2将各区域依次合并直至满足终止准则

灰度分布相似性检测方法 | Kolmogorov-Smirnov {maxz(h1(z)-h2(z))} | Smoothed-Difference{Σz|h1(z)-h2(z)|}

区域形状准则

方法1:把图像分割成灰度固定的区域,设两相邻区域周长分别位p1p2,把两区域共同边界线两侧灰度差小于给定值的部分设为L,若L/min(p1,p2)>T1则合并两区域。

方法2:把图像分割成灰度固定的区域,设两邻接区域共同边界长度位B,把两区域共同边界线两侧灰度差小于给定值部分的长度设为L,若L/B>T2则合并

区域分裂

原始图像    模糊滤波    分裂合并   分裂扩张

1_3_split.png

区域分裂与区域合并相反

先假设整个图像是一个对象,不满足一致性准则,则分裂(一般是均分成4个子图像),重复,直至所有区域满足一致性准则。像正方形的四叉树分裂

区域分裂+合并

从中间层开始处理,按照一致性准则该分裂分裂该合并合并。起点是四叉树的某一层节点。

边缘+区域 分割

通过边缘限制,避免区域过分割,通过区域分割补充漏检边缘。

如先进行边缘检测与连接,在比较相邻区域的特征(灰度均值,方差等),若相近则合并。

对原始图像分别进行边缘检测和区域增长,获得边缘图和区域分段图后,再按一定准则融合,得到最终分割结果。

连通域标记

基于边缘的方法根据所得闭合边界,采用边界跟踪和内部填充的方法。

基于区域的方法一般采用连通性分析方法,按照一定的顺序把连通的像素用相同的序号标注

1.把所有像素点放到待处理点集合A中。

2.如果A空则结束。否则从A中任意移出一点作为连通域a(用集合表示)的初始点

3.在A中寻找所有与a连通的点,并移到a中,若没有找到,重复2,寻找下一个连通域。

4.重复3,迭代寻找新的连通点。

SaliencyCut

1_4_saliency.png

Global Contrast Based Salient Region Detection

_南开程明明download

特殊工具分割

小波

马尔科夫随机场

遗传算法

神经网络/Kmeans/主动轮廓模型(能量函数)

运动分割

差分(时空灰度梯度)光流(运动场)

参考 :图像分割

PCL

因为维度的增加,是的分割成为三维图像对比二维图像的最大优势。使得最优分割成为可能

Ransac算法

随机采样一致,找平面,找线,找圆柱等 可以处理噪声较多的情况

2_1.png

使用方法:

//创建一个模型参数对象,用于记录结果

pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients);

//inliers表示误差能容忍的点 记录的是点云的序号

pcl::PointIndices::Ptr inliers (new pcl::PointIndices);

// 创建一个分割器

pcl::SACSegmentation seg;

// Optional

seg.setOptimizeCoefficients (true);

// Mandatory-设置目标几何形状

seg.setModelType (pcl::SACMODEL_PLANE);

//分割方法:随机采样法

seg.setMethodType (pcl::SAC_RANSAC);

//设置误差容忍范围

seg.setDistanceThreshold (0.01);

//输入点云

seg.setInputCloud (cloud);

//分割点云

seg.segment (*inliers, *coefficients);

2_1_youtube.png

邻近信息

kdTree & OcTree

搜索策略,建立相邻关系

#include

#include

//创建kdtree 结构

pcl::KdTreeFLANN kdtree;

//传入点云

kdtree.setInputCloud (cloud);

//设置输入点

pcl::PointXYZ searchPoint;

//k邻近搜索

int K = 10;

//设置两个容器,第一个放点的标号,第二个点到SearchPoint的距离

std::vector pointIdxNKNSearch(K);

std::vector pointNKNSquaredDistance(K);

//进行搜索,注意,此函数有返回值>0为找到,<0则没找到

kdtree.nearestKSearch (searchPoint, K, pointIdxNKNSearch, pointNKNSquaredDistance)

//    基于距离的搜索    //

//两个未知大小的容器,作用同上

std::vector pointIdxRadiusSearch;

std::vector pointRadiusSquaredDistance;

// 搜索半径

float radius = 3;

//搜索,效果同上

kdtree.radiusSearch (searchPoint, radius, pointIdxRadiusSearch, pointRadiusSquaredDistance)

欧氏距离

分割,可以用半径做滤波,删除离群点

//被分割出来的点云团(标号队列)

std::vector cluster_indices;

//欧式分割器

pcl::EuclideanClusterExtraction ec;

ec.setClusterTolerance (0.02); // 2cm

ec.setMinClusterSize (100);

ec.setMaxClusterSize (25000);

//搜索策略树

ec.setSearchMethod (tree);

ec.setInputCloud (cloud_filtered);

ec.extract (cluster_indices);

区域增长

可以自定义准则,如法线,曲率,颜色,距离等等

2_2_region_chair.png

2_2_region_corridor.png

//一个点云团队列,用于存放聚类结果

std::vector clusters;

//区域生长分割器

pcl::RegionGrowing reg;

//输入分割目标

reg.setSearchMethod (tree);

reg.setNumberOfNeighbours (30);

reg.setInputCloud (cloud);

//reg.setIndices (indices);

reg.setInputNormals (normals);

//设置限制条件及先验知识

reg.setMinClusterSize (50);

reg.setMaxClusterSize (1000000);

reg.setSmoothnessThreshold (3.0 / 180.0 * M_PI);

reg.setCurvatureThreshold (1.0);

reg.extract (clusters);

minCut算法

图论

need-to-insert-img

2_3.png

超体聚类

类似于超像素的概念

超体聚类八叉树划分

2_4.png

不同晶体间的邻接关系

need-to-insert-img

2_4_super_tree.png

基于凹凸性

根据超体聚类之后不同的晶体计算凹凸关系,进行分割

need-to-insert-img

2_5.png

只允许区域跨越凸边增长

need-to-insert-img

2_5_convex.png

完美效果...

need-to-insert-img

2_5_convex_perfect.png

基于形态学

need-to-insert-img

2_6.png

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • 不同图像灰度不同,边界处一般会有明显的边缘,利用此特征可以分割图像。需要说明的是:边缘和物体间的边界并不等同,边缘...
    大川无敌阅读 13,815评论 0 29
  • 1、阈值分割 1.1 简介 图像阈值化分割是一种传统的最常用的图像分割方法,因其实现简单、计算量小、性能较稳定而成...
    木夜溯阅读 22,555评论 9 15
  • 最近需要给直播项目中添加美颜的功能,调研了很多SDK和开源代码(视决,涂图,七牛,金山云,videoCore等),...
    未来的路就在那阅读 1,978评论 1 1
  • 通常在app内编辑信息时,产品设计时为了防止用户的误操作一般在用户点击返回时会弹出提示窗,询问用户是否保存。先放张...
    樱桃小肥纸阅读 1,578评论 0 2
  • 在2010年的夏季,那时已快接近初秋时分了。女孩来到了XX学校就读高中,是一所封闭式的学校,这是C城一所有名的贵族...
    紫梦翾阅读 178评论 0 0