1.算法原理
(1)RGB颜色模型
我们通过在镜头前放置红(R),绿(G),蓝(B)三种颜色的滤光镜,得到R、G、B的三颜色通道。将三种滤光镜所生成的图像的灰度值以三基色原理组合在一起表示目标图像颜色的方式,就是我们最常见到的RGB颜色模型。
(2)模式分类——最近中心分类
对于图像上的每一个像素,我们都可以用一个含有R、G、B三色分量的三维向量表示。即:V(R,G,B)。
图像中的每一个物体区域都对应于向量空间(颜色空间)中的一个聚类(聚焦在一起的一些点)。对于图像中某一未知点,我们需要将其进行分类,即该点属于图像上哪一个物体区域问题。
对向量进行分类的一种办法是:测量该向量到每一个区域的表示向量距离。那么我们如何用向量表示每一个区域?我们使用每一个聚类的中心来表示该物体区域( 最近中心分类),这样大大节约了计算量和存储空间。
(3)“鸡生蛋,蛋生鸡”问题
在很多情况下,只有在提取出关于被成像物体的大量信息后,可靠的分割才是有可能实现的。不幸的是,提取出这些信息方法通常“暗含”一个假设条件,即:图像已经被分割好了(摘录于《机器视觉》一书)。
2.算法流程
算法说明:在分割前并不知道该分割的图像的物体颜色,所以只是粗略的将空间分为简单的八种颜色,给他们提供一种思路。以下是流程:
(1)初始化颜色空间:将颜色空间分为八个区域,分别是黑,蓝,绿,青,红,洋红,黄,白。
(2)计算图像上每一点到八个区域的距离,将该点的像素设为距离最短的区域颜色。
3.算法代码实现
#include<opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>
#include<iostream>
#include<math.h>
using namespace std;
using namespace cv;
//全局变量
Vec3b *g_ColorVectorSp