如何将GLCM的C ++实现转换为Java?

我从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(img.at(i,j),img.at(i,j+1))=gl.at(img.at(i,j),img.at(i,j+1))+1; // normalizing glcm matrix for parameter determination gl=gl+gl.t(); gl=gl/sum(gl)[0]; 

上面的代码是用C ++编写的。 我需要将其转换为Java但我仍然坚持这一行:

 gl.at(img.at(i,j),img.at(i,j+1))=gl.at(img.at‌​(i,j),img.at(‌​i,j+1))+1; 

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

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

 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中提取它们的Haralickfunction,例如GLCM2 , JFeatureLib等。