我正在尝试将 Python 代码转换为 Java。但是,我无法找到一种方法来创建样本来训练期望最大化,因为它应该是一个具有 2 个值(来自 HSV 颜色空间的 S 和 V)的单 channel 矩阵,如下所示:
- 第 0 行:S、V
- 第 1 行:S、V
- 第 2 行:S、V
- 第 3 行:S、V
在 Python 中,我能够执行以下操作:
def convert_to_samples(image, height, width):
samples = []
for y in range(0, height):
for x in range(0, width):
samples.append(image[y, x])
samples = np.float32(np.vstack(samples))
return samples
我尝试了以下操作,但没有成功,因为结果不是 Mat
并且我找不到将其转换回来的方法。
public double[][] convert_to_samples(Mat image) {
double[][] samples = new double[image.height()][];
for(int i = 0; i < image.height(); i++) {
for(int j = 0; j < image.width(); j++) {
samples[i] = image.get(i, j);
}
}
return sortRowWise(samples);
}
private static double[][] sortRowWise(double[][] m) {
for (double[] values : m) Arrays.sort(values);
return m;
}
有人可以帮我改造垫子吗?
最佳答案
public Mat convert_to_samples(Mat image) {
double[][] samples = new double[image.height()][];
for(int i = 0; i < image.height(); i++) {
for(int j = 0; j < image.width(); j++) {
samples[i] = image.get(i, j);
}
}
sortRowWise(samples);
Mat matSamples = new Mat(image.height(), 2, CvType.CV_64FC1);
for (int i = 0; i < image.height(); i++) {
matSamples.put(i, 0, samples[i]);
}
return matSamples;
}
private static void sortRowWise(double[][] m) {
for (double[] values : m) Arrays.sort(values);
}
关于java - 将 Mat 转换为 EM 的一维 float 组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60198763/