检查矩阵是否包含另一个矩阵

时间:2015-04-20 16:14:17

标签: c

我正在尝试在图像中找到图案(图像的类型并不重要)。

在我的代码中,图像是一个数组,其中任何像素由下式给出:

(x * y.length + y)

目前我无法使代码生效,因为几乎每次都会发现0次出现..

所以这是当前的代码:

int search_pattern(PPMImage * img, PPMImage * patt)
{
    int cont = 0, i, j, k, p, tmp;

    //iterate image
    for(i=0; i <= (img->x - patt->x); i++)
    {
        for(j=0; j <= (img->y - patt->y); j++)
        {
            tmp = 0;
            //iterate pattern
            for(k = 0; k  < patt->x; k++)
            {
                for(p = 0; p < patt->y; p++)
                {
                    PPMPixel * image_pixel = getPixelPPM(i + k, j + p, img);
                    PPMPixel * pattern_pixel = getPixelPPM(k, p, patt);
                    tmp += cmp_pixel(image_pixel, pattern_pixel);
                }
            }
            if(tmp == (patt->x * patt->y))                  
                cont++;
        }
    }

    return cont;
}

我知道错误在迭代本身,因为其他一切都是正确的。

Info:

...->x is the x length of the image
getPixelPPM  returns the pixel in the given place
cmp_pixel returns 1 if the 2 pixels are equal (not important how) and 0 if not

更奇怪的是,如果我尝试使用模式图像作为两个图像,我会出现1次,但如果我尝试使用有效图像,我会得到0。 再次,我100%确定外部因素不是错误。

谢谢。

1 个答案:

答案 0 :(得分:1)

我已经尝试过您的代码,我认为问题是图像类型。

例如,图像类型JPGE是有损压缩。即使将源图像的一部分裁剪为图案图像,相同位置的像素也可能不具有完全相同的值。

我尝试了两种图像类型:JPGE和BMP。我从JPGE获得结果0,从BMP获得结果1。在这两种情况下,我使用相同的图像样本作为源图像(但是不同的图像类型)并将源图像的一部分裁剪成图案图像。

结果显示您无法将图案图像与有效图像匹配,但可能与图案图像匹配可能是由图像类型引起的,这会使图案图像和有效图像出现图像失真并变得不完整所考虑的区域内的相同内容应相同。

希望它有所帮助。