颜色直方图匹配(一)

本文探讨了颜色直方图在图像特征提取中的应用,分析了基于RGB和HSV色彩空间的直方图匹配方法。指出基于RGB的简单平均方法可能丢失颜色信息,推荐使用区间统计的RGB(4X4X4)颜色模型来提高匹配的准确性。同时,介绍了通过三维数组和一维数组统计直方图的方法,并提出使用指针遍历像素以提高效率。
摘要由CSDN通过智能技术生成

最近在研究颜色直方图匹配算法,提取一张图的色彩特征有很多种方法,最常用的一种特征是提取它的颜色直方图分布特征。网上搜了很多文章,颜色直方图匹配算法主要有两类,一类基于RGB色彩空间的直方图匹配,另一类是基于HSV色彩空间的直方图匹配。其中基于RGB色彩空间的直方图匹配,网上大多是将图像分成RGB三通道,计算每一个通道的直方图,然后求平均,最后计算相似度;我觉得这种方法会丢失很多颜色特征,很不靠谱,还不如直接转成灰度图像,求灰度直方图并计算相似度。在维基百科上看到一种基于区间统计的颜色直方图方法,感觉比较靠谱,它是将R,G,B各分量的颜色信息划分为N 区间。比如;将图像每个像素的R、G和B的值都分成4个bins(256除以64),构建RGB(4X4X4 )颜色模型,然后再统计各个区间内的像素数,如下图:



C/C++代码实现方法如下:

统计颜色直方图方法一:采用三维数组a[][][]来遍历Mat每一个像素。

vector<float> getHist1(Mat testImg)//RGB色彩空间的(4,4,4)模型。
{
	const int div = 64;
	const int bin_num = 256 / div;
	int length = bin_num*bin_num*bin_num;
	Vec3i pix;
	vector<float> b;
	float a[bin_num*bin_num*bin_num] = { 0 };
	float d[bin_num][bin_num][bin_num] = { 0 };

	for (int r = 0; r < testImg.rows; r++)
	{
		for (int c = 0; c < testImg.cols; c++)
		{
			pix = testImg.at<Vec3b>(r, c);
			pix.val[0
  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值