C# 一种在另一幅有噪声图像中检测图像的算法

C# 一种在另一幅有噪声图像中检测图像的算法,c#,.net,algorithm,ocr,detection,C#,.net,Algorithm,Ocr,Detection,我正在搜索最好的库来搜索两个不同图像中的相同区域,所有图像都用JPEG压缩,并且有很多噪声。我很难找到一个。问题是如果你放大一个jpeg,你会看到它看起来像莫奈,我的意思是,噪声包含一个调色板,与原始图像没有直接的联系。因此,我需要找到“最相似的数组”,而不是在图像中搜索相同的数组 这些图像来自谷歌地图类似网站上的随机截图,并且这些图像不能采用jpeg以外的其他格式 我尝试了很多手动方式 我的方法之一是: 将我的两个图像转换为较小的图像 在4bpp图像或更少颜色中更改它们 拍摄图像1的一小部分

我正在搜索最好的库来搜索两个不同图像中的相同区域,所有图像都用JPEG压缩,并且有很多噪声。我很难找到一个。问题是如果你放大一个jpeg,你会看到它看起来像莫奈,我的意思是,噪声包含一个调色板,与原始图像没有直接的联系。因此,我需要找到“最相似的数组”,而不是在图像中搜索相同的数组

这些图像来自谷歌地图类似网站上的随机截图,并且这些图像不能采用jpeg以外的其他格式

我尝试了很多手动方式

我的方法之一是:

  • 将我的两个图像转换为较小的图像
  • 在4bpp图像或更少颜色中更改它们
  • 拍摄图像1的一小部分
  • 正在搜索图像2中图像1裁剪部分的字节[]数组版本
  • 不是搜索相同的,而是搜索相似的匹配项

    这个算法很有效,但我在一维数组中做所有事情,而且速度非常慢

    是否存在直接执行此算法的现有库

    我的算法是:

        // Where SRC is the bigger image in which I search
        // Offset is where in my small image I start to search
        // Len is how long is my searched array
        // Size is the size of the bigger image in which I'm searching.
        // private Point simpleSearch(byte[] src, int offset, int len, byte[] search, Size size)
        {
            byte[] ddd = new byte[len];
            Array.Copy(search, offset, ddd, 0, len);
            int lowest = 100000000;
            int locmatch = 0;
            for (int i = 0; i < src.Length - len; i++)
            {
                int thed = 0;
                for (int a = 0; a < len; a++)
                {
                    int diff = Math.Abs(src[i + a] - ddd[a]);
                    thed += diff;
                }
    
                thed = thed / len;
                if (thed < lowest)
                {
                    lowest = thed;
                    locmatch = i-len;
                }
            }
    
            int yy = (locmatch / size.Width);
            int xx = locmatch - (yy * size.Width);
            Point p = new Point(xx, yy);
            return p;
        }
    
    //其中SRC是我搜索的较大图像
    //偏移量是我在小图像中开始搜索的位置
    //Len是我搜索的数组有多长
    //Size是我正在搜索的较大图像的大小。
    //专用点simpleSearch(字节[]src,整数偏移量,整数长度,字节[]搜索,大小)
    {
    字节[]ddd=新字节[len];
    数组.Copy(搜索、偏移、ddd、0、len);
    int最低=100000000;
    int locmatch=0;
    对于(int i=0;i
    是的,相关或光谱特征是判断两个图像区域有多相似的方法。但我认为这里真正需要的是一种算法,能够有效地搜索重叠区域

    是计算机视觉中一个定义明确的问题,它试图找出图像的哪些部分对应于另一图像的哪些部分。有两种基本的算法


    还有一种方法将复杂性降低到对数级

    那么平移/旋转/缩放不变性呢?对不起,我在我的开发者小泡泡里。这些是在类似谷歌地图的地图上随机拍摄的截图,所以平移不变,旋转不变,比例不变。二维互相关?我认为甚至可以用二维FFT加速。哇,非常好的建议。非常感谢。如果你能把它作为一个答案,我会接受它,因为我明白你的意思。无论如何,我知道所有其他答案都是关于emgucv的。非常感谢你与算法的直接链接。我在考虑类似于四叉树算法的东西。你从一个非常小的图像开始,然后在每一步,放大更相似的图像。有了你的回答,我应该做一些有效的事情。