0%

PhotoScan三维重建及坐标转换

对齐图片(投影后)

添加图片

image-20230416114600655

全景图片一张可以投影为若干张普通图片,在PhotoScan中可以将一张全景图片所投影出的图片设置为一个组,对其加以约束,会使得图片对齐效果更好

图片分组

  • 首先选中一组图片,将其添加到一个图片组中

image-20230416115019165

image-20230416115131493

  • 保存后项目文件夹下会有一下红线圈出的内容

image-20230416115256851

进入对应的chunk文件夹下

image-20230416115349659

  • 解压chunk.zip得到doc.xml文件

doc.xml内容如图所示,其中包含了我们预设的group,我们只需要将其他camera也组织成group格式就可以分组成功

image-20230416120430188

  • 现将剩余的camera组织为group格式,并输出到txt中,将txt中的结果复制到doc.xml中替换原来的内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def photoScanNewChunk():
trunk_xml_path = "D:/anbo_my/test.files/0/doc.xml"
new_trunk_xml_path = "D:/anbo_my/test.files/0/group.txt"
tree = ET.parse(trunk_xml_path)
root = tree.getroot()
cameras_s = root.findall("cameras")
for cameras in cameras_s:
camera_s = cameras.findall("camera")
with open(new_trunk_xml_path, "w") as f:
for i in range(int(len(camera_s)/6)):
f.write(' <group id="' + str(i+1) + '" label="Group ' + str(i + 2) + '" type="station">' + '\n')
# 这里的6是每一组的图像数目
for j in range(6):
camera = camera_s[i*6+j]
f.write(' <camera id="' + str(camera.attrib.get("id"))+'" sensor_id="0" label="'+camera.attrib.get("label")+'"/>'+ '\n')
f.write(' </group>'+ '\n')

注意更改id、label和type的值

image-20230416120313547

  • 重新打开项目文件

image-20230416120711094

对齐图片

Workflow→Align Photos

根据需求更改精度之类的东西

image-20230416121056281

如果对齐成功,就会像下面一样只有一个component,而如果对齐失败就会出现多个component这时就需要其他方法去改进优化

image-20230416121220687

对齐图片(全景图片直接处理)

  • 除了按上述将投影后的图片进行对齐及后续处理,还可以直接使用全景图片进行操作

    • 全景图片数量更少(一张全景图片会投影为若干张普通图片),因此处理速率更快

    • 出现多个component的概率更小

    • 但可能也会出现其他问题

  • 由于是全景图片,因此不存在分group的情况,当然也可以将比较靠近的若干图片分为一组

  • 注意导入图片后要有一个步骤告诉软件我们正在使用全景图片
    • Tools→Camera Calibration

image-20230416121932890

  • 其余步骤与之前相似,得到align后的结果