检查不同尺寸图像的相似性

时间:2014-12-03 11:02:59

标签: c++ opencv

我有一个视频源,可以为不同的设备(例如:高清电视,平板电脑,智能手机等)生成许多流,每个视频源都必须相互检查以确保相似性。视频流每秒释放50个图像,每20毫秒释放一个图像。

让我们假设img1来自stream1,时间ts1 = 1,img2来自stream2,ts2 = 1,img1.1来自stream1,ts = 2(比ts = 1晚20毫秒),比较结果应该看起来像这样:

比较(img1,img1)= 1相同图像相同尺寸

比较(img1,img2)= 0.9相同图像大小

比较(img1,img1.1)= 0.8相同尺寸的不同图像

理想情况下,这应该是实时完成的,所以在20毫秒内,目标是了解流是否不同步,我已经实现了一些比较方法(它们中没有人适用于这种情况):

1)直方图(SSE和OpenCV cuda),结果比较(img1,img2)〜=比较(img1,img1.1)

2)pnsr(SSE和OCV cuda),结果比较(img1,img2)<比较(img1,img1.1)

3)ssim(SSE和OCV cuda),结果与pnsr相同

由于调整大小插值方法,我可能会得到不好的结果吗?

是否有可能实现满足我的要求,任何想法的比较方法?

1 个答案:

答案 0 :(得分:0)

我担心你遇到了Real Problem(TM)。这不是一件让人轻松的问题。

主要的挑战是你不能进行蛮力比较。高清图像是3 MB或更多,你在谈论O(N * M)比较(在时间和跨流)。

你真正需要的是一个指纹,它对于调整大小但是时变性非常强大。正如你没有意识到的那样(例如,直方图的想法是非常时间稳定的),你没有在这个问题中包含必要的信息。

所以这不是一个C ++问题,真的。您需要了解您的输入。