多语言展示
当前在线:1714今日阅读:172今日分享:19

OpenCV例程:针对对比度差的图像,目标分割方法

绪:本文主要针对目标区域和背景区域灰度值近似,即图像对比度差;采用基于Otsu阈值分割法不易分割;这里介绍给出了一个不算困难的方法:首先,以三个模板对图像进行卷积,提取特征,构建特征向量集合;然后,采用k-means聚类方法,对特征向量集合聚类,提取目标类别;最后,基于形态学操作,分割出目标区域。
工具/原料

OpenCV 2410

方法/步骤
1

目标区域和背景区域灰度值近似的图像,如下图所示:在图中,比较平滑的地方为路面--目标,纹理较丰富的地方为树林--背景;这是遥感图像;那么问题来了:如何在这幅图像中,分割出路面目标区域?

2

在上图中,常见的阈值分割法肯定是不行的。这里给出了一种纹理分割方法,使用了三种特征来表征某一像素在其领域范围内的纹理性质;根据路面目标区域和树林背景区域的纹理性质不同,来进行分析。首先,给出了三个特征模板,如图所示:①单位面积灰度变化总量:针对这个公式,我构造了一个5*5的模板即只需要用这个模板对原图进行滤波就可以求出单位面积灰度变化总量;②Laws纹理测量模板中的高频点检测模板R5R5③Laws纹理测量模板中的V形状检测模板E5S5

3

分别将上述三个模板与图像做卷积,并将得到的结果组成一个矢量;在三维空间里面进行Kmean聚类;程序如下:Mat pLawsEnergy(raw_img.size(),CV_32FC3);//特征向量集合int i,j,m,n;float sumRR,sumES,sumVAR;for (i=2;i

4

k-means聚类:k-means算法是一个聚类算法,聚类算法用于根据数据的特征发现数据项的相似性,并将相似的数据项放在同一个组中,相似性采用距离进行描述。k-means聚类的流程:首先,随机选取k个点,将每个点分配给它们,得到最初的k个分类;然后,在每个分类中计算均值,将点重新分配,划归到最近的中心点;重复上述步骤直到点的划归不再改变。

5

k-means聚类的流程:针对本图像,分为路面目标和树林背景两类;①设置初始聚类中心{100,100,100},{0,0,0};②根据差的绝对值之和计算相似度,将图像像素划分为目标和背景两类;③重新计算聚类中心;一般用求重心的方法;④判断,聚类中心是否改变,如果没改变则收敛;否则,继续迭代。⑤采用形态学操作进一步优化分割图像;如图所示://进来的朋友,点赞,关注,投票,谢谢!

6

本文程序总结如下:由于字数较多,故通过图像显示如下:#include 'stdafx.h'#include #include  using namespace std;using namespace cv; int main(){       const int R5R5[5][5]=       {              1,  -4,  6,  -4,  1,          -4,  16,-24,  16, -4,           6, -24, 36, -24,  6,          -4,  16,-24,  16, -4,           1,  -4,  6,  -4,  1       };        const int E5S5[5][5]=       {              -1,  0,  2,  0,  -1,              -2,  0,  4,  0,  -2,               0,  0,  0,  0,   0,               2,  0, -4,  0,   2,               1,  0, -2,  0,   1       };        const int VAR[5][5]=       {              -1,  -1,  -1,  -1,  -1,              -1,  -1,  -1,  -1,  -1,              -1,  -1,  24,  -1,  -1,              -1,  -1,  -1,  -1,  -1,              -1,  -1,  -1,  -1,  -1,       };        Mat raw_img = imread('3A.bmp',0);       int m_height = raw_img.rows;       int m_width = raw_img.cols;       Mat pLawsEnergy(raw_img.size(),CV_32FC3);       int i,j,m,n;       float sumRR,sumES,sumVAR;       for (i=2;i

注意事项
1

找出对比度差的图像中的显著特征

2

对这些特征进行k-means聚类分割

推荐信息