24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 815  |  回复: 2

eeds136

金虫 (著名写手)

[求助] 灰度梯度共生矩阵VC代码! 已有1人参与

回复此楼

» 猜你喜欢

一切都似那么神奇。。。。
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

justmc

木虫 (小有名气)

不知楼主说的灰度-梯度共生矩阵是什么概念啊?如果是基本的灰度共生矩阵GLCM,我这儿倒有点儿C代码可以送你~
2楼2014-04-03 19:18:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

justmc

木虫 (小有名气)

【答案】应助回帖

这是普通的灰度共生矩阵代码,也是参考网上的,楼主看看有没有帮助。

// 求均值
double GetMean(double m[4])
{
        double nmean=0,sum=0;
        sum = m[0]+m[1]+m[2]+m[3];
        nmean = sum/4;
        return nmean;
}

// 求方差
double GetSdDe(double m[4],double nmean)
{
        int i;
        double stde,sum=0;
        for (i=0;i<4;i++)
        {
                sum+=((m-nmean)*(m-nmean));
        }
        sum/=4;
        stde=sqrt(sum);
        return stde;
}

// 计算灰度共生矩阵
void GetGLCM(Mat mat_double, double glcm[8])
{
        double minvalue=0.0,maxvalue=0.0;
        int nW,nH;
        int j,i,n,m,dim;
        nW = mat_double.cols;
        nH = mat_double.rows;

        // 将图像量化至0-255
        Mat mat_uchar = Mat(nW,nH,CV_8UC1);
        minMaxLoc(mat_double, &minvalue, &maxvalue);
        mat_double.convertTo(mat_uchar, CV_8UC1, 255/(maxvalue-minvalue), -minvalue);

        // 为了减少计算量,将原始图像0-255量化成16级,(0,15)为1,(16,31)为2
        for(i=0;i<nH;i++)
                for(j=0;j<nW;j++)
                        for(n=0;n<16;n++)
                        {
                                uchar temp = mat_uchar.at<uchar>(i,j);
                                if((n*16<=temp)&&(temp<=n*16+15))
                                        mat_uchar.at<uchar>(i,j) = n;
                        }

                        // 计算四个共生矩阵P,取距离为1,角度分别为 0,45,90,135
                        Mat mat_co[4];
                        for (dim=0;dim<4;dim++)
                        {
                                mat_co[dim] = Mat::zeros(16,16,CV_64FC1);
                        }

                        int delta[4][2] = {{0,1}, {-1,1}, {1,0}, {1,1}};
                        int p = 0;
                        int x, y;
                        for (int i = 0; i < nH; i++)
                        {
                                for (int j = 0; j < nW; j++)
                                {
                                        x = mat_uchar.at<uchar>(i,j);
                                        for (p = 0; p < 4; p++)
                                        {
                                                if (j + delta[p][0] < nW && j + delta[p][0] >= 0 && i + delta[p][1] < nH && i + delta[p][1] >= 0)
                                                {
                                                        y = mat_uchar.at<uchar>(i+delta[p][1],j+delta[p][0]);
                                                        mat_co[p].at<double>(x,y) += 1.0;
                                                        mat_co[p].at<double>(y,x) += 1.0;
                                                }
                                        }
                                }
                        }

                        // 归一化共生矩阵
                        Mat temp_mat = Mat(16,16,CV_64FC1);
                        for (dim=0; dim<4; dim++)
                        {
                                Scalar sum_value = sum(mat_co[dim]);
                                temp_mat.setTo(sum_value);
                                divide(mat_co[dim],temp_mat,mat_co[dim]);
                        }

                        // 对共生矩阵计算能量、熵、惯性矩、相关4个纹理参数
                        double energy[4]={0};        //能量
                        double entropy[4]={0};        //熵
                        double inertia[4]={0};        //惯性矩
                        double uX[4]={0};/*相关性中μx*/  double uY[4]={0};/*相关性中μy*/
                        double deltaX[4]={0};/*相关性中σx*/ double deltaY[4]={0};/*相关性中σy*/
                        double corelation[4]={0};        //相关性

                        Scalar temp_energy[4];        //能量
                        Mat mat_energy[4];
                        for (dim=0; dim<4; dim++)
                        {
                                mat_energy[dim] = Mat(16,16,CV_64FC1);
                                multiply(mat_co[dim], mat_co[dim], mat_energy[dim]);
                                temp_energy[dim] = sum(mat_energy[dim]);        //求能量
                                energy[dim] = temp_energy[dim].val[0];
                        }

                        for (dim=0; dim<4; dim++)
                        {
                                for (m=0;m<16;m++)
                                {
                                        for(n=0;n<16;n++)
                                        {
                                                double temp = mat_co[dim].at<double>(m,n);
                                                if (temp!=0)
                                                {
                                                        entropy[dim] = temp*log(temp)+entropy[dim]; //熵
                                                }
                                                inertia[dim] = (m-n)*(m-n)*temp+inertia[dim];  //惯性矩
                                                uX[dim] = n*temp+uX[dim]; //相关性中μx
                                                uY[dim] = n*temp+uY[dim]; //相关性中μy
                                        }
                                }
                        }
                        for (dim=0;dim<4;dim++)
                        {
                                for (m=0;m<16;m++)
                                {
                                        for (n=0;n<16;n++)
                                        {
                                                double temp = mat_co[dim].at<double>(m,n);

                                                deltaX[dim] = (m-uX[dim])*(m-uX[dim])*temp+deltaX[dim]; //相关性中σx
                                                deltaY[dim] = (n-uY[dim])*(n-uY[dim])*temp+deltaY[dim]; //相关性中σy
                                                corelation[dim] = m*n*temp+corelation[dim];  
                                        }
                                }
                                corelation[dim] = (corelation[dim]-uX[dim]*uY[dim])/deltaX[dim]/deltaY[dim]; //相关性   
                        }

                        // 求能量、熵、惯性矩、相关的均值和标准差作为最终8维纹理特征
                        glcm[0] = GetMean(energy);
                        glcm[1] = GetSdDe(energy,glcm[0]);
                        glcm[2] = GetMean(entropy);
                        glcm[3] = GetSdDe(entropy,glcm[2]);
                        glcm[4] = GetMean(inertia);
                        glcm[5] = GetSdDe(inertia,glcm[4]);
                        glcm[6] = GetMean(corelation);
                        glcm[7] = GetSdDe(corelation,glcm[6]);
}
3楼2014-04-03 19:24:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 eeds136 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 315求调剂 +7 小羊小羊_ 2026-04-02 7/350 2026-04-02 17:35 by wxiongid
[考研] 265求调剂 +11 林深温澜 2026-04-01 13/650 2026-04-02 15:42 by 小醋坛子666
[考研] 309求调剂 +8 呆菇不是戴夫 2026-04-02 8/400 2026-04-02 14:30 by oooqiao
[考研] 0856初试324分求调剂 +6 想上学求调 2026-04-01 6/300 2026-04-02 11:42 by 星空星月
[考研] 一志愿北交大材料工程,总分358 +4 cs0106 2026-04-01 4/200 2026-04-02 07:42 by 尚水阁主
[考研] 食品学硕362求调剂 +3 xuanxianxian 2026-04-01 3/150 2026-04-01 21:05 by 啊李999
[考研] 材料与化工(0856)304求B区调剂 +8 邱gl 2026-03-30 16/800 2026-04-01 17:58 by 邱gl
[考研] 086502化学工程342求调剂 +7 阿姨复古不过 2026-03-27 7/350 2026-04-01 16:14 by yanflower7133
[考研] 08工科275求调剂,可跨考。 +5 AaAa7420 2026-03-31 5/250 2026-04-01 15:21 by 159357hjz
[考研] 086000生物与医药 初试274求调剂 +5 小叮当来了 2026-03-30 6/300 2026-04-01 14:25 by mxj1203
[考研] 一志愿哈尔滨工业大学材料与化工方向336分 +13 辰沐5211314 2026-03-26 13/650 2026-03-31 14:37 by 记事本2026
[考研] 本科211生物医学工程085409求调剂339分 +7 里子木yy 2026-03-29 7/350 2026-03-31 14:35 by fmesaito
[考研] 334求调剂 +7 Trying] 2026-03-31 7/350 2026-03-31 12:33 by 无际的草原
[考研] 323分 食品与营养调剂 +3 嘿ooo 2026-03-31 3/150 2026-03-31 09:38 by longlotian
[有机交流] 甲基亚磺磺酸钠和甲基磺酸酯反应机理 10+3 kaobao456 2026-03-29 4/200 2026-03-30 23:16 by nBu锂
[考研] 一志愿华中师范化学332分求调剂 +3 Lyy930824@ 2026-03-29 3/150 2026-03-30 20:15 by DHUSHUAI
[考研] 283求调剂(080500) +14 A child 2026-03-27 14/700 2026-03-30 12:06 by 探123
[考研] 复试调剂 +3 raojunqi0129 2026-03-28 3/150 2026-03-28 15:27 by 落睿可思
[考研] 330一志愿中国海洋大学 化学工程 085602 有读博意愿 求调剂 +3 wywy.. 2026-03-27 4/200 2026-03-28 03:32 by fmesaito
[考研] 272求调剂 +7 脚滑的守法公民 2026-03-27 7/350 2026-03-27 17:23 by laoshidan
信息提示
请填处理意见