检测另一幅图像中带有一些噪声的图像的算法
Posted
技术标签:
【中文标题】检测另一幅图像中带有一些噪声的图像的算法【英文标题】:Algorithm to detect an image in another image with some noise 【发布时间】:2012-05-08 12:26:12 【问题描述】:我正在寻找最好的库来搜索两个不同图像中的相同区域,所有图像都以 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;
【问题讨论】:
平移/旋转/缩放不变性怎么样? 对不起,我在我的开发者小泡泡里。这些是在类似于 google 地图的地图上随机截取的屏幕截图,因此平移变化、旋转不变、比例不变。 二维互相关?我认为甚至可以使用 2-D FFT 来加速。 哇,非常好的建议。谢谢你。如果你能把它作为答案,我会接受它,因为我明白你的意思。 无论如何,我知道所有其他答案都是关于 EmguCV 【参考方案1】:是的,相关性或光谱特征是判断两个图像区域相似程度的方法。但我认为您在这里真正想要的是一种有效搜索重叠区域的算法。
Correspondence problem 是计算机视觉中一个定义明确的问题,它试图找出图像的哪些部分对应于另一个图像的哪些部分。有基于RANSAC 的算法。
还有a quad-tree algorithm 将复杂性降低到对数顺序。
【讨论】:
非常感谢算法的直接链接。我在考虑类似于四叉树算法的东西。您从一个非常小的图像开始,然后在每一步放大更相似的图像。有了你的回答,我应该做一些有效的事情。以上是关于检测另一幅图像中带有一些噪声的图像的算法的主要内容,如果未能解决你的问题,请参考以下文章