/*这是一道用图像的灰度矩阵计算图像对比度的问题,先是将灰度值减少为都分到4级,然后计算其灰度共生矩阵,最后根据计算公式算得其对比度。我的问题出在了计算共生矩阵上。程序是可以运行的,但共生矩阵的结果是错的···这里我选择了行距为0,列距为1来计算灰度共生矩阵,灰度共生矩阵大小为4*4,每个元素为转换后的矩阵相邻两个元素在整个矩阵中出现的次数。也就是说,灰度共生矩阵中的元素b[m][n]为转换后的矩阵中m,n为相邻元素(m与n行距为0,列距为1)在整个矩阵中出现的次数。大概就是这样,但我的矩阵b的程序是错的。。。不知道怎么改。。恳请大神指点,感激不尽!*/
//计算图像对比度
int main(int argc, char* argv[])
{
int a[7][7]={{2,6,10,14,2,6,10},
{6,10,14,2,6,10,14},
{10,14,2,6,10,14,2},
{14,2,6,10,14,2,6},
{2,6,10,14,2,6,10},
{6,10,14,2,6,10,14},
{10,14,2,6,10,14,2}};
int i,j,m,n,count,contrast,b[4][4];
for(i=0;i<7;i++)
{
for(j=0;j<7;j++)
a[i][j]=a[i][j]/4;
}
cout<<"将灰度级减少到4级后的图像为:"<<endl;
for(i=0;i<7;i++)
{
for(j=0;j<7;j++)
{
cout<<a[i][j]<<"\t";
}
cout<<endl;
}
//求共生矩阵,这里计算的是列距为1,行距为0的共生矩阵
for(i=0;i<7;i++)
{
for(j=0;j<7;j++,n++)
{
for(m=0;m<4;m++)
{
for(n=0;n<4;n++)
{
if((a[i][j]==m)&&(a[i][j+1]==n))
count++;
b[m][n]=count;
}
}
}
}
cout<<"输出a=1,b=0的共生矩阵为:"<<endl;
for(m=0;m<4;m++)
{
for(n=0;n<4;n++)
{
cout<<b[m][n]<<"\t";
}
cout<<endl;
}
//计算对比度
for(m=0;m<4;m++)
{
for(n=0;n<4;n++)
{
b[m][n]=(m-n)*(m-n)*b[m][n];
}
}
for(m=0;m<4;m++)
{
for(n=0;n<4;n++)
{
contrast+=b[i][j];
}
}
cout<<"这幅图像的对比度为:"<<contrast;
system("pause");
return 0;
}
首先,你的count和contrast没初始化吧,没初始化你怎么能直接用=。=
然后,你计算共生矩阵的地方什么逻辑?没太看懂,n还是在内外曾循环都叠加。。
按说只要把b[4][4]初始化为全0,一个遍历不就行了么?就像下面这样
//这里假设你的b已经初始化了: int b[4][4] = {0,}
for (i=0; i!=7;++i) {
for(j=1, j!=7; ++j) {
++b[ a[i][j-1] ][ a[i][j] ];
}
}