struct obj_sets { int x; int y;
}obj_set[4];//定义子块位臵结构 };
主要程序界面
打开关键图:
指定关键图子块位臵
显示关键图直方图
选择图像库
实验结果
以蓝天白云为例
关键图:路径为\\2006519\\样本\\cloud.bmp 图像库:路径为\\2006519\\图像库\\clouds 检索结果:
用户指定一个检索图像, 系统从图像库中自动检索与检索图像最相似的图像,检索结果按距离的降序排列。特别是对于轮廓或边界分明的图像,该算法的检索结果比全局图像的颜色直方图算法明显要好。
附录
主要函数:
// picture中显示图片
void CImageRetrievalDlg::ShowPic(CString pathfile,int idc) {
CBitmap hbmp; HBITMAP hbitmap; //将pStatic指向要显示的地方 CStatic *pStaic;
pStaic=(CStatic*)GetDlgItem(idc); //装载资源
hbitmap=(HBITMAP)::LoadImage (::AfxGetInstanceHandle(),pathfile,
IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
hbmp.Attach(hbitmap); //获取图片格式 BITMAP bm; hbmp.GetBitmap(&bm); //创建临时的内存DC对象 CDC dcMem;
dcMem.CreateCompatibleDC(GetDC());
CBitmap *poldBitmap=(CBitmap*)dcMem.SelectObject(hbmp); CRect lRect;
pStaic->GetClientRect(&lRect); lRect.NormalizeRect();
//显示位图
pStaic->GetDC()->StretchBlt(lRect.left ,lRect.top ,lRect.Width(),lRect.Height(),
&dcMem,0 ,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
dcMem.SelectObject(&poldBitmap);
pStaic->ReleaseDC(&dcMem);
}
//打开关键图
void CImageRetrievalDlg::OnOpenImage() {
CFileOpen fileOpenDlg(TRUE);
if (fileOpenDlg.DoModal () != IDOK) return; //使菜单可用
CMenu* mmenu = GetMenu();
mmenu->EnableMenuItem(ID_START_RETRIEVAL, 0);
mmenu->EnableMenuItem(ID_STOP_RETRIEVAL, 0 ); mmenu->EnableMenuItem(ID_SHOW_IM, 0 ); mmenu->EnableMenuItem(ID_SHOW_IM2, 0 ); mmenu->EnableMenuItem(ID_SHOW_INFO, 0 );
// 画格子
CWnd* pWnd = GetDlgItem(IDC_VIEW1); CDC* pDC = pWnd->GetDC(); pWnd->Invalidate(); pWnd->UpdateWindow();
CPen* pPenRed = new CPen;
pPenRed->CreatePen(PS_SOLID, 1, RGB(255,0,0)); CPen* pOldPen = pDC->SelectObject(pPenRed);
/* pDC->MoveTo(1,1); //PictureBox 宽194高172
}
pDC->LineTo(1, 172); pDC->MoveTo(1,86); pDC->LineTo(211,86); pDC->MoveTo(97,1); pDC->LineTo(97,190); pDC->MoveTo(48,1); pDC->LineTo(48,190); pDC->MoveTo(145,1); pDC->LineTo(145,190); pDC->MoveTo(1,43); pDC->LineTo(211,43); pDC->MoveTo(1,129); pDC->LineTo(211,129);*/ //取得文件路径
POSITION pos = fileOpenDlg.GetStartPosition(); strfile = fileOpenDlg.GetNextPathName(pos); ShowPic(strfile,IDC_VIEW1);
//选择图像库目录
void CImageRetrievalDlg::OnMutiImageIndb() {
CString m_strPath; tempi=0;
//打开通用对话框 BROWSEINFO browse;