图像搜索现实的一般过程:
提取图像特征值→对特征值进行处理→匹配特征值
图像的特征值有很多,基于颜色特征,纹理特征,形状特征等,下面是基于图像颜色直方图特征的图像搜索。
利用直方图特征可以实现图像的目标搜索,通过计算两直方图之间的巴氏系数来匹配直方图。
巴氏系数:
其中,p,p’(归一化后)代表候选图像与待选图像的直方图特征,可以是16^2个或者16^3个特征区间。该值范围[0 1],z值越大,相似度越高。
简单的程序:
clc;close all;clear all; %%直方图匹配示意 img=imread('0329.jpg'); img1=imread('0332.jpg'); % imshow(img,[]) [~,initstate]=imcrop(img);%截取目标框 车 initstate=fix(initstate); init=initstate; temp=imcrop(img,initstate);%获取目标模板 temp = temp(:,:,1); rectangle('Position',initstate,'LineWidth',2,'EdgeColor','g'); hist=imhist(temp);%灰度直方图 hist=hist/sum(hist);%归一化 k=0; %% 下一帧中 在上一帧目标附近一定范围内搜索 x=[-50:5:50];y=[-50:5:50];initstate1=[0 0 0 0]; for i=1:length(y) for j=1:length(x) k=k+1; initstate1=[initstate(1)+x(i),initstate(2)+y(j),initstate(3),initstate(4)]; temp1=imcrop(img1,initstate1); temp1 = temp1(:,:,1); hist1=imhist(temp1); hist1=hist1/sum(hist1); q=0; %计算巴氏系数 for f=1:256 q=q+sqrt(hist(f)*hist1(f)); end p(j,i)=q; end end %系数最大的即为最优匹配 [rows,cols]=find(p==max(max(p))); initstate1=[initstate(1)+x(cols),initstate(2)+y(rows),initstate(3),initstate(4)]; figure imshow(img1,[]) rectangle('Position',initstate1,'LineWidth',3,'EdgeColor','r');
前后帧的相似度图如下,我们要找出其中的最大相似度,为0.9827。
直方图特征作为一种颜色特征,其具有一定的尺度与旋转不变性。其可以应用在图像检索中,如下连接:
http://blog.csdn.net/luoweifu/article/details/8690835
http://blog.csdn.net/jia20003/article/details/7771651#comments
其亦可,在后续跟踪方法中作为一个判断准则,来选择合适的目标patch。