如何将 GLCM 的 C++ 实现转换为 Java?
How to convert C++ implementation of GLCM into Java?
我得到以下代码片段from 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;
有人可以帮我解决这个问题吗?
图像img
(classMat
)的一个256x256
对称灰度共生矩阵的计算对应一个偏移量"one pixel to the right"可以通过 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);
Java 中有很多公开可用的库来计算 GLCM 并从中提取 Haralick 特征,例如 GLCM2, JFeatureLib 等
我得到以下代码片段from 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;
有人可以帮我解决这个问题吗?
图像img
(classMat
)的一个256x256
对称灰度共生矩阵的计算对应一个偏移量"one pixel to the right"可以通过 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);
Java 中有很多公开可用的库来计算 GLCM 并从中提取 Haralick 特征,例如 GLCM2, JFeatureLib 等