在Java中调整矩阵大小

4
我有一个矩阵double[][],它的维度是任意的,但大于300(可能在一维或两维上)。我想将其缩放到double[300][300]
我的主要方法是对矩阵进行插值并将其提升到double[600][600],然后取四个元素并找到它们的平均值,即元素0,00,11,01,1将是最终300x300矩阵的0,0
我已经在JAVA中找到了插值库,但我无法弄清楚如何使用它。有人能提供一些示例或信息吗?
该库是:http://docs.oracle.com/cd/E17802_01/products/products/java-media/jai/forDevelopers/jai-apidocs/javax/media/jai/Interpolation.html 谢谢。

@TimBiegeleisen 不是的,Tim。我想要实现的这个过程只是更大过程的一小部分。所以,我没有任何代码可以展示到目前为止我做了什么。而且,我也不是在寻求任何解决方案 :) 只是想要一个如何使用Java插值的例子。 - Xxxo
然后编写一个小的测试程序。如果您遇到问题,那么您可以在问题中展示一些代码,以符合Stack Overflow的指南:Minimal, Complete, and Verifiable:http://stackoverflow.com/help/mcve。我们将很乐意提供帮助。 - Andreas
1
听起来你正在寻找这样的东西,我通过谷歌搜索完整的类名找到了它:Java Code Examples for 'javax.media.jai.Interpolation' - Andreas
此外,在提供的链接中没有演示如何单独使用插值类的示例,只有与图像处理类一起使用的示例(如果有人查看网页而不仅仅是提供链接,也可以看到这一点)。 - Xxxo
2
@Kostas,你正在寻找的插值类示例是用于处理图像的。Javadoc说它是一个封装了特定图像插值(重采样)算法的对象。因此,也许你需要寻找更通用的矩阵缩放算法:https://www.google.com/?gws_rd=ssl#q=matrix+scaling+algorithm - alainlompo
显示剩余8条评论
1个回答

1

你可以编写一个简单的方法,将源单元格映射到目标单元格,然后进行平均处理。

public static boolean matrixReduce(double[][] dst, double[][] src) {
    double dstMaxX = dst.length - 1, dstMaxY = dst[0].length - 1;
    double srcMaxX = src.length - 1, srcMaxY = src[0].length - 1;
    int count[][] = new int[dst.length][dst[0].length];

    for (int x = 0; x < src.length; x++) {
        for (int y = 0; y < src[0].length; y++) {
            int xx = (int) Math.round((double) x * dstMaxX / srcMaxX);
            int yy = (int) Math.round((double) y * dstMaxY / srcMaxY);

            dst[xx][yy] += src[x][y];
            count[xx][yy]++;
        }
    }

    for (int x = 0; x < dst.length; x++) {
        for (int y = 0; y < dst[0].length; y++) {
            dst[x][y] /= count[x][y];
        }
    }

    return true;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接