配置文件
*.yaml
每次对应不同的相机或者其他设备,而导致的参数不同,如相机内参等。为了防止每次都要输入到程序中,可将参数整合到配置文件中去,每次修改对应配置文件即可。
配置文件的开头为 %YAML:1.0
,注意需要一个字符的空格在%
前,否则CLion会报错。
金字塔分配特征点
金字塔的设计是为了仿真人眼近大远小,采样中的上、下分别对应图片尺寸的扩大和缩小。因此下采样金字塔就是图像越来越小(对应于原图来说)。
参考https://blog.csdn.net/xbcreal/article/details/52629465
通过不同层的面积关系来分配特征点,面积越小,分配的越少。
假设第0层图像的宽为
W
W
W ,长为
L
L
L,缩放因子为
s
(
0
<
s
<
1
)
s(0<s<1)
s(0<s<1),整个金字塔的面积为
S
=
L
×
W
×
[
s
2
]
0
+
L
×
W
×
[
s
2
]
1
+
⋯
+
L
×
W
×
[
s
2
]
n
−
1
=
L
×
W
⏟
C
×
1
−
[
s
2
]
n
1
−
[
s
2
]
=
C
1
−
[
s
2
]
n
1
−
[
s
2
]
S=L\times W\times [s^2]^0+L\times W\times [s^2]^1+\cdots+ L\times W\times [s^2]^{n-1}\\=\underbrace{L\times W}_C\times\frac{1-[s^2]^n}{1-[s^2]}=C\frac{1-[s^2]^n}{1-[s^2]}
S=L×W×[s2]0+L×W×[s2]1+⋯+L×W×[s2]n−1=C
L×W×1−[s2]1−[s2]n=C1−[s2]1−[s2]n
那么单位面积特征点数量为
N
a
v
g
=
N
C
=
N
C
1
−
[
s
2
]
n
1
−
[
s
2
]
=
N
{
1
−
[
s
2
]
}
C
{
1
−
[
s
2
]
n
}
Navg=\frac{N}{C}=\frac{N}{C\frac{1-[s^2]^n}{1-[s^2]}}=\frac{N\{1-[s^2]\}}{C\{1-[s^2]^n\}}
Navg=CN=C1−[s2]1−[s2]nN=C{1−[s2]n}N{1−[s2]}
那么第0层应分配的特征点数量为
N
0
=
N
{
1
−
[
s
2
]
}
{
1
−
[
s
2
]
n
}
⋅
[
s
2
]
0
N_0=\frac{N\{1-[s^2]\}}{\{1-[s^2]^n\}}\cdot[s^2]^0
N0={1−[s2]n}N{1−[s2]}⋅[s2]0
则第
α
\alpha
α 层应该分配的特征点数量为
N
α
=
N
{
1
−
[
s
2
]
}
{
1
−
[
s
2
]
n
}
⋅
[
s
2
]
α
N_\alpha=\frac{N\{1-[s^2]\}}{\{1-[s^2]^n\}}\cdot[s^2]^\alpha
Nα={1−[s2]n}N{1−[s2]}⋅[s2]α
但实际上,opencv里的代码不是按照面积算的,是按照边长来算的。将上述公式里的
[
s
2
]
[s^2]
[s2] 换为
s
s
s。
数据名称对齐
批量修改文件名称(文件名称顺序对应时间戳的顺序)
给文件命名,数字前字符不宜太长,用循环给文件用数字命名时,最好最优如下命名0000,0001,0002,0003
,避免0,1,2,3
,上述两者的区别是前者正常排序,后者排序为字典序0,1,10,11,..,2,20,21...
。假如按照后者排序,解决办法为将文件中的数字筛选出来后再排序。
Excel:F5
可以快速定位 选中该列之后,Ctrl+D
将空白进行填充 Ctrl+Shift+下方向键
可以选中全列,
用Window和Excel:
-
图片和对应时间戳文件
time.txt
-
将图片名称按列顺序导入到Excel中
打开Dos,然后输入指令dir IMAGE_DIR_PATH /b > EXCEL_FILE_PATH
,如dir F:\image_Ms_0 /b > F:\image_Ms_0.csv
-
将时间戳文件
time.txt
导入Excel中, 记得设置单元格格式
->数字
->数值
->小数位数 n
改为与时间戳对应的小数位 不要省略该有的0。如下图,将修改后的复制到B列。再设置小数位,从B列变成C列,使用公式后,还是会出现E列的问题,就是在ren语句中显示时,自动省略小数后0的位。
面对这个问题,由于*.txt
文本上是不会显示此问题的,又可以将CD列合为一起,因此需要用*.txt
过度一下。
将CD列复制到新建文本上,Ctrl+A
全选之后,Ctrl+H
替换,用Ctrl+C
复制来将CD两列中间的空格替换成没有空格,即可完成。完成后复制到上图的空余列,重写ren语句。
将G列整列处理完后,单独复制到新建文本文件中rename.txt
,将其后缀改为.bat
,将其置于对应文件夹内,双击运行即可完成批量对应重命名。(ren是Dos对应的修改名称指令)
对于重命名时,没有采纳开头意见,如下命名,分别提取出数值后,排序方式不对。BC列的公式为TEXT()内的内容。
可以通过对C列的排序将A列对应过来。
合并求和数据
- 将姓名列复制粘贴到新的一列(为什么复制姓名,是要找姓名中重复的一项)
- 假设复制粘贴后的姓名列是H列,选中H列,在数据选项卡中,选择数据工具中的删除重复值,来删除重复姓名
- 在H列后的下一列I列使用公式
=SUMIF(原姓名列,后姓名,原姓名列对应合并求和的数据)
。(公式第一个参数是筛选范围,第二个是比较内容,第三个是范围对应的数值) - 将公式求得I列数据重新复制粘贴到下一列J列(是为了下一步删除原姓名中重复项时,不修改公式求得的数据),因此粘贴选用粘贴值
- 可以将I列整列删除。
- 选中原表所有部分(不包含H列和J列),在数据选项卡中,选择数据工具中的删除重复值,来删除重复姓名及其对应的所有重复信息
- 将J列数据复制到原表中姓名对应的数据一列
- 删除H列 J列即可
对于公式来说,如果使用的不是姓名来筛选,而是身份证号等,需要将公式中的后姓名加上&"*"
,是因为该公式是通过比较前15位,来计算的。加入符号后,可以将其改变为文本格式进行比较。