【数字图像处理】10.4:彩色图像-图像分割 彩色空间分割

Abstract: 数字图像处理:第73天
Keywords: 彩色分割

本文最初发表于csdn,于2018年2月17日迁移至此

彩色图像-图像分割 彩色空间分割

本系列最后一篇,后续的文章将在其他系列中编写,本想把小波也放在这个系列,但感觉最近写小波有点困难,这里学习环境不好,所想去写点好玩的,比如模式识别,图像特征点什么的,希望大家继续关注。

算法原理

多通道图像的简单分割,可以给定阈值向量,然后给定范围,可以是三维的球形,或者立方体,这个就要看具体的设计了,比如举个简单的例子,给定RGB中心阈值为 $\vec T(R_0,G_0,B_0)$ ,阈值为100,那么对于像素点 $(x,y)$ 处的色彩向量 $\vec I(R_{xy},G_{xy},B_{xy})$
那么只要满足
$|\vec T- \vec I |<100$

的点满足要求,为目标点,否则为背景点。
算法同样适用于其他色彩空间,但要根据具体情况来设计,所以灵活性很强。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
double Chanel3Distance(RGB point1,RGB point2){
return sqrt((point1.c1-point2.c1)*(point1.c1-point2.c1)+
(point1.c2-point2.c2)*(point1.c2-point2.c2)+
(point1.c3-point2.c3)*(point1.c3-point2.c3));


}
void SegmentRGB(RGB* src,RGB *dst,int width,int height,RGB * color_center,double threshold){
double distance=0.0;
for(int i=0;i<width*height;i++){
distance=Chanel3Distance(src[i], *color_center);
if(distance<=threshold){
dst[i].c1=src[i].c1;
dst[i].c2=src[i].c2;
dst[i].c3=src[i].c3;
}else{
dst[i].c1=0.;
dst[i].c2=0.;
dst[i].c3=0.;
}
}
}

结果分析

下面简单的分割和平滑,然后进行合并。
原图:

分割(使用简单的RGB模型,肤色分割点简单选取,所以效果不是很好):

平滑后合并

原图:

分割结果:

总结

至此用了70几天简单的介绍了图像处理的基础知识,特定的应用因为不具有行业通用性,所以将会有选择的进行学习,感谢自己一路坚持了几个月,感谢大家一直的支持,希望大家的技术进步。
本系列结束。
技术,待续。。。

0%