基于DLT算法求解摄影测量内方位元素初值方法

版权申诉
0 下载量 33 浏览量 更新于2024-12-15 收藏 3.68MB RAR 举报
资源摘要信息: "DLT算法是摄影测量中用于求解内方位元素的一种方法,通过像点坐标和物方坐标之间的关系,可以直接解出内方位元素的初值。DLT算法的程序是可以运行的,相关文件名称为DLT。" 知识点详细说明: 1. DLT算法的定义: DLT算法,即直接线性变换算法(Direct Linear Transformation),是计算机视觉和摄影测量领域常用的一种方法,用于解决从三维空间点到二维图像点的映射问题。该算法能够根据已知的物方空间中的点坐标及其在像片上的对应像点坐标,通过线性方程组求解得到摄像机的内部参数(内方位元素)和外部参数。 2. 内方位元素的含义: 内方位元素是指与摄影机内部结构参数相关的六个基本参数,它们是摄影测量中摄像机模型的重要组成部分。这些参数包括: - 主距(focal length):即镜头的焦距。 - 主点坐标(principal point coordinates):通常用图像中心作为原点,主点即为像片上光轴与像平面交点的坐标。 - 透镜畸变系数(lens distortion coefficients):由于透镜物理特性和加工精度引起的像点偏离理想位置的程度。 - 摄影机镜头的像移系数(image shift coefficients):由于相机在拍摄过程中发生的位置移动导致的图像平移。 3. DLT算法的应用: DLT算法广泛应用于摄影测量和计算机视觉领域,尤其在解决航空摄影测量、卫星遥感、计算机视觉、机器视觉定位等方面的问题时,通过解析像片上的点与实际地物点之间的对应关系来反求摄影机的内外方位元素,进而获得精确的空间位置信息。 4. DLT算法的优点和局限性: DLT算法的优点是数学形式简单,易于编程实现,不需要考虑相机的物理特性。然而,该算法也存在局限性,例如它不能直接提供畸变参数的物理意义,且需要足够数量的控制点来进行求解。此外,当控制点数量不足或分布不合理时,求解得到的参数可能不够准确。 5. DLT算法与其他算法的关系: DLT算法与共线条件方程、双线性变换等其他摄影测量算法有直接的联系,它们都是基于像片与实际地面点之间几何关系的数学模型。共线条件方程是更为严格的数学模型,要求控制点的坐标精度非常高,而DLT算法具有更好的适应性和鲁棒性。 6. DLT算法的求解过程: DLT算法通过构建一个过定的线性方程组,利用最小二乘法进行求解。具体步骤包括: - 收集足够数量的地面控制点的物方坐标和相对应的像点坐标。 - 利用这些坐标点,构造对应的线性方程组。 - 应用最小二乘法,求解内方位元素和外方位元素。 - 对求解结果进行分析和验证,确保解的准确性和可靠性。 7. 关于DLT算法的程序: 根据描述,DLT算法的程序是可用的,并且可以在给定的网站www.pudn.com上找到。这暗示了DLT算法已经被编码实现,并且可能与一些相关的数据处理和图像分析软件集成在一起,方便研究人员和工程师使用。 8. 资源获取: 由于文件被压缩为RAR格式并标记为DLT,用户可以访问www.pudn.com网站下载解压后的DLT算法相关文件。这可能包含源代码、执行文件、示例数据集以及使用说明等,对理解DLT算法和进行实际应用非常有帮助。

优化SQL select round( ohbmc.after_actual_amount/zz,0) cost_moneyi ,count(distinct case when ddp.orig_plan_rid = -1 then null else ddp.orig_plan_rid end) AS orig_num ,array_agg (dlt.state) AS loading_state ,count(DISTINCT CASE WHEN ddp.sale_planid = -1 THEN NULL ELSE ddp.sale_planid END) AS saleid_num--销地已计划数量 ,array_agg(dto.state) AS saletransport_state from ( SELECT id AS origin_planid , unnest(cabinet_rule_id) cabinet_rule_id -- 判断 next_plan_id 本身是空和 next_plan_id 为 {} ,unnest(case when (next_plan_id is null or next_plan_id[1] is null) then ARRAY[-1]::integer[] else next_plan_id end) as sale_planid --销地计划 , case when dp.plan_receiver_id is null then -1 else dp.plan_receiver_id end orig_plan_rid --产地计划 FROM ods.ods_durian_delivery_plan as dp left join ods.ods_hl_commodity_category as hcc on hcc.category_id = dp.category_id WHERE dp.type = 'ORIGIN' AND dp.deleted = 99 AND dp.tenant_id = 1 and cabinet_rule_id='{8}'or cabinet_rule_id='{9}'or cabinet_rule_id='{10000005}'---取白心火龙果 AND hcc.category_name = '火龙果') as ddp LEFT JOIN ods.ods_durian_loading_task AS dlt ON dlt.plan_id = ddp.origin_planid and dlt.plan_type='ORIGIN' AND dlt.deleted = 99 LEFT JOIN ods.ods_durian_transport_order AS dto ON dto.plan_id = ddp.sale_planid AND dto.deleted = 99 LEFT JOIN ods.ods_durian_receipt_task AS drt ON drt.plan_id = ddp.sale_planid AND drt.deleted = 99 LEFT JOIN ods.ods_durian_transport_order AS dto1 ON dto1.plan_id = ddp.sale_planid AND dto1.sort_no = 1 AND dto1.deleted = 99 left join (select odlsi.plan_id,sum(odlsi.quantity) zz from ods.ods_durian_loading_sku_item odlsi group by 1) odlsi on odlsi.plan_id=dlt.plan_id left join (select *, unnest(case when ( odbr.bill_main_id is null or odbr.bill_main_id is null) then ARRAY[-1]::integer[] else odbr.bill_main_id end) bill_main_id_r from ods.ods_durian_bill_rel odbr) odbr on odbr.data_id= dlt.plan_id and odbr.data_type='ORIGIN_FEE' left join ods.ods_hl_bill_main_currency ohbmc on ohbmc.bill_main_id=odbr.bill_main_id_r and ohbmc.deleted=99 group by 1;

2023-06-13 上传