/*这是一道用图像的灰度矩阵计算图像对比度的问题,先是将灰度值减少为都分到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;
}
C++ 一道关于共生矩阵的计算问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- Valtava 2016-07-15 16:44关注
首先,你的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] ]; } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 想问一下stata17中这段代码哪里有问题呀
- ¥15 flink cdc无法实时同步mysql数据
- ¥100 有人会搭建GPT-J-6B框架吗?有偿
- ¥15 求差集那个函数有问题,有无佬可以解决
- ¥15 【提问】基于Invest的水源涵养
- ¥20 微信网友居然可以通过vx号找到我绑的手机号
- ¥15 寻一个支付宝扫码远程授权登录的软件助手app
- ¥15 解riccati方程组
- ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
- ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决