Collection Flow -> 低秩矩阵

本文探讨使用低秩矩阵对人脸图像进行重构的方法,并通过SVD分解实现。文章详细记录了实验过程中遇到的问题及解决办法,强调了正确重构方法的重要性,并讨论了不同人脸样本对重构效果的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Collection Flow 文章中由降到用地址矩阵来得到姿势和表情矫正的人脸

就是把所有的人脸都变成一行(三个通道依次排开),人脸个数就是行数,然后SVD分解,将前n个秩留下,其他全变为0,然后再乘回去,每行按照原本的规则还原成人脸。

low-rank matrix

我尝试过对不同的人的脸取低秩矩阵,出来的结果有黑色,对应关系也并不好



一度怀疑算法写错了。错误原因:SVD分解之后重构方法为:U*S*V', 而不是U*S*V

所以正确的结果为:


又尝试计算了一下前rank12相加&取平均的效果,也都差强人意。


后来想到了原因,论文中写的是同一个人的脸来计算

这样,共同特征会有很多,计算出很像的脸也就正常了。


参考文献:

Kemelmacher-Shlizerman I, Seitz S M. Collection flow[C]// CVPR 2012:1792-1799.

资源下载链接为: https://pan.quark.cn/s/67c535f75d4c 在机器人技术中,轨迹规划是实现机器人从一个位置平稳高效移动到另一个位置的核心环节。本资源提供了一套基于 MATLAB 的机器人轨迹规划程序,涵盖了关节空间和笛卡尔空间两种规划方式。MATLAB 是一种强大的数值计算与可视化工具,凭借其灵活易用的特点,常被用于机器人控制算法的开发与仿真。 关节空间轨迹规划主要关注机器人各关节角度的变化,生成从初始配置到目标配置的连续路径。其关键知识点包括: 关节变量:指机器人各关节的旋转角度或伸缩长度。 运动学逆解:通过数学方法从末端执行器的目标位置反推关节变量。 路径平滑:确保关节变量轨迹连续且无抖动,常用方法有 S 型曲线拟合、多项式插值等。 速度和加速度限制:考虑关节的实际物理限制,确保轨迹在允许的动态范围内。 碰撞避免:在规划过程中避免关节与其他物体发生碰撞。 笛卡尔空间轨迹规划直接处理机器人末端执行器在工作空间中的位置和姿态变化,涉及以下内容: 工作空间:机器人可到达的所有三维空间点的集合。 路径规划:在工作空间中找到一条从起点到终点的无碰撞路径。 障碍物表示:采用二维或三维网格、Voronoi 图、Octree 等数据结构表示工作空间中的障碍物。 轨迹生成:通过样条曲线、直线插值等方法生成平滑路径。 实时更新:在规划过程中实时检测并避开新出现的障碍物。 在 MATLAB 中实现上述规划方法,可以借助其内置函数和工具箱: 优化工具箱:用于解决运动学逆解和路径规划中的优化问题。 Simulink:可视化建模环境,适合构建和仿真复杂的控制系统。 ODE 求解器:如 ode45,用于求解机器人动力学方程和轨迹执行过程中的运动学问题。 在实际应用中,通常会结合关节空间和笛卡尔空间的规划方法。先在关节空间生成平滑轨迹,再通过运动学正解将关节轨迹转换为笛卡
<think>好的,我需要帮助用户解决在Spring Blade项目中正确配置MyBatis集合映射以处理多个相同类型对象的问题。首先,我要回忆MyBatis中处理一对多关系的常用方法,特别是使用<collection>标签的情况。 用户提到的是多个相同类型的对象,这可能涉及到嵌套查询或嵌套结果映射。我需要确定在XML映射文件中如何正确配置<collection>标签,确保它能够正确映射到对应的Java对象集合。 接下来,我需要考虑在Spring Blade项目中可能的结构,比如实体类的定义。例如,假设有一个Order实体类,里面包含多个OrderItem对象,这时候需要在Order的映射文件中使用<collection>来关联OrderItem。同时,要确保column属性的正确传递,以便在嵌套查询中使用。 还要注意MyBatis的版本和Spring Boot的集成情况,不同的版本可能会有配置上的差异。但一般来说,使用resultMap结合<collection>是标准做法。另外,是否需要使用嵌套查询(select)还是嵌套结果(resultMap)?这会影响性能,需要根据具体情况建议。 用户的问题可能还涉及到关联的列名是否正确,比如外键是否正确设置,以及在数据库查询中是否正确地联表查询。例如,LEFT JOIN订单项表,并通过订单ID关联,那么在resultMap中需要指定column="order_id"作为传递的参数。 此外,可能还需要处理重复数据的问题,因为联表查询可能会导致主订单信息重复,这时候MyBatis的groupBy属性可以帮助去重,确保Order对象只出现一次,而所有的OrderItem被正确收集到集合中。 最后,要提供一个示例代码,展示如何配置XML中的resultMap,包括<id>, <result>以及<collection>标签的使用,并说明各个属性的作用,如property、column、ofType、select等。同时,给出Java实体类的结构,确保用户能够对照自己的代码进行调整。 可能还需要提到常见的错误,比如column没有正确传递导致嵌套查询失败,或者ofType指定错误导致映射异常。此外,如果使用嵌套查询,要提醒注意N+1查询问题,建议在必要时使用联表查询和嵌套结果来提高性能。 总结步骤:1. 定义实体类结构;2. 配置MyBatis的resultMap,使用<collection>处理集合;3. 编写SQL查询,联表或分开查询;4. 处理可能的性能问题和错误配置。</think>在Spring Blade项目中配置MyBatis集合映射处理多个同类型对象,需通过`<collection>`标签实现一对多关系映射。以下是具体步骤及示例: --- ### 一、实体类定义 假设存在`订单(Order)`与`订单项(OrderItem)`的一对多关系: ```java // Order.java public class Order { private Long id; private String orderNo; private List<OrderItem> items; // 多个同类型对象的集合 } // OrderItem.java public class OrderItem { private Long id; private Long orderId; // 外键 private String productName; } ``` --- ### 二、MyBatis XML映射配置 在`OrderMapper.xml`中定义`resultMap`: ```xml <resultMap id="OrderResultMap" type="Order"> <!-- 主表字段映射 --> <id property="id" column="order_id"/> <result property="orderNo" column="order_no"/> <!-- 集合映射 --> <collection property="items" column="order_id" ofType="OrderItem" select="selectOrderItemsByOrderId"/> </resultMap> <!-- 主查询 --> <select id="selectOrderWithItems" resultMap="OrderResultMap"> SELECT * FROM orders WHERE order_id = #{orderId} </select> <!-- 嵌套子查询 --> <select id="selectOrderItemsByOrderId" resultType="OrderItem"> SELECT * FROM order_items WHERE order_id = #{orderId} </select> ``` #### 关键参数说明: - `property`: Java实体类中集合属性名(如`items`) - `column`: 传递给嵌套查询的字段(如`order_id`) - `ofType`: 集合元素的Java类型(如`OrderItem`) - `select`: 嵌套查询的ID(如`selectOrderItemsByOrderId`) --- ### 三、联表查询优化 若需避免N+1查询问题,可改用联表查询+嵌套结果映射: ```xml <resultMap id="OrderResultMap" type="Order"> <id property="id" column="order_id"/> <result property="orderNo" column="order_no"/> <!-- 通过联表结果直接映射 --> <collection property="items" ofType="OrderItem"> <id property="id" column="item_id"/> <result property="productName" column="product_name"/> </collection> </resultMap> <select id="selectOrderWithItems" resultMap="OrderResultMap"> SELECT o.order_id, o.order_no, i.id AS item_id, i.product_name FROM orders o LEFT JOIN order_items i ON o.order_id = i.order_id WHERE o.order_id = #{orderId} </select> ``` 此方式通过`LEFT JOIN`一次性获取所有数据,MyBatis自动根据`order_id`分组合并集合[^1]。 --- ### 四、常见问题处理 1. **字段冲突** 联表查询时若字段名重复,需使用`AS`别名区分,例如`o.id AS order_id` 2. **集合为空** 检查`ofType`是否与Java类型全限定名一致,或尝试使用`javaType`指定集合类型: ```xml <collection property="items" javaType="ArrayList" ofType="OrderItem"/> ``` 3. **性能问题** 嵌套查询(N+1)适合数据量小的场景,大数据量优先使用联表查询[^2]。 --- ### 五、Spring Blade集成 在`application.yml`中确保MyBatis配置正确扫描映射文件: ```yaml mybatis: mapper-locations: classpath*:/mapper/*.xml type-aliases-package: org.springblade.example.entity ``` ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值