java - 将 Mat 转换为 EM 的一维 float 组?

标签 java android opencv mat expectation-maximization

我正在尝试将 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/

相关文章:

java - 整数 == int 在 java 中允许

java - Android 选项卡式 View 在触摸之前不会更新

安卓 OpenCV : AddWeighted function implementation in C++

android firebase实时数据库问题(回收器 View ,onclick按钮,删除)

python - cv2 videoCapture 没有属性

python - 从圆形边框内提取文本

c# - OpencvSharp LbgrtoLab

java - 如何添加请求 URI 的上下文路径?

java - java是否将字符串定义为空终止?

android - 我应该为哪个版本的 Android 开发?