面向最大共同前景像素的图像平移算法优化需求
寻求高效的二值图像最优平移匹配算法
我需要一个能高效确定两幅2D二值图像最优平移(仅X、Y轴,无旋转)的算法,目标是找到能让两幅图像最大共同白色像素的平移量(图像背景占比远高于前景)。
示例图像的最优平移量为[-171, 97]。
我已经实现了全像素遍历和聚焦白色像素匹配的平移算法,但耗时仍然很长,以下是当前算法的代码片段(arrayImage仅包含0和1,为二值图像):
public static int[] findBestTranslation(int[][] arrayImage1, int[][] arrayImage2) { int[] bestTranslation = new int[2]; int bestSimilarity = Integer.MIN_VALUE; int img2Length = arrayImage2.length; int img2Width = arrayImage2[0].length; List<int[]> whitePixelsImage1 = findWhitePixels(arrayImage1); List<int[]> whitePixelsImage2 = findWhitePixels(arrayImage2); boolean[][] checkedOffsets = new boolean[img2Length * 2][img2Width * 2]; int i = 0; for (int[] pixel1 : whitePixelsImage1) { System.out.println(i++ + ": " + bestSimilarity); for (int[] pixel2 : whitePixelsImage2) { //calculate translation int xOffset = pixel2[0] - pixel1[0]; int yOffset = pixel2[1] - pixel1[1]; // Check if this offset has been selected before if (checkedOffsets[xOffset + img2Length][yOffset + img2Width]) { continue; } else { checkedOffsets[xOffset + img2Length][yOffset + img2Width] = true; } int similarity = 0; for (int[] pixelNotTranslated : whitePixelsImage1) { int xTranslated = pixelNotTranslated[0] + xOffset; int yTranslated = pixelNotTranslated[1] + yOffset; if (xTranslated >= 0 && xTranslated < img2Length && yTranslated >= 0 && yTranslated < img2Width) { similarity += arrayImage2[xTranslated][yTranslated]; } } if (similarity > bestSimilarity) { bestSimilarity = similarity; bestTranslation[0] = xOffset; bestTranslation[1] = yOffset; } } } return bestTranslation; }
内容的提问来源于stack exchange,提问作者No Grad
相关产品推荐
相关产品推荐

