资源简介
利用opencV和C语言编写,利用纹理特征比较两幅图像的相似度
代码片段和文件信息
// CompareImg1.cpp : 定义控制台应用程序的入口点。
//
/*2012-3-7 功能:比较两幅图的纹理特征,从而判断两幅图像的相似度*/
#include “stdafx.h“
#include “cv.h“
#include “highgui.h“
#include “cxcore.h“
int GetTexturePara(CvMat* paraMatri[4]double *texturePara);//
double GetVar(double ar[4]);//求纹理参数的方差
double GetMean(double ar[4]);//求纹理参数的均值
int GetGLCM(CvMat * ImgMatdouble* texturePara);//由共生矩阵提取各个纹理参数,
//并通过GetTexturePara函数调用GetVar和GetMean函数计算各个参数的均值和方差
double comparePara(double* textureArray1double* textureArray2);//比较两个图像矩阵的纹理参数,返回代表相似度的值
double ComputeTextureDiff(IplImage *pImg1IplImage *pImg2);//比较两幅图像的相似度,首先调用GetGLCM函数,然后调用函数comparePara
int main()
{
IplImage *pImg1 = cvLoadImage(“testhigh2.jpg“-1);//加载两幅图像
IplImage *pImg2 = cvLoadImage(“testout3.jpg“-1);
if (!pImg1 && !pImg2 )
{
return -1;
}
double dDiff = 0.0; //两幅图的差别
dDiff = ComputeTextureDiff(pImg1pImg2);
printf(“%f“dDiff);
return 0;
}
double comparePara(double* textureArray1double* textureArray2)
{
double paraDis[16];
double sumPara=0;
double tempmax= 0;
for(int i=0;i<16;i++)
{
tempmax=textureArray1[i] > textureArray2[i] ? textureArray1[i] : textureArray2[i];
if (tempmax==0)
{
tempmax = 1;
}
paraDis[i]= (textureArray1[i]-textureArray2[i])*(textureArray1[i]-textureArray2[i])/(tempmax*tempmax);
sumPara += paraDis[i];
}
sumPara =1- sqrt(sumPara)/16;//相似度 值越大相似度越大
return sumPara;
}
double GetMean(double ar[4])//计算均值,GetGLCM函数中会用到
{
double sumValue=0;
for (int i=0;i<4;i++)
{
sumValue += ar[i];
}
return (sumValue/4.0);
}
double GetVar(double ar[4])//计算方均值,GetGLCM函数中会用到
{
double sumValue=0;
for (int i=0;i<4;i++)
{
sumValue += ar[i]*ar[i];
}
return (sumValue/4.0);
}
int GetTexturePara(CvMat* paraMatri[4]double *texturePara)
{
double tempArray[4]={0};
/*static double texturePara[16]={0};*/
int textureNum=0;
for(int paraNum=0;paraNum<8;paraNum++)
{
for (int i=0;i<4;i++)
{
tempArray[i] = cvGetReal1D(paraMatri[i]paraNum); //矩阵每一列都表示相同纹理参数,只是在不同的角度下而已
}
*(texturePara+textureNum)= GetMean(tempArray);
*(texturePara+textureNum)=GetVar(tempArray) - (*(texturePara+textureNum))* (*(texturePara+textureNum));
textureNum++;
}
return 0;
}
int GetGLCM(CvMat * ImgMatdouble* texturePara)//生成共生矩阵并求出相关的纹理参数
{
int ijmndim;
double minvalue = 0.0maxvalue = 0.0;
int imgWidthimgHeight;
imgWidth = ImgMat->width;
imgHeight = ImgMat->height;
CvMat* ImgMatUchar = cvCreateMat(imgHeightimgWidthCV_8UC1);//图像灰度值范围0-255
cvMinMaxLoc(ImgMat&minvalue&maxvalue);//寻找最大值最小值
//--------------------以下两行代码实现图像归一化,将像素值归一化到0-255
cvConvertScale(ImgMatImgMat1-minvalue);//线性变换转换数组
cvConvertScale(ImgMatImgMat255/(maxvalue-minvalue)0);
cvConvert(ImgMatImgMatUchar);
//--------------------为了提高计算速度,必须对图像进行量化------------
for(j=0;j for(i=0;i for (n=0;n<16;n++)//像素分级
{
uchar temp = CV_MAT_ELEM(*ImgMat
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2012-03-08 08:35 CompareImg1\
目录 0 2012-03-08 08:47 CompareImg1\CompareImg1\
文件 16034816 2012-03-08 08:48 CompareImg1\CompareImg1.ncb
文件 899 2012-03-07 16:39 CompareImg1\CompareImg1.sln
文件 13312 2012-03-08 08:48 CompareImg1\CompareImg1.suo
文件 12686 2012-03-08 08:47 CompareImg1\CompareImg1\CompareImg1.cpp
文件 4582 2012-03-07 16:41 CompareImg1\CompareImg1\CompareImg1.vcproj
文件 1407 2012-03-08 08:48 CompareImg1\CompareImg1\CompareImg1.vcproj.RMTYL.Administrator.user
目录 0 2012-03-08 08:40 CompareImg1\CompareImg1\Debug\
文件 7040 2012-03-08 08:40 CompareImg1\CompareImg1\Debug\BuildLog.htm
文件 663 2012-03-08 08:32 CompareImg1\CompareImg1\Debug\CompareImg1.exe.em
文件 728 2012-03-08 08:32 CompareImg1\CompareImg1\Debug\CompareImg1.exe.em
文件 621 2012-03-08 08:40 CompareImg1\CompareImg1\Debug\CompareImg1.exe.intermediate.manifest
文件 96201 2012-03-08 08:40 CompareImg1\CompareImg1\Debug\CompareImg1.obj
文件 3211264 2012-03-08 08:32 CompareImg1\CompareImg1\Debug\CompareImg1.pch
文件 65 2012-03-08 08:40 CompareImg1\CompareImg1\Debug\mt.dep
文件 12025 2012-03-08 08:32 CompareImg1\CompareImg1\Debug\stdafx.obj
文件 642048 2012-03-08 08:40 CompareImg1\CompareImg1\Debug\vc90.idb
文件 602112 2012-03-08 08:40 CompareImg1\CompareImg1\Debug\vc90.pdb
文件 1207 2012-03-07 16:39 CompareImg1\CompareImg1\ReadMe.txt
文件 216 2012-03-07 16:39 CompareImg1\CompareImg1\stdafx.cpp
文件 233 2012-03-07 16:39 CompareImg1\CompareImg1\stdafx.h
文件 498 2012-03-07 16:39 CompareImg1\CompareImg1\targetver.h
文件 12772 2012-03-07 15:15 CompareImg1\CompareImg1\testhigh2.jpg
文件 7678 2012-03-07 15:15 CompareImg1\CompareImg1\testlow2.jpg
文件 6539 2012-03-07 15:16 CompareImg1\CompareImg1\testout3.jpg
目录 0 2012-03-08 08:34 CompareImg1\Debug\
文件 40448 2012-03-08 08:40 CompareImg1\Debug\CompareImg1.exe
文件 401000 2012-03-08 08:40 CompareImg1\Debug\CompareImg1.ilk
文件 1018880 2012-03-08 08:40 CompareImg1\Debug\CompareImg1.pdb
评论
共有 条评论