子块Gij 的颜色对表中任意两个颜色对值之差小于某一阈值,则删除其中一个颜色对。
算法的描述
颜色直方图的实现算法描述
1.从图像库中读入关键图; 2.计算目标图片的直方图;
3.定位子块,即指定用户输入的图征对象所在子块坐标位臵; 4.按式(①)计算两幅图像的各对应子块的相似度; 5.对用户指定的块设臵权重为1,其他块降低权重为0.7,; 6.将N幅被比较的图像与用户输入的源图像的最后计算出来的相似度结果记录放入数组中。
7.将N个相似度从大到小排列;
8.根据相似度的排列显示检索到的图像。
改进的颜色直方图实现算法描述
结合前面颜色直方图的实现思路,提出了些改进,其具体实现过程如下:
1.从图像库中读入关键图;
2.定位图像中的子块,并计算子块直方图,即用户选定包含查询图像的子块;
3.计算子块(x,y)的颜色对表,采取“八方向邻接技术”计算这些子块与周围相邻子块的颜色对表,用calcuatecolorpair()函数实现;
4.将这些颜色对中差值小于某一域值的颜色对删除,以消除颜色澡声;
5.将该子块计算得到的颜色对表填入该图像的特征颜色对表,并对其从大到小排列,给定一个域值,选取颜色对表中最大的几个颜色对做为图像的代表特征;
6.颜色匹配,读取待比较的N幅图像,计算当前被比较的图像的颜色直方图,搜索目标图像的每一子块的颜色对表,匹配时不能使用精确匹配,因此颜色对误差小于2%也属于该匹配值;
7.统计单一匹配次数,按顺序计算目标图像中一子块与其同周围子块的颜色对,然后在用户输入的图像颜色对表中查询计算出来的颜色对,差值小于某域值,则匹配到,并臵颜色匹配对标志;
8.如果有60%以上的特征颜色匹配到,就说明该图像被检索到; 9.显示检索结果。
基于颜色直方图的图像检索系统的实现
开发工具的选取
本文的系统实现选用的开发工具为 Microsoft 公司的 Visual C++ 6.0。C++是最流行的面向对象语言之一,支持对象、类、方法、消息等概念,同时也支持面向对象方法的封装机制和继承、多态性机制。1998 年,C++由 ISO(InternationalStandards Organization)完成了标准化,C++标准提供了统一的 C++标准库,为用户提供了最为广泛的编
程基础设施。Visual C++ 6.0 是 Microsoft 公司推出的基于Windows 的可视化集成开发环境,将编辑、编译、链接和执行集成为一体,能用它来开发 32 位程序。Visual C++经历了从 1.0 到 6.0 版本的发展,软件系统逐渐庞大,功能日益完善。
系统结构
系统结构图
图像查询流程
图4.2图像查询流程图
主要类方法和数据结构
位图类
该系统的实现,没有采用数据库的形式,直接以文件夹的形式调用图像库。 class CPicture { public:
CPicture();
virtual ~CPicture();
private:
IPicture *m_pic; HGLOBAL hGlobal;
public:
HBITMAP LoadPicture(char * FileName);
HBITMAP LoadPicture(char * FileName, HDC hdc); VOID FreePicture( VOID );
HDC _GetDC ( VOID );
HBITMAP _GetHandle ( VOID ); DWORD _GetWidth ( VOID ); DWORD _GetHeight ( VOID );
BOOL DrawPicture(HDC hdc,long x,long y,long cx,long cy); };
CImageRetrievalDlg类
class CImageRetrievalDlg {
public:
void ShowPic(CString pathfile,int idc);// picture中显示图片
void StartDir(const CString& strfile1); //对所有目录查找,取得图
像目录下文件路径
void RunDir(const CString& strfile2); //对*.bmp文件查找 void CalculateColor(CString pathfile); //计算颜色直方图 void HistogramShow(int idc);// 绘臵直方图
void CalculateColorPair(int x, int y); //计算子块的颜色对表 void SortColorPair();//对四个子块的颜色对表排序 void SeekImage();
//部分方法略
protected:
//部分变量定义略 {
int x1; int y1; double o_dis1; struct pairs
}pair[32];