首页 > 解决方案 > 将 Mat 转换为 EM 的一维浮点数组?

问题描述

我正在尝试将 Python 代码转换为 Java。但是,我无法找到一种方法来创建样本来训练期望最大化,因为它应该是一个具有 2 个值(来自 HSV 颜色空间的 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

我尝试了以下但没有成功,因为结果不是 aMat并且我找不到将其转换回来的方法。

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;
}

有人可以帮我改造垫子吗?

标签: javaandroidopencvmatexpectation-maximization

解决方案


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);
}

推荐阅读