Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在另一个二维阵列中查找一个二维阵列的所有引用_Javascript_Image Processing - Fatal编程技术网

Javascript 在另一个二维阵列中查找一个二维阵列的所有引用

Javascript 在另一个二维阵列中查找一个二维阵列的所有引用,javascript,image-processing,Javascript,Image Processing,在JavaScript中,我试图找到这个2D整数数组的所有匹配坐标: 在该二维整数数组中,计算重叠子数组: 每个图像表示一个2D JavaScript整数数组,黑色像素对应于1,黄色像素对应于0,但我以这种方式描述数组,以便它们更易于可视化 那么如何在数组中找到数组的所有匹配项呢 以下是我试图实现的功能: findAllMatchesOfOne2DArrayInsideAnother2DArray(containedArray, containingArray){ //find al

在JavaScript中,我试图找到这个2D整数数组的所有匹配坐标:

在该二维整数数组中,计算重叠子数组:

每个图像表示一个2D JavaScript整数数组,黑色像素对应于
1
,黄色像素对应于
0
,但我以这种方式描述数组,以便它们更易于可视化

那么如何在数组中找到数组的所有匹配项呢

以下是我试图实现的功能:

findAllMatchesOfOne2DArrayInsideAnother2DArray(containedArray, containingArray){
    //find all matching coordinates of containedArray inside containingArray, and return a 2D array of coordinates
}
获取任意给定二维数组在另一个二维数组中的所有发生次数。假设所有子阵列具有相同的维度(与
[[1,0,0],[1,0]]]
不同)

var x=[[0,1,0,0,0,0,0],
[1,1,1,0,0,1,0],
[0,1,0,0,1,1,1],
[0,0,0,0,0,1,0],
[0,0,1,0,0,0,0],
[0,1,1,1,0,0,0],
[0,0,1,0,0,0,0]];
变量y=[[0,1,0],[1,1,1],[0,1,0];
var-res=[];
对于(变量i=0;i

数组
res
将包含每个匹配的左上角的“坐标”。我相信你会发现性能更好的算法,但这一个似乎有效:)

这不是“在数组中查找数组”的问题,这是一个图像处理问题。我建议您编辑/重新标记您的问题以表明这一点。如果有一个更简单的解决方案,也可以说你需要它的目的是什么。@Patashu我试图在另一个图像中找到一个图像的所有匹配项,但每个图像中的每个像素都由一个整数表示。所以我试图在另一个2D图像数组中找到一个整数2D整数数组的所有匹配项。2D数组中没有子数组,子数组也不能像您所示那样重叠。您根本不是在寻找子阵列,而是在寻找5个点,而不是一行中的中间3个点,它们是相互远离的几个元素:宽度+/-1和高度+/-1…@dandavis为什么将二维阵列中的矩形区域称为“子阵列”是不正确的?在尝试回答之前,这是tilemap的表示吗?我能说一个单一的十字架类似于[0,1,0,1,1,1,0,1,0]吗?如果是瓷砖贴图,你怎么能有重叠的瓷砖?@Anderson Green:谢谢你添加了小提琴!
var x = [[0,1,0,0,0,0,0],
        [1,1,1,0,0,1,0],
        [0,1,0,0,1,1,1],
        [0,0,0,0,0,1,0],
        [0,0,1,0,0,0,0],
        [0,1,1,1,0,0,0],
        [0,0,1,0,0,0,0]];

var y = [[0,1,0],[1,1,1],[0,1,0]];

var res = [];
for (var i = 0; i < x.length - y.length + 1; i++) {
    for (var k = 0; k < x[0].length - y[0].length + 1; k++) {
        var count = 0;
        for (var l = 0; l < y.length; l++) {
             for (var m = 0; m < y[l].length; m++) {
                count += Math.abs(y[l][m] - x[i + l][k + m]);
            }       
        }
        if (count === 0) {
            res.push([i, k]);
        }

    }
}