是小狐狸啊 2016-07-15 04:46 采纳率: 63.6%
浏览 1158
已采纳

C++ 一道关于共生矩阵的计算问题

/*这是一道用图像的灰度矩阵计算图像对比度的问题,先是将灰度值减少为都分到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;
}
  • 写回答

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时出现报错如何解决