用一些噪声检测另一图像中的图像的算法

时间:2012-04-27 18:33:51

标签: c# .net algorithm ocr detection

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

这些图片来自googlemap类似网站上的随机屏幕截图,图片不能采用jpeg以外的其他格式。

我尝试了很多手动方式。

我的一个方法是:

  • 在较小的图像中转换我的两个图像
  • 在4bpp图像中更改它们,甚至更少颜色
  • 拍摄图像的一小部分1
  • 在图像2中搜索图像1的裁剪部分的byte []数组版本
  • 不搜索相同的内容,但搜索类似的内容。

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

    现有的库是否会直接执行此算法?

    我的算法是:

        // 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;
        }
    
  • 1 个答案:

    答案 0 :(得分:2)

    Yep相关或频谱特征是判断两个图像区域有多相似的方法。但我认为你真正想要的是有效搜索重叠区域的算法

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

    还有a quad-tree algorithm将复杂性降低到对数顺序。