• 大小: 5.76MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-08-15
  • 语言: C/C++
  • 标签: 纹理  共生矩阵  

资源简介

利用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.embed.manifest
     文件         728  2012-03-08 08:32  CompareImg1\CompareImg1\Debug\CompareImg1.exe.embed.manifest.res
     文件         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

评论

共有 条评论