-1

从 GitHub获得了以下代码片段,用于通过 OpenCV 计算灰度共现矩阵 (GLCM):

float energy=0,contrast=0,homogenity=0,IDM=0,entropy=0,mean1=0;
int row=img.rows,col=img.cols;
Mat gl=Mat::zeros(256,256,CV_32FC1);

//creating glcm matrix with 256 levels,radius=1 and in the horizontal direction 
for(int i=0;i<row;i++)
   for(int j=0;j<col-1;j++)
       gl.at<float>(img.at<uchar>(i,j),img.at<uchar>(i,j+1))=gl.at<float>(img.at<uchar>(i,j),img.at<uchar>(i,j+1))+1;   

// normalizing glcm matrix for parameter determination
gl=gl+gl.t();            
gl=gl/sum(gl)[0];

上面的代码是用 C++ 编写的。我需要将其转换为 Java,但我被困在这一行:

gl.at<float>(img.at<uchar>(i,j),img.at<uchar>(i,j+1))=gl.at<‌​float>(img.at<uchar>‌​(i,j),img.at<uchar>(‌​i,j+1))+1; 

有人可以帮我解决这个问题吗?

4

1 回答 1

3

对应偏移“向右一个像素”的图像(类)的256x256对称灰度共生矩阵的计算可以通过OpenCV在Java中实现如下:imgMat

Mat gl = Mat.zeros(256, 256, CvType.CV_64F);
Mat glt = gl.clone();

for (int y = 0; y < img.rows(); y++) {
    for (int x = 0; x < img.cols()-1; x++) {

        int i = (int) img.get(y, x)[0];
        int j = (int) img.get(y, x + 1)[0];

        double[] count = gl.get(i, j);
        count[0]++;
        gl.put(i, j, count);
    }
}

Core.transpose(gl, glt);
Core.add(gl, glt, gl);
Scalar sum = Core.sumElems(gl);
Core.divide(gl, sum, gl);

有很多公开可用的库可以计算 GLCM 并在 Java 中从中提取 Haralick 特征,例如GLCM2JFeatureLib等。

于 2017-04-03T21:03:51.333 回答