资源简介
图像检索源代码 花了极大的利器收集到的!希望对大家有用!!
代码片段和文件信息
#include “stdafx.h“
#include “math.h“
#include “canny.h“
#pragma warning (disable:4244)
// 一维高斯分布函数,用于平滑函数中生成的高斯滤波系数
void CreatGauss(double sigma double **pdKernel int *pnWidowSize)
{
LONG i;
//数组中心点
int nCenter;
//数组中一点到中心点距离
double dDis;
//中间变量
double dValue;
double dSum;
dSum = 0;
// [-3*sigma3*sigma] 以内数据,会覆盖绝大部分滤波系数
*pnWidowSize = 1+ 2*ceil(3*sigma);
nCenter = (*pnWidowSize)/2;
*pdKernel = new double[*pnWidowSize];
//生成高斯数据
for(i=0;i<(*pnWidowSize);i++)
{
dDis = double(i - nCenter);
dValue = exp(-(1/2)*dDis*dDis/(sigma*sigma))/(sqrt(2*3.1415926)*sigma);
(*pdKernel)[i] = dValue;
dSum+=dValue;
}
//归一化
for(i=0;i<(*pnWidowSize);i++)
{
(*pdKernel)[i]/=dSum;
}
}
//用高斯滤波器平滑原图像
void GaussianSmooth(SIZE sz LPBYTE pGray LPBYTE pResult double sigma)
{
LONG x y;
LONG i;
//高斯滤波器长度
int nWindowSize;
//窗口长度
int nLen;
//一维高斯滤波器
double *pdKernel;
//高斯系数与图像数据的点乘
double dDotMul;
//滤波系数总和
double dWeightSum;
double *pdTemp;
pdTemp = new double[sz.cx*sz.cy];
//产生一维高斯数据
CreatGauss(sigma &pdKernel &nWindowSize);
nLen = nWindowSize/2;
//x方向滤波
for(y=0;y {
for(x=0;x {
dDotMul = 0;
dWeightSum = 0;
for(i=(-nLen);i<=nLen;i++)
{
//判断是否在图像内部
if((i+x)>=0 && (i+x) {
dDotMul+=(double)pGray[y*sz.cx+(i+x)] * pdKernel[nLen+i];
dWeightSum += pdKernel[nLen+i];
}
}
pdTemp[y*sz.cx+x] = dDotMul/dWeightSum;
}
}
//y方向滤波
for(x=0; x {
for(y=0; y {
dDotMul = 0;
dWeightSum = 0;
for(i=(-nLen);i<=nLen;i++)
{
if((i+y)>=0 && (i+y)< sz.cy)
{
dDotMul += (double)pdTemp[(y+i)*sz.cx+x]*pdKernel[nLen+i];
dWeightSum += pdKernel[nLen+i];
}
}
pResult[y*sz.cx+x] = (unsigned char)dDotMul/dWeightSum;
}
}
delete []pdKernel;
pdKernel = NULL;
delete []pdTemp;
pdTemp = NULL;
}
// 方向导数求梯度
void Grad(SIZE sz LPBYTE pGrayint *pGradX int *pGradY int *pMag)
{
LONG yx;
//x方向的方向导数
for(y=1;y {
for(x=1;x {
pGradX[y*sz.cx +x] = (int)( pGray[y*sz.cx+x+1]-pGray[y*sz.cx+ x-1] );
}
}
//y方向方向导数
for(x=1;x {
for(y=1;y {
pGradY[y*sz.cx +x] = (int)(pGray[(y+1)*sz.cx +x] - pGray[(y-1)*sz.cx +x]);
}
}
//求梯度
//中间变量
double dSqt1;
double dSqt2;
for(y=0; y {
for(x=0; x {
//二阶范数求梯度
dSqt1 = pGradX[y*sz.cx + x]*pGradX[y*sz.cx + x];
dSqt2 = pGradY[y*sz.cx + x]*pGradY[y*sz.cx + x];
pMag[y*sz.cx+x] = (int)(sqrt(dSqt1+dSqt2)+0.5);
}
}
}
//非最大抑制
void NonmaxSuppress(int *pMag int *pGradX int *pGradY SIZE sz LPBYTE pNSRst)
{
LONG yx;
int nPos;
//梯度分量
int gx;
int gy;
//中间变量
int g1g2g3g4;
double weight;
double dTmpdTmp1dTmp2;
//设置图像边缘为不可能的分界点
for(x=0;x
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 374 2010-05-03 15:45 HUMomoents.h
文件 49004 2010-05-18 22:29 ImageRetrieval.aps
文件 5045 2010-05-18 22:57 ImageRetrieval.clw
文件 5648 2010-05-18 16:03 ImageRetrieval.cpp
文件 6867 2010-05-18 17:02 ImageRetrieval.dsp
文件 553 2010-04-29 18:52 ImageRetrieval.dsw
文件 1543 2010-05-01 21:50 ImageRetrieval.h
文件 443392 2010-05-18 23:06 ImageRetrieval.ncb
文件 69632 2010-05-18 23:06 ImageRetrieval.opt
文件 1637 2010-05-18 22:51 ImageRetrieval.plg
文件 15651 2010-05-18 22:29 ImageRetrieval.rc
文件 893 2010-05-06 14:25 ImageRetrieval.sln
..A..H. 17408 2010-05-06 14:34 ImageRetrieval.suo
文件 14866 2010-05-06 14:25 ImageRetrieval.vcproj
文件 1411 2010-05-06 14:34 ImageRetrieval.vcproj.John-PC.Administrator.user
文件 3898 2010-05-18 16:03 ImageRetrievalDoc.cpp
文件 3384 2010-05-18 21:49 ImageRetrievalDoc.h
文件 4051 2010-05-16 20:36 ImageRetrievalView.cpp
文件 2151 2010-05-01 16:48 ImageRetrievalView.h
文件 208896 2010-05-15 13:52 ImagesDBs.mdb-new
文件 1787 1997-01-30 06:33 JCONFIG.H
文件 12776 1999-05-04 09:18 Jmorecfg.h
文件 14281 2010-05-19 10:06 Jpeg.cpp
文件 2603 2010-05-10 21:39 Jpeg.h
文件 45443 1996-01-13 19:13 JPEGLIB.H
文件 238698 2000-01-31 17:28 Jpeglib2.lib
文件 7341 2010-05-19 10:06 KD_Tree.h
文件 5475 2010-05-17 15:14 KMeans.cpp
文件 1710 2010-05-19 10:07 KMeans.h
文件 44715 2010-05-18 21:59 MainFrm.cpp
............此处省略36个文件信息
- 上一篇:Cortex-M3 反汇编器
- 下一篇:Athreos无线wifi芯片开发文档
评论
共有 条评论