颜色聚合向量(color coherence vector,CCV)是一种颜色特征,它包含了颜色分布的空间信息。克服了颜色直方图无法表达图像色彩的空间位置的缺点。

颜色聚合向量是一种更复杂颜色直方图。它将每个像素分类为聚合的(coherence pixels)或非聚合的(incoherence pixels)。聚合的像素指的是,该像素属于一个大的连通区域;而非聚合像素指的是,像素位于一个小的连通区域。连通区域大小的标准有我们自己来定,通常为整幅图像像素的1%。大于1%,是大的连通区域。

特征提取算法:
第一步:平滑滤波 
               用3*3的模板进行平滑滤波。
第二步:量化
               把0-255的颜色区间量化为n个颜色区间,通常采用均匀量化。
第三步:划分连通区域(每一个连通区域只有一个灰度值)。
第四步:计算颜色聚合向量
              每一个灰度级i(也就是直方图的每一个bin)有两部分组成(Ci and Ni);
              Ci是聚合像素的个数(灰度值为i的所有大连通区域像素之和);
              Ni是非聚合像素的个数(灰度值为i的所有小连通区域像素之和);
             <Ci+Ni>是灰度级为i的像素之和。

该图像的颜色聚合向量可表示为:CCV=<(C1,N1)、(C2,N2)、(C3,N3)、.....(Cn,Nn)>

该图像的颜色直方图可表示为:HIST=<(C1+N1)、(C2+N2)、(C3+N3)、.....(Cn+Nn)>

可以这样理解,CCV有两个直方图组成:一个直方图统计聚合的像素。一个直方图统计非聚合的像素。

匹配函数(Matching function)

例如,比较图像IMG1,img2的相似度。

图像IMG1的颜色聚合向量:CCV1=<(C1,N1)、(C2,N2)、(C3,N3)、.....(Cn,Nn)>

图像img2的颜色聚合向量:ccv2=<(c1,n1)、(c2,n2)、(c3,n3)、.....(cn,nn)>

那么图像IMG1与图像img2的距离:

matlab code

%% 颜色聚合向量 主函数
clc;
clear all;
%% 初始化
bin=50; %量化级数
coherentPrec=1;%聚合像素阈值
%% 读取图像
Img1=imread('1.jpg');
Img2=imread('2.jpg');
%% 颜色聚合向量
CCV1=getCCV(Img1,coherentPrec,bin);
CCV2=getCCV(Img2,coherentPrec,bin);
%% 计算两幅图像的距离
D=0;  %两幅图像的距离
for i=1:binC=abs(CCV1(1,i)-CCV2(1,i));N=abs(CCV1(2,i)-CCV2(2,i));d=C+N;D=D+d;
end

函数getCCV()

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%function CCV = getCCV(img,coherentPrec, numberOfColors)
%颜色聚合向量
%====================
%颜色聚合向量是一种基于颜色的图像检索
%Parallel implementation based on this paper : Comparing Images Using Color Coherence Vectors (1996) - http://goo.gl/LkWkbi -
%CCV = getCCV(img, coherentThreshold, numberOfPixels)
%getCCV function takes an image and return the Color Coherence Vector that describe this Image. You can compare images using this vector.
%
%Input:
%img : The Image (3-channel Image)
%
%Optional Input:
%coherentPrec: 设定一个阈值(一般取为图像总像素的1%)
%numberOfColors:量化,将0~255的区间量化为numberOfColors个颜色小区间 (default = 27 colors).
%               Note it'll be changed a little bit to ensure the same different values for RGB channel
%
%Output :
%CCV: a (2*numberOfColors) matrix represents your image. This can be used for matching.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function CCV = getCCV(img,coherentPrec, numberOfColors)if ~exist('coherentPrec','var')coherentPrec = 1;endif ~exist('numberOfColors','var')numberOfColors = 27;endCCV = zeros(2,numberOfColors);%高斯滤波Gaus = fspecial('gaussian',[5 5],2);img = imfilter(img,Gaus,'same');[img, updNumOfPix]= discretizeColors(img,numberOfColors);  %量化imgSize = (size(img,1)*size(img,2));thresh = int32((coherentPrec/100) *imgSize);parfor i=0:updNumOfPix-1BW = img==i;CC = bwconncomp(BW);compsSize = cellfun(@numel,CC.PixelIdxList);incoherent = sum(compsSize(compsSize>=thresh));CCV(:,i+1) = [incoherent; ...sum(compsSize) - incoherent];end
end

量化函数discretizeColors(img,numColors)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% This function discretize the color to numColors and converts the RGB Image to one channel image
% The idea is to find equal number of unique colors in each channel so that the total conbination
% becomes ~numColors
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [oneChannel, updatedNumC] = discretizeColors(img,numColors)width = size(img,2);
height = size(img,1);
oneChannel = zeros(height,width);% We have 3 channels. For each channel we have V unique values.
% So we want to find the value of V given that V x V x V ~= numColors
numOfBins = floor(pow2(log2(numColors)/3));
numOfBinsSQ = numOfBins*numOfBins;
img = floor((img/(256/numOfBins)));
for i=1:heightfor j=1:widthoneChannel(i,j) = img(i,j,1)*numOfBinsSQ ...+ img(i,j,2)*numOfBins + img(i,j,3);end
end
updatedNumC = power(numOfBins,3);end

参考:http://hubpages.com/technology/Image-Retrieval-Color-Coherence-Vector

matlab源码下载:http://www.mathworks.com/matlabcentral/fileexchange/47935-color-coherence-vector

图像检索:颜色聚合向量(CCV)及matlab实现相关推荐

  1. 颜色聚合向量(CCV)

    一.CCV的主要思想[1] 针对颜色直方图和颜色矩无法表达图像色彩的空间位置的缺点,Pass[9]提出了图像的颜色聚合向量(color coherence vector).它是颜色直方图的一种演变,其 ...

  2. 图像特征(一)——颜色特征(颜色直方图,颜色矩,颜色集,颜色聚合向量和颜色相关图)

    本文主要是为了更好地理解图像特征,理解各方法的原理. 转载请注明出处 https://mp.csdn.net/console/editor/html/105090183 图像模式识别的一般步骤为:输入 ...

  3. matlab计算两向量的乘积,matlab中两个函数相乘

    变量名最多不超过63个字符; ? 变量名区分大小写; ? Matlab提供的标准函数名以及命令名必须用小写字母; ? 变量名中不能包含空格.标点.运算符. 1.变量及其...... 中的元素; (2) ...

  4. matlab中向量norm,【Matlab开发】matlab中norm范数以及向量点积、绘图设置相关

    [Matlab开发]matlab中norm范数以及向量点积.绘图设置相关 标签(空格分隔): [Matlab开发] 声明:引用请注明出处外链网址已屏蔽 norm范数使用 help norm norm ...

  5. matlab 向量去除空格,MATLAB向量

    行向量 列向量 MATLAB 行向量: 创建行向量括在方括号中的元素的集合,用空格或逗号分隔的元素.r = [7 8 9 10 11] 执行上述语句,返回下述结果:r = Columns 1 thro ...

  6. 向量归一化的matlab程序,向量X的归一化及其Matlab简单示例

    徐海蛟博士 归一化是要把需要处理的数据经过处理后限制在一定范围内,例如:[-1,1]或[0,1].归一化是为了后续数据处理的方便,也使得算法程序收敛加快. 在Matlab里面,归一化的方法共有3种: ...

  7. matlab 向量_COMSOL与MATLAB联合仿真+RBF神经网络预测输出

    数值仿真软件 COMSOL 一是款功能强大的多物理场仿真软件,包含电磁学.流体流动等领域,可以解决电阻抗成像的正问题.这里简单给大家介绍一个电阻抗成像数值仿真的案例: 1. 首先,打开软件新建一个空白 ...

  8. matlab向量殿臣,matlab课后习题答案.doc

    <matlab课后习题答案.doc>由会员分享,可在线阅读,更多相关<matlab课后习题答案.doc(19页珍藏版)>请在装配图网上搜索. 1.袒驶树趴贵砷挝豺度骏睹系辆隧淖 ...

  9. matlab 向量取倒数,Matlab 求倒数命令及控制方法

    建立符号变量命令sym和syms调用格式: x=sym('x'), 建立符号变量x: syms x y z , 建立多个符号变量x,y,z: matlab求导命令diff调用格式: diff(函数) ...

  10. matlab 向量的复制,MATLAB:复制向量’n’次

    本问题已经有最佳答案,请猛点这里访问. 我有一个向量,例如 vector = [1 2 3] 我想在自身内部重复n次,即如果n = 3,则最终结果为: vector = [1 2 3 1 2 3 1 ...

最新文章

  1. 记一次lnmp经历 nginx 多个php版本支持配置
  2. iOS设备中垂直同步开启后的帧率计数
  3. 使用opencv训练cascade分类器进行目标检测
  4. 2022年全球及中国面粉加工机械行业竞争现状与发展前景规模分析报告
  5. 一文详解SVM的Soft-Margin机制
  6. LeetCode中二叉树题目总结
  7. TypeScript 再次发布一个奇怪的版本:3.3.4000
  8. 惠普暗影精灵3清灰_惠普暗影精灵15评测:速度超快,价格适中|但问题却不少...
  9. web压力测试的几个指标
  10. 计算机能换显卡吗,一体机电脑可以更换CPU和显卡嘛?
  11. java jsessionid_关于JSESSIONID
  12. http请求webservice接口
  13. Android集成华为、小米、OPPO、VIVO、极光推送
  14. Android进程间通信系列-----------进程间的数据传递载体Parcel
  15. 分享基于SpringBoot2+MybatiPlus+LayUI+Snaker+Mysql技术前后端分离开源后台管理系统脚手架
  16. stm32 U盘升级 bootloader程序 基于stm32f407 将升级包下载到U盘中,插入到设备中,完成对主程序的升级
  17. [JavaScript学习记录] 首次运用于网页,做一个简易利息计算器!!!
  18. ACCESS实例2 资料管理2——窗体创建方法
  19. Google Play Install Referrer API 和 Facebook App Ads Referral 集成
  20. python模糊搜索_在Python中使用Whoosh进行模糊搜索

热门文章

  1. 你眼里的废品也许就是别人眼里的宝贝(生意)
  2. 儿童手表语音卡安全吗?
  3. C++程序员的职业生涯规划
  4. is_file(): open_basedir restriction in effect.
  5. 阿里云服务器租用报价新鲜出炉(轻量和ECS价格)
  6. u盘损坏怎么恢复原来数据,u盘损坏数据如何恢复
  7. 嗨,你真得懂this吗?
  8. oracle配置ipv6_配置 IPv6 路由器
  9. STM32——红外接收和红外发射
  10. 【C++】使用cmake通过源代码安装第三方库