我从图像中获得了数据。我的意思是配置扫描数据。 (沿一条线拍摄的图像强度值) 我想要的是从另一个图像的行获取数据并将它们进行比较。 我想知道它们是否相似。 比如我得到了:
int data1[N];
int data2[N];
我想比较一下。如果它们不相似,我希望知道这些数据中最长的部分,它们彼此相似。例如,如果我们在从0到N-1的索引处查看它们,可能会发生data1和data2不相似, 但可能在索引100 ... N - 56它们几乎是相同的。 通过相似性我的意思是:如果我们以波浪的形式表示data1和data2, 然后相似性意味着它们的行为几乎相同,但有时可能略有不同。我的意思是波浪的形状几乎相似。
答案 0 :(得分:1)
显然,确切的实现将比我在下面描述的更复杂,但也许它将提供一个起点:
由于您正在谈论图像强度,因此首先将两组原始强度数据标准化可能是合适的。 (这样,你应该能够识别出data1始终是data2值的三分之二的东西。)我可能首先将(例如)100的值分配给源图像的最强部分,并将0分配给最不强烈 - 调整所有其他值以适应该比例。
对数据进行归一化后,下一步可能就像使用一些简单比较(例如Abs(data1[n] - data2[n]) < SomeThreshold
)迭代规范化数组一样简单。每次比较通过时,增加“匹配长度”。如果匹配长度为零,您可能还需要设置“起始索引”变量。当比较失败时,更新“最佳匹配”信息,然后将“长度”计数器重置为零。
我建议您轻松更换比较功能。我不确定,但是如果你想要进行某种类型的图像匹配,如果你不得不使用更复杂的比较机制(例如你可能需要阈值来“漂移”),我不会感到惊讶例如,如果基本图像是相同的,但其中一个已经过后处理,使一侧比原始图像更明亮。)