然后,我有一个大的候选图像集,我需要确定哪一个最有可能包含该对象,例如:
所以我需要为每个图像生成一个分数,其中最高分对应于最可能包含目标对象的图像.现在,在这种情况下,我有以下条件/约束来处理/周围:
1)我可以在不同的角度获得多个样本图像.
2)样本图像可能与候选图像处于不同的分辨率,角度和距离.
3)有很多候选图像(> 10,000),因此它必须相当快.
4)我愿意为速度牺牲一些精度,所以如果它意味着我们必须搜索前100名而不是前10名,这很好,可以手动完成.
5)我可以手动操作样本图像,例如概述我想要检测的对象;候选图像不能手动操作,因为太多了.
6)我根本没有OpenCV或计算机视觉的真实背景,所以我从头开始.
我最初的想法是首先在样本图像中围绕对象绘制粗略轮廓.然后,我可以识别候选图像中的对象和角落的角落.我可以分析每个角落周围的像素,看它们是否看起来相似,然后按每个角落的最大相似度得分的总和进行排名.我也不确定如何量化类似的像素.我想只是他们的RGB值的欧几里德距离?
问题在于它忽略了对象的中心.在上面的例子中,如果耳环的角落都在金框附近,那么它就不会考虑耳环内的红色,绿色和蓝色宝石.我想我可以通过查看所有角点并通过沿着它们之间的线采样某些点来确定相似性来改善这一点.
所以我有几个问题:
A)这种思路一般是否有意义或是否有我遗漏的东西?
B)我应该调查OpenCV的哪些特定算法?我知道有多个角点检测算法,但我只需要一个,如果差异都在边缘上进行优化,那么我最好用.
C)使用算法的任何示例代码有助于我的理解?
我的语言选择是Python或C#.
解决方法
当然,这是一个非常高级别的解释.魔鬼在细节中,对于那些你应该阅读一些文章.从David Lowe开始Distinctive image features from scale-invariant keypoints,然后阅读有关SURF的论文.
另外,请考虑将此问题移至Signal and Image Processing Stack Exchange