如何在较大的2D阵列中寻找较小的2D阵列的匹配?

时间:2017-05-10 00:36:03

标签: java arrays

我的任务是创建一个图像数据库,它有几种类型的图像对象。每个图像由2D像素阵列组成。我被要求创建此方法: MatchPattern(Image subimage,Image image):此函数返回一个整数,表示子图像重复到图像的次数。

我写的代码如下:

public int MatchPattern(Image subimage, Image image) {
    if(image.getClass().equals(subimage.getClass())){
        int numOfMatches = 0;

        int imgWidth = image.getWidth();
        int imgHeight = image.getHeight();

        int subimgWidth = subimage.getWidth();
        int subimgHeight = subimage.getHeight();

        if (imgWidth < subimgWidth || imgHeight < subimgHeight)
            return 0;
        for (int i = 0; i < imgHeight; i++) {
            for (int j = 0; j < imgWidth; j++) {

                int subHeightIndex = 0;
                int subWidthIndex = 0;

                Pixel imagePix = image.getImg()[i][j];
                Pixel subimgPix = subimage.getImg()[subHeightIndex][subWidthIndex];

                if( (imagePix.compareTo(subimgPix)==0) && ((imgWidth-j)>=subimgWidth) && ((imgHeight-i)>=subimgHeight) ){
                    boolean matchFlag = true;
                    for (int k = 0; k < subimgHeight; k++) {
                        if(matchFlag == false)
                            break;
                        for (int l = 0; l < subimgWidth; l++) {
                            matchFlag = (image.getImg()[i+k][j+l] == subimage.getImg()[k][l]);
                            if (matchFlag == false)
                                break;
                        }
                    }
                    if(matchFlag == true)
                        numOfMatches++;
                }                
            }
        }
    return numOfMatches;   
    }
    return 0;

但是,每当我运行该方法时,它总是返回一个等于0的匹配数。任何人都可以指向正确的方向吗? 提前谢谢。

0 个答案:

没有答案