Metashape region.center修改:Python控制处理区域高效指南
1. 先搞清楚 Metashape 的 region 到底是个什么存在对于经常用 Metashape 做摄影测量处理的朋友来说region处理区域这个概念其实很微妙。它不像照片对齐、密集点云生成那样有直观的中间结果更像是一个隐形的边界框悄悄影响着后期一大堆计算的范围。很多人跑了几百个项目可能都没有手动碰过它直到某天发现密集点云只重建出了局部、DEM 边缘缺了一块、或者正射影像的范围完全不符合预期才意识到是这个看不见的盒子在捣鬼。简单说一下我的理解Metashape 里的一个 chunk项目块中包含相机、点云、模型、DEM、正射影像等产物而 region 就是一块用旋转立方体定义的感兴趣区。它的核心作用就是告诉软件你只需要处理这个立方体内部的数据。所有需要消耗算力的操作比如密集点云匹配、DEM 生成、正射影像镶嵌都会优先考虑 region 范围。范围之外的影像即便参与了空三也不一定参与最终产物计算。这个 region 在 Metashape 的 Python API 里对应的是Metashape.Region对象。它有三个核心属性centerRegion 中心点的坐标类型是Metashape.Vector三维向量。sizeRegion 在三个轴向上的尺寸同样是Metashape.Vector三维向量。rotationRegion 的旋转矩阵类型是Metashape.Matrix用来描述这个立方体相对世界坐标系的姿态。把这三点拆开看其实就是一个完整的空间包围盒模型一个中心点加上三个方向上的边长再加上一个旋转姿态。想通过脚本改变region.center本质上就是在操作这个三维包围盒的位置。这里要注意的是region 并不只是简单的 Axis-Aligned Bounding BoxAABB轴对齐包围盒而是一个 Oriented Bounding BoxOBB有向包围盒。也就是说它可以旋转不一定和坐标轴平行。这一点在实际处理倾斜摄影、带状航线时特别重要。你拍了一条沿河道的测线场景是不规则的长条形这时候一个能旋转的 region 才是合理的裁剪边界。但问题也来了Metashape 图形界面里虽然提供了Resize Region和Rotate Region工具可以手动拖动调整区域但手动调整的问题在于不够精确而且难以批量处理。如果是几十上百个 chunk 的项目一个一个手动拖耗时不说还很容易把各 chunk 的 region 搞得各不相同导致后期合并时出现范围不一致的麻烦。所以用 Python 脚本直接改region.center就成了解决这类问题的高效手段。这篇内容就是专门给需要用代码控制 Metashape 处理范围的朋友写的。无论你是做航测内业、三维重建流程自动化还是想把自己手里重复性的区域框选工作交给脚本完成理解region.center的修改方式都能帮你省下大量时间。2. 周边概念不能少center、size、rotation 之间的连带关系很多人在写脚本改center的时候习惯性只复制region.center new_center这一行然后发现运行报错或者改了之后效果不对。原因就在于没有理解center、size、rotation三者的连带关系。2.1 三者共同定义一个完整的空间盒子Region对象在 Metashape 内部被定义为一个由中心点、尺寸、旋转矩阵共同确定的立方体。这就好比我们在三维软件里面创建一个长方体先确定它的位置对应 center再确定长宽高对应 size最后确定它的摆放姿态对应 rotation。光改位置不改姿态和尺寸盒子是被平移了但如果你对这个盒子的期望不仅仅是移动而是重新生成一个符合需求的新边界那就必须把三个属性一起策划好。在代码层面Metashape.Region允许我们分别读写这三个字段import Metashape chunk Metashape.app.document.chunk region chunk.region # 查看当前值 print(Center:, region.center) print(Size:, region.size) print(Rotation:, region.rotation)注意print(region.rotation)出来的是一个 3x3 矩阵看起来可能是这样Matrix([[0.8660254037844387, -0.4999999999999998, 0.0], [0.4999999999999998, 0.8660254037844387, 0.0], [0.0, 0.0, 1.0]])这个矩阵的含义就是旋转 30 度之类的姿态信息。它与你定义的center坐标结合决定了整个盒子的方向。2.2 坐标系统与测量单位另一个容易踩坑的地方是坐标系。Metashape 的 region 属性默认使用 chunk 的局部坐标通常是chunk.transform定义的坐标系而不是地理坐标系比如 WGS84 / UTM。所以在写脚本的时候你要先搞清楚 chunk 当前使用的坐标系是什么。如果你导入的照片带有 POS 信息比如无人机 DJI 的经纬度高程Metashape 在对齐照片后会生成一个chunk.transform.matrix将局部坐标转换到地理坐标。而region.center返回的坐标是在这个转换之后的空间里的坐标单位是米如果当地坐标系用米制但是你打印出来的数值通常和你在Reference面板里看到的地理坐标不一定一致因为还有一个从地理坐标到投影坐标的换算关系。我经常看到的错误就是有人直接在脚本里写region.center Metashape.Vector([经纬度, 经纬度, 高程])结果运行不报错但 region 飞到了十万八千里外。原因就是他使用了经纬度坐标而 region 需要的是投影坐标或 chunk 的本地坐标。解决办法呢要么先把经纬度通过Metashape.CoordinateSystem.transform转成投影坐标要么用照片的chunk.crs先转换crs chunk.crs # 例从 WGS84 经纬度转为本地投影坐标 local_coord crs.project(Metashape.Vector([lon, lat, alt])) region.center local_coord2.3 修改 center 不会重置 rotation这一点从代码层面看region.center的赋值仅仅改变位置。如果当前 region 的 rotation 是歪的那么你平移之后它依然歪着。这在某些场景下没有问题但如果你是想用一个正正经经的、平行于坐标轴的盒子去框住目标区域就得连rotation一起重置。一个常用的做法是把它设置为单位矩阵region.rotation Metashape.Matrix([[1, 0, 0], [0, 1, 0], [0, 0, 1]])同时按需求设定尺寸region.size Metashape.Vector([x_len, y_len, z_len])这时候再设置 center你就拥有一个完全可控的正交包围盒了。我自己的习惯是在批量脚本里永远把这三个值一起处理。哪怕当前只需要移动 center我也会先把 rotation 打了单位阵size 显式设置一遍。原因很简单脚本的可重复性。对于处理几百个 chunk 的情况你不能保证每个 chunk 的 region 初始状态是整齐的统一设置才能保证输出的一致。3. 为什么要改 region.center四个典型场景很多基础教程只会告诉你可以改 center但不会告诉你什么时候需要改。这里我根据自己的项目经验总结几个高频场景帮助大家判断自己是否用得上。3.1 场景一密集点云匹配只需要处理局部区域拍摄一个大型场景时如果照片数量多、重叠度大密集点云匹配是非常消耗算力和时间的操作。有时候我们并不需要全场景的高密度点云只需要某个重点部位比如一栋古建筑的核心区域或者一条道路的关键交叉口。这时候缩小 region 范围并把 center 移到目标位置的中央就能让 Metashape 只对 region 内部进行密集匹配。这样做的好处有两个一是时间节省明显原本跑三四个小时的密集匹配可能缩短到几十分钟二是噪点减少因为远处的、无关的地物不再参与匹配点云质量更干净。当然前提是照片在目标区域内的覆盖足够。3.2 场景二控制 DEM 和正射影像的生成范围Metashape 在生成 DEM 和正射影像时默认的边界通常是取 chunk 内容的包围盒。如果数据中存在一些飞散的、低质量的匹配点或者不想要边缘多余的植被、建筑就可以通过移动 center 同时调整 size 来裁剪输出范围。这里需要提醒一下region 只是处理范围最终导出边界还会受导出对话框中的region选项影响。在 Python 脚本里只要导出的时候 region 设定正确导出的结果就受控。3.3 场景三多 chunk 数据范围对齐在多区块项目中常常会把一个大场景拆成多个 chunk 分别处理。在合并生成最终成果之前我们希望所有 chunk 的处理范围保持一致。如果每个 chunk 的照片覆盖略有偏移默认 region 就会不同。这时候写一个循环脚本将各 chunk 的 center 设成同一个坐标size 设成同样大小就能保证最终合并后的成果范围一致。3.4 场景四分块处理与拼接还有一个比较高级的用法就是完全自定义分块。比如你把一个带状区域分成三块处理第一块 region 中心在 A 点第二块在 B 点第三块在 C 点每块独立生成点云最后在外部软件里拼接。通过脚本修改 center你可以精确控制每一块的位置而不是依赖软件自动计算出来的 region。4. 实操用 Python 改 region.center 的完整步骤下面我想从一个最简洁的示例开始逐步加注释和错误处理帮助你把脚本直接用起来。4.1 环境准备与基本获取首先确保 Metashape 的 Python API 可用。Metashape 自带 Python 3 环境你可以直接在 Tools Python 里打开 Python 控制台也可以用命令行调用 metashape.exe 执行脚本。控制台方式最直观适合调试import Metashape doc Metashape.app.document chunk doc.chunk print(当前 chunk 名称:, chunk.label) print(region.center 当前值:, chunk.region.center)这里要注意如果当前没有打开文档doc.chunk可能会报错。建议加一个判断if doc.chunk is None: raise Exception(当前文档没有 chunk请先打开项目或新建 chunk)4.2 直接修改 center 的两种方式第一种方式是直接给region.center赋值一个新的Vectorchunk.region.center Metashape.Vector([10.0, 20.0, 30.0])这种方式要求你明确知道目标中心在 chunk 坐标系下的坐标。如果你只是想把中心沿某个方向移动一段距离可以先读取当前 center加上偏移量再写回center chunk.region.center offset Metashape.Vector([5.0, -3.0, 0.0]) # 向 x 方向移动5米y方向移动-3米 new_center center offset chunk.region.center new_center这个方法比较直观但要注意如果你的 chunk 有地理参考center 是在投影坐标系的offset 的单位和坐标系的单位一致通常是米。在某些特殊坐标系下可能不是米制比如度分秒这时你加的 offset 就会变得毫无意义。所以我在有地理参考的 chunk 上习惯先把坐标转换到“目标坐标系里的米制投影坐标”再处理。4.3 一个相对稳妥的设置方法连带 size 和 rotation我更推荐这种写法以免后续处理出现意外chunk.region.center Metashape.Vector([100.0, 200.0, 50.0]) chunk.region.size Metashape.Vector([80.0, 60.0, 40.0]) chunk.region.rotation Metashape.Matrix([[1, 0, 0], [0, 1, 0], [0, 0, 1]])因为如果只设置 center而 size 或 rotation 是历史遗留的异常值region 可能变成一个畸形盒子后续处理范围完全不是你预期的。统一设置之后你就是自己画了一个俯视图矩形、高度上严格的盒子。4.4 从地理坐标转换为本地坐标再设置假设你有一份目标中心经纬度坐标例如[116.3913, 39.9075, 50]海拔50米想把 region.center 设到这个位置。那么你需要这样做import Metashape chunk Metashape.app.document.chunk crs chunk.crs if crs is None: # 没有地理坐标系时直接用局部坐标 chunk.region.center Metashape.Vector([116.3913, 39.9075, 50]) else: # 经纬度在高程方向有时需要额外的地理坐标转换 point_geo Metashape.Vector([116.3913, 39.9075, 50]) point_local crs.project(point_geo) chunk.region.center point_local不过要注意crs.project需要输入地理坐标系坐标且要符合该 crs 的坐标系定义。对于 WGS84输入经度、纬度、椭球高或海拔取决于设置。如果高程基准不一致结果会有些偏差。更稳妥的做法是直接从参考面板中读取一个已经验证过的控制点坐标。比如你有一个 GCP 的坐标那么你可以在 Reference panel 选中某一行右键导出坐标再作为中心输入。但那样就失去了自动化的意义。我的做法是先用一个小工具测试一个已知点的转换是否正确再批量使用。4.5 加入保存与提示修改完 region 后如果脚本在大量 chunk 上运行可以给用户一些反馈import Metashape doc Metashape.app.document for chunk in doc.chunks: chunk.region.center Metashape.Vector([x_val, y_val, z_val]) chunk.region.size Metashape.Vector([x_size, y_size, z_size]) chunk.region.rotation Metashape.Matrix([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) print(已修改 chunk:, chunk.label)5. 结合真实坐标的脚本实例某跨场景重建项目的处理这里我想给一个相对完整的脚本例子背景是一个虚构的跨场景重建项目。我们有一条长约 1.2 公里的带状区域分成了 4 个 chunk 处理每个 chunk 的范围和大小都有略微差异。为了保证最终拼接效果我要把四个 chunk 的 region 统一设置为一个矩形范围中心点位于50030025长向 600 米宽向 200 米高度 50 米并且水平放置。脚本如下import Metashape doc Metashape.app.document target_center Metashape.Vector([500.0, 300.0, 25.0]) target_size Metashape.Vector([600.0, 200.0, 50.0]) target_rot Metashape.Matrix([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) for i, chunk in enumerate(doc.chunks): if chunk is None: continue chunk.region.center target_center chunk.region.size target_size chunk.region.rotation target_rot print(Chunk {}: region.center - {}.format(chunk.label, chunk.region.center)) print(Chunk {}: region.size - {}.format(chunk.label, chunk.region.size))这个脚本在控制台直接跑就行。如果要在命令行模式跑注意保存工程路径doc.save(path)因为修改完 region 后如果不保存关掉软件就白干了。血的教训我之前写批量脚本忘掉保存跑完了去关软件第二天打开项目发现 region 根本没变花了半天才想起来是没保存。当然在实际项目中这四个 chunk 可能用的是不同的地理参考坐标系。如果是这样你直接给同一个固定坐标是不对的。解决办法是先把中心坐标从某一个 chunk 的坐标系转换到另一个 chunk 的坐标系。一个典型的做法是# 以第一个 chunk 的坐标系为基准 base_chunk doc.chunks[0] base_crs base_chunk.crs for chunk in doc.chunks: if chunk.crs is None: continue # 将基准坐标转为地理坐标 point_geo base_crs.unproject(target_center) # 再转为当前 chunk 的本地坐标 point_local chunk.crs.project(point_geo) chunk.region.center point_local chunk.region.size target_size # size 是米制长度一般不受投影影响但如果投影变形大则需注意 chunk.region.rotation target_rot这里有个问题target_size在米制坐标系下是长度像 UTM 这种投影在短距离内形变很小可以直接用。如果用的是某些大比例尺地方坐标系可能需要根据比例因子换算但绝大多数无人机摄影测量项目用 UTM/高斯投影都没问题。6. 常见问题排查改完 center 后效果不对怎么办我在实际使用中踩过不少坑这里整理成速查表希望对大家有帮助。现象可能原因解决方法运行脚本不报错但 region.center 没变化没有保存工程文档或修改了错误的 chunk检查doc.chunk和doc.chunks的关系运行后立即doc.save()center 设置成经纬度region 飞到了奇怪的位置把地理坐标直接赋值给了 region.center先用chunk.crs.project()转换为投影坐标显示的单位看起来不像米chunk 使用的是未知坐标系或局部坐标系检查chunk.crs定义确认单位必要时输出chunk.transform.matrix来看整体变换region 变成一个个点或一条线size 设置为 0 或极小值确保 size 的三个分量都大于 0且足够覆盖目标区域region 旋转后裁剪范围不对rotation 矩阵不正确或没有和 size 匹配使用单位矩阵 I 作为 rotation再显式设置 size用图形界面查看 region 没有变化但脚本输出正确Metashape 视图缓存未刷新执行完脚本后手动旋转或缩放视图或者重新运行Reset View相关命令也有可能是多窗口未刷新批量处理时部分 chunk 设置成功部分失败某个 chunk 没有相机、未对齐或没有 region加判断if chunk.region is not None:再操作我再特别提两个大家容易忽略的细节6.1 center 和 size 联合作用下的“覆盖范围”很多人以为只要设置 centerregion 就会自动适应所有内容其实不然。如果你的 size 设置太小即使 center 在目标位置很多点云还是会被裁剪掉。如果你只设置了 center 但 size 很大计算结果会比预期大得多。所以合理的做法是根据点云或兴趣区域的范围先估算一个 size再放置 center。估算方法很简单先打印当前的 region 看看默认值print(当前 region size:, chunk.region.size)然后用默认 size 作为参考只挪 center不改变尺寸往往是最安全的操作。按我的经验80% 的场景只需要挪 center不需要动 size。6.2 是否需要用chunk.resetRegion()来重置Metashape API 中有一个便捷方法叫做chunk.resetRegion()它会把 region 重置为包含所有对齐照片的范围。如果你发现修改 center 前 region 已经乱了先调用这个方法恢复到一个合理初始状态再设置 center 效果更好chunk.resetRegion() # 之后再设置自己的 region chunk.region.center Metashape.Vector([x, y, z])这个方法特别适合那种你花了很多时间手动调 region又调乱了想用脚本全部重来的场景。但注意resetRegion()会覆盖你的 size 和 rotation所以顺序是先 reset再赋值。7. 进阶技巧把 region.center 和相机位置联动起来前面说到的都是手动指定坐标但还有一类需求更灵活把 region.center 设置到相机或者某些特征点的中心位置。比如你想把处理区域聚焦在所有照片的平均位置或者某个特定航带的中点。7.1 平均相机位置作为 center无人机拍摄时所有相机位置的平均点通常能代表场景的中心。通过脚本可以这样算import Metashape chunk Metashape.app.document.chunk camera_positions [] for camera in chunk.cameras: if camera.transform: pos camera.center # 注意camera.center 是相机中心坐标 camera_positions.append(pos) if camera_positions: avg Metashape.Vector([sum(p[0] for p in camera_positions) / len(camera_positions), sum(p[1] for p in camera_positions) / len(camera_positions), sum(p[2] for p in camera_positions) / len(camera_positions)]) chunk.region.center avg这里有个细节camera.center返回的是相机在 chunk 坐标系下的位置。如果 chunk 有地理参考这个坐标也是投影坐标可以直接用于 region.center。不过如果你想用地理坐标就需要再转换一次。另外要注意如果有些照片没有完成对齐camera.transform可能是 None所以最好加个判断for camera in chunk.cameras: if camera.transform is None: continue pos camera.center camera_positions.append(pos)我做过一个项目照片数量两千多张中间掺杂了几十张没对齐的照片如果不加过滤平均中心会被拉偏region 就框不准了。7.2 把 center 移动到指定标注点或 GCP如果你的项目里有地面控制点可以通过名称找到它的坐标并设置为 region.center。举个例子for marker in chunk.markers: if marker.label target_center: chunk.region.center marker.position break这里marker.position是 marker 在 chunk 坐标系下的坐标可以直接用。这个技巧特别适合那种把固定标志点设为项目中心——比如用 RTK 测量的某个特征点作为重建核心区中心。7.3 配合缓冲区调整 center有时候想让 region 的中心稍微偏离特征点比如当目标物不在照片覆盖中心而在边缘。我们可以先找到特征点坐标再根据航线方向偏移一定距离。一个简单实现new_center marker.position Metashape.Vector([buffer_x, buffer_y, 0]) chunk.region.center new_center这种偏移计算很简单但务必要根据实际坐标方向和尺寸来定 buffer不然很容易把 region 的中心移到覆盖范围以外导致区域边缘缺数据。8. 批处理与自动化流程中的 region.center 管理如果你已经在用脚本批量处理大量数据那么 region.center 的自动化管理就是一个不容忽视的环节。我见过不少自动化流程照片导入、对齐、建密集点云全部脚本化但偏偏在 region 这一块留了手动步骤导致整条产线在中间断了一下。下面聊聊怎么把 region 调整也纳入自动流程。8.1 多 chunk 统一处理示例对于每个 chunk在生成密集点云之前统一把 region 按照预设范围设置好这是最稳妥的。示例import Metashape doc Metashape.app.document for chunk in doc.chunks: if chunk is None: continue if not chunk.cameras: continue chunk.resetRegion() center chunk.region.center # 先拿到默认中心 # 这里做一个简单的统一偏移 chunk.region.center center Metashape.Vector([10.0, 10.0, 0.0]) # 也可以直接改成你手工确认过的坐标 doc.save()实际上如果只是做统一偏移最稳的初始中心就是 resetRegion 后的 center。因为每个 chunk 的默认中心就是其数据范围的中心你在此基础上做偏移不需要考虑坐标参考系的额外转换。8.2 从文件读取坐标批量设置有些时候你的坐标预先存在 CSV 文件里比如chunk_name, x, y, z chunk_001, 500, 300, 25 chunk_002, 520, 310, 28用 Python 读取并设置非常方便import csv import Metashape doc Metashape.app.document chunks_by_label {chunk.label: chunk for chunk in doc.chunks} with open(region_centers.csv, r) as f: reader csv.DictReader(f) for row in reader: label row[chunk_name] if label in chunks_by_label: chunk chunks_by_label[label] chunk.region.center Metashape.Vector([ float(row[x]), float(row[y]), float(row[z]) ]) print(已设置, label)这种方式在实际生产环境中太常见了。比如你有一个测区范围表或每块的任务规划信息直接导入脚本即可完成批量 region 调整全程不需要图形界面参与。8.3 自动判断范围根据点云或 sparse cloud如果你不想手动输入坐标而是希望 region.center 自动适配某些数据范围可以借助 sparse cloud 或 dense cloud 的坐标计算。比如让 region.center 位于 sparse cloud 的中心cloud chunk.point_cloud if cloud is not None: points cloud.points n len(points) if n 0: sum_x, sum_y, sum_z 0.0, 0.0, 0.0 # 注意直接遍历所有点可能非常慢项目大时建议抽样 step max(1, n // 10000) for i in range(0, n, step): p points[i].coord sum_x p[0] sum_y p[1] sum_z p[2] center Metashape.Vector([sum_x / (n // step), sum_y / (n // step), sum_z / (n // step)]) chunk.region.center center这个思路虽然简单但要注意性能问题。上百万个点全部遍历会卡顿很久所以用抽样步长限制在一万次以内兼顾速度和精度。这种方法不需要知道具体坐标完全自适应适合做动态管线。8.4 应用在模型重建中的注意点当 region.center 被移动到新的位置时region 范围有可能超出照片覆盖范围这时候生成的密集点云只覆盖了 region 与照片重叠的部分其他部分会留下空白。所以在自动流程中建议在设置 center 后打印出当前 region 范围并和 chunk 中的相机位置做比对确认没有明显偏差。一个简单的辅助函数def region_info(chunk): c chunk.region.center s chunk.region.size return center: {}, size: {}.format(c, s)把每个 chunk 的 region 信息写进日志文件这样即使后续结果有问题也能回溯检查是哪一步设置错了。9. 版本兼容性和脚本稳定性建议Metashape 的 Python API 在不同版本之间有一些细微差别特别是老版本 1.x 和较新的 2.x 之间部分接口可能改名或改变了默认行为。以chunk.region为例1.x 版本已经存在2.x 也保留。但听说在更早的版本比如 1.0里region 可能没有开放给脚本直到 1.1 之后才稳定。我目前实际验证过的版本范围是 1.5 到 2.1在这几个版本中region.center的读写方式基本一致。不过建议仍然在脚本开头做一次版本检测import Metashape print(Metashape Version:, Metashape.app.version)如果出现 API 变更官方文档是最终的参考。不过文档里关于 region 的说明并不详尽很多细节还是靠实操摸索。另外在脚本执行时如果 Metashape 正在后台执行其他任务比如正在对齐照片修改 region 可能会引起冲突。稳妥的做法是在空闲状态执行或者在新的 Python 控制台里单独运行避免与 UI 操作并发。我也试过在批处理脚本里面直接调用Metashape.app.document.save()保存时会卡一会儿。对于大项目保存几十上百兆的工程文件耗时可能几秒到几十秒所以如果你处理的是大量 chunk建议每处理完几个 chunk 保存一次而不是最后一次性保存以免中途出错丢了进度。10. 结尾我踩过的一次坑最后分享一下我自己的一个教训。有一回处理某个跨场景重建项目需要在密集匹配之前把所有 chunk 的 region 统一。我当时图省事只在循环里写了chunk.region.center Metashape.Vector([x, y, z])没有重置 rotation 和 size。结果是由于每个 chunk 的默认 region 大小不同有些 chunk 的 region 变得特别大有些又特别小密集匹配的结果参差不齐后面融合模型的时候不同 chunk 之间出现了明显裂缝。后来我老老实实地在脚本里把 size 和 rotation 一起设置重新处理才解决了问题。还有一次我在有地理参考的 chunk 里直接把经纬度赋值给了 center结果 region 跑到了非洲某处纬度和经度数字在投影坐标系里的含义完全变了整整废了半天时间才发现。所以在这里认真跟大家说一句处理 region 前先确认坐标系设置 region 时三个属性一起考虑跑完脚本后记得保存工程。如果你现在的项目里也遇到了 region 范围不对、批量处理需要统一范围、或者自动化流程卡在手动改 region 这一步不妨照着上面的思路去写一个脚本。改 region.center 本身并不复杂但把它用对、用好确实能让你的 Metashape 处理效率提升一个台阶。

相关新闻

uni-app热更新机制详解:HBuilderX资源包与APK兼容原理

uni-app热更新机制详解:HBuilderX资源包与APK兼容原理

简介:本资源是面向HBuilder X开发者的一站式热更新与安装部署支持包,适用于使用HBuilder X开发uni-app或原生混合应用的前端工程师及跨平台移动应用学习者,解决热更新资源打包、APK安装配置及项目运行环境快速复现等实际问题。压缩包共35个文…

2026/10/15 17:45:01 阅读更多 →
等保测评安全运维管理:环境、资产与流程要点解析

等保测评安全运维管理:环境、资产与流程要点解析

接触过等保测评的运维负责人大概都有同感:技术部分可以通过部署设备、调整策略快速见效,但到了安全运维管理这一模块,准备起来总觉得使不上力。它不单纯检查手上有几份文档,而是把制度建设、人员行为、现场记录串起来综合判断。可…

2026/10/15 17:44:00 阅读更多 →
仓颉编程语言 std.time 跨时区 DateTime 比较实战:以 UTC 时刻为基准的相等与大小判定

仓颉编程语言 std.time 跨时区 DateTime 比较实战:以 UTC 时刻为基准的相等与大小判定

文档知识库教程OpenHarmony 【免费下载链接】CangjieCorpus 本仓库为仓颉编程语言语料库,聚焦 仓颉编程语言 核心知识体系,整合官方开发指南、API 文档、典型代码示例及语法规范等多维度资源,经结构化处理与专业标注,构建为支持 R…

2026/10/15 17:44:00 阅读更多 →

最新新闻

UDS学习二:安全访问0x27(Security Access)

UDS学习二:安全访问0x27(Security Access)

安全访问0x27(Security Access)1. 为什么需要安全访问2. 子功能成对设计3. 报文格式4. 常见NRC5. 解锁后的状态变化1. 为什么需要安全访问 会话控制解决了"能不能进这个模式"的问题,但还不够。进了 Extended 会话后,写…

2026/10/15 19:08:57 阅读更多 →
TypeScript 也能开发AI应用了!用 TaoToken 统一 Key 打通 Cline MCP 的 TypeScript 工作流

TypeScript 也能开发AI应用了!用 TaoToken 统一 Key 打通 Cline MCP 的 TypeScript 工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 19:08:57 阅读更多 →
数字赋能普惠法律服务:一站式法律平台新律思全面解读

数字赋能普惠法律服务:一站式法律平台新律思全面解读

着法治观念不断普及,个人、中小微企业与法律从业者的法律服务需求持续增长。但传统法律服务存在门槛高、获取成本高、信息分散等现实痛点:普通民众遭遇劳动纠纷、租赁争议、民间借贷等问题时,难以快速获取权威法律指引;小微企业缺…

2026/10/15 19:08:57 阅读更多 →
问卷设计题项表述存在歧义,维度划分不合理问题分析

问卷设计题项表述存在歧义,维度划分不合理问题分析

问卷调研是社科实证研究常用的数据采集手段,问卷题项质量直接决定收集数据有效性。很多研究生自行设计问卷时,存在诸多缺陷:题项表述存在歧义,受访者对题目理解不一致;一题多问,单个题目同时询问两个不同内…

2026/10/15 19:08:57 阅读更多 →
出租商用手推式洗地机厂家直销

出租商用手推式洗地机厂家直销

商业清洁领域,洗地机已成为提升作业效率的基础装备。随着后勤社会化程度加深,出租商用手推式洗地机厂家直销两种供给模式并行发展,为用户提供了多元选择。本文从行业痛点、渠道对比及技术趋势切入,提供客观分析框架,助…

2026/10/15 19:08:57 阅读更多 →
靠谱气动调节阀销售厂家怎么选?三点避坑经验

靠谱气动调节阀销售厂家怎么选?三点避坑经验

行业痛点分析气动调节阀作为工业流程控制的关键执行元件,其选型与采购直接关系到生产线的稳定性与合规性。当前市场存在几个突出矛盾:一是部分厂家以通用型号应对复杂工况,导致阀门在高温高压、强腐蚀环境下寿命骤减;二是交付周期…

2026/10/15 19:07:57 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →