代码之家  ›  专栏  ›  技术社区  ›  Tarcisiofl

将Mat转换为EM的一维浮点阵列?

  •  0
  • Tarcisiofl  · 技术社区  · 5 年前

    我正在尝试将Python代码转换为Java。但是,我无法找到一种方法来创建样本来训练期望最大化,因为它应该是一个具有2个值(来自HSV颜色空间的S和V)的单通道矩阵,如下所示:

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

    有人能帮我把垫子换一下吗?

    0 回复  |  直到 5 年前
        1
  •  0
  •   Joe Coder    5 年前
    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);
    }