分类: C/C++
2018-08-04 11:25:41
环境PC机, 对比数据:img1/small_7868_1.jpg 与 test/0.jpg ,两张图片是对一同一页书进行拍照获得,两张角度不一样,大小也不一样。
SIFT默认参数
const Ptr
const Ptr
matcher = cv::FlannBasedMatcher(indexParams, searchParams);
不降维 未剔误匹配点 RANSAC之后的匹配点
67 58
列降维之后 未剔误匹配点 RANSAC之后的匹配点
9 80 31
15 55 39
21 66 46
27 68 50
32 68 55
SIFT降维之后,维度越低真实匹配点就越少。
SURF
const Ptr
const Ptr
matcher = cv::FlannBasedMatcher(indexParams, searchParams);
不降维 未剔误匹配点 RANSAC之后的匹配点
49 28
列降维之后 未剔误匹配点 RANSAC之后的匹配点
9 108 19
15 76 28
21 59 27
27 55 29
32 47 27
比SIFT速度快,但是匹配点数差一些, PCA处理的数据对结果影响不大,当15列时与默认的非PCA处理的效果差不多。
另外如果在SURF::create()参数bool upright=false改成true会加快速度,但是它是去掉了特征点的方向了,所以旋转后的图片匹配很差。
ORB, cv::FlannBasedMatcher matcher = cv::FlannBasedMatcher(cv::makePtr
默认不经过PCA处理情况:
nfeatures 未剔误匹配点时 RANSAC后match
500 16 11
550 15 11
600 19 14
650 21 18
700 24 17
750 21 12
800 20 17
850 21 15
900 25 17
950 23 20
1000 20 16
PCA后如下表:
使用ORB, cv::FlannBasedMatcher matcher = cv::FlannBasedMatcher(cv::makePtr
会发现PCA之后只有为32列的时候匹配才准确,其他的要么没有匹配,要么就是匹配错误。也就是PCA后再用Lsh效果很差。
500 9 17 5
500 15 2 0
500 21 0 0
500 27 1 0
500 32 10 9
550 9 10 4
550 15 1 0
550 21 1 0
550 27 0 0
550 32 11 9
600 9 10 4
600 15 0 0
600 21 1 0
600 27 0 0
600 32 14 11
650 9 18 4
650 15 1 0
650 21 0 0
650 27 0 0
650 32 18 14
700 9 17 4
700 15 5 0
700 21 1 0
700 27 0 0
700 32 19 15
750 9 12 4
750 15 3 0
750 21 0 0
750 27 0 0
750 32 18 13
800 9 8 4
800 15 5 0
800 21 0 0
800 27 0 0
800 32 17 16
850 9 22 5
850 15 0 0
850 21 1 0
850 27 0 0
850 32 16 12
900 9 10 5
900 15 3 0
900 21 2 0
900 27 0 0
900 32 14 13
950 9 23 5
950 15 2 0
950 21 1 0
950 27 0 0
950 32 16 15
1000 9 24 5
1000 15 3 0
1000 21 0 0
1000 27 1 0
1000 32 18 14
Kdtree来查找匹配点时, 1000以下的匹配点不靠谱,使用PCA必须大于1000, 不然虽然有match但是其实是不相关的点, 1000到2000之间虽然数量大但是匹配点却也不多,大多只有个位数。
nfeatures cols 未调RANSAC RANSAC后match(ORB时这一列数据很多也是误匹配点)
500 9 17 5
500 15 7 4
500 21 7 4
500 27 5 0
500 32 4 4
550 9 19 5
550 15 8 4
550 21 8 4
550 27 6 4
550 32 5 0
600 9 18 5
600 15 9 4
600 21 9 5
600 27 5 4
600 32 5 4
650 9 24 5
650 15 11 4
650 21 8 4
650 27 6 4
650 32 5 0
700 9 26 5
700 15 12 4
700 21 7 4
700 27 6 4
700 32 5 0
750 9 29 5
750 15 17 5
750 21 9 4
750 27 8 4
750 32 8 4
800 9 36 6
800 15 16 5
800 21 12 4
800 27 7 4
800 32 6 4
850 9 44 6
850 15 14 5
850 21 12 4
850 27 8 4
850 32 6 4
900 9 44 6
900 15 16 5
900 21 13 5
900 27 8 4
900 32 7 4
950 9 39 6
950 15 18 6
950 21 15 6
950 27 9 5
950 32 8 5
1000 9 39 7
1000 15 18 6
1000 21 14 6
1000 27 10 5
1000 32 8 4
1050 9 39 6
1050 15 20 6
1050 21 15 6
1050 27 9 4
1050 32 8 4
1100 9 45 6
1100 15 18 6
1100 21 13 6
1100 27 9 4
1100 32 9 4
1150 9 46 7
1150 15 19 5
1150 21 18 6
1150 27 9 4
1150 32 7 4
1200 9 49 9
1200 15 18 6
1200 21 15 5
1200 27 8 4
1200 32 7 4
1250 9 53 9
1250 15 18 6
1250 21 14 5
1250 27 7 4
1250 32 6 4
1300 9 50 7
1300 15 16 5
1300 21 16 4
1300 27 7 4
1300 32 6 4
1350 9 49 8
1350 15 19 6
1350 21 12 5
1350 27 8 5
1350 32 8 4
1400 9 52 7
1400 15 21 6
1400 21 16 6
1400 27 7 5
1400 32 7 4
1450 9 48 8
1450 15 24 7
1450 21 17 6
1450 27 7 5
1450 32 8 5
1500 9 49 7
1500 15 22 8
1500 21 14 6
1500 27 8 5
1500 32 9 5
1550 9 45 7
1550 15 23 8
1550 21 15 6
1550 27 8 5
1550 32 8 4
1600 9 49 9
1600 15 24 9
1600 21 12 5
1600 27 9 5
1600 32 11 8
1650 9 49 7
1650 15 26 10
1650 21 15 7
1650 27 10 6
1650 32 7 5
1700 9 55 7
1700 15 27 11
1700 21 19 8
1700 27 10 6
1700 32 13 9
1750 9 56 9
1750 15 31 12
1750 21 18 9
1750 27 10 6
1750 32 12 7
1800 9 61 10
1800 15 24 8
1800 21 20 9
1800 27 11 6
1800 32 9 6
1850 9 61 8
1850 15 25 9
1850 21 20 8
1850 27 10 7
1850 32 15 10
1900 9 57 8
1900 15 23 9
1900 21 19 8
1900 27 10 6
1900 32 12 8
1950 9 61 8
1950 15 27 10
1950 21 19 9
1950 27 11 6
1950 32 13 8
2000 9 58 9
2000 15 23 10
2000 21 18 8
2000 27 10 6
2000 32 8 5
试过一种极端情况从一张图片裁剪一部分出来与原图匹配时,正常的不经过PCA处理,match大小为130左右,加了PCA处理,匹配数会下降很多变成20多
所以ORB特征点经过PCA处理后匹配效果差很多。
作者:帅得不敢出门