本帖最后由 z13228604287 于 2023-11-17 15:55 编辑
需求将这两张图链接起来
窗口程序集名 | 保 留 | 保 留 | 备 注 | 程序集1 | | | | 变量名 | 类 型 | 数组 | 备 注 | 角 | 四角结构 | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 左图 | 数据矩阵类 | | | 右图 | 数据矩阵类 | | | SURF | 高速稳健特征类 | | | 匹配器 | 暴力匹配器类 | | | 特征点1 | 关键点类 | | 0 | 特征点2 | 关键点类 | | 0 | 训练描述子 | 数据矩阵类 | | | 查询描述子 | 数据矩阵类 | | | 匹配结果 | 特征匹配结构 | | 0 | 最优匹配结果 | 特征匹配结构 | | 0 | 点数 | 整数型 | | | i | 整数型 | | | 输出图 | 数据矩阵类 | | | 图像点1 | 坐标二维小数型结构 | | 0 | 图像点2 | 坐标二维小数型结构 | | 0 | 输出掩码 | 数据矩阵类 | | | 单应性 | 数据矩阵类 | | | 图像变化 | 数据矩阵类 | | | 输出宽 | 整数型 | | | 输出高 | 整数型 | | | 输出 | 数据矩阵类 | | |
左图. 从字节集加载 ( #图片1, #读图_彩色 ) 右图. 从字节集加载 ( #图片2, #读图_彩色 ) SURF. 创建 (800, 4, 3, 假, 假) SURF. 检测提取 (左图, , 特征点2, 查询描述子, 假)SURF. 检测提取 (右图, , 特征点1, 训练描述子, 假) 匹配器. 创建 (4, 假) 匹配器. 匹配 (查询描述子, 训练描述子, 匹配结果, ) 视觉_特征匹配排序 (匹配结果, 假) 点数 = 视觉_取最小值 (50, 取数组成员数 (匹配结果 ) × 0.15 )计次循环首 (点数, i )加入成员 (最优匹配结果, 匹配结果 [i ])计次循环尾 () 视觉_绘制匹配 (左图, 特征点2, 右图, 特征点1, 最优匹配结果, 输出图, , , , #绘制匹配_不画单个关键点 )视觉_显示图像 (“outimg”, 输出图 ) 计次循环首 (取数组成员数 (最优匹配结果 ), i ) 加入成员 (图像点1, 特征点1 [最优匹配结果 [i ].训练索引 + 1 ]. 坐标 ()) 加入成员 (图像点2, 特征点2 [最优匹配结果 [i ].查询索引 + 1 ]. 坐标 ()) 计次循环尾 () 单应性 = 视觉_寻找单应性矩阵 (图像点1, 图像点2, #鲁棒估计_RANSAC算法, 3, 输出掩码, 2000, 0.995 ) 计算拐角 (单应性, 右图 ) 视觉_透视变换 (右图, 图像变化, 单应性, 尺寸整数 (视觉_取最大值 (角.右上角.左边, 角.右下角.左边 ), 左图. 行数 ()), #插值_双线性二次, #边界_常数模式, ) 输出宽 = 图像变化. 列数 ()输出高 = 左图. 行数 ()输出. 初始化0 (输出高, 输出宽, #三通道矩阵字节型 )图像变化. 复制 (输出. 感兴区域 (矩形整数型 (0, 0, 图像变化. 列数 (), 图像变化. 行数 ()) ), )左图. 复制 (输出. 感兴区域 (矩形整数型 (0, 0, 左图. 列数 (), 左图. 行数 ()) ), ) 优化接缝 (左图, 图像变化, 输出 )视觉_显示图像 (“dst”, 输出 )视觉_等待按键 (0 )返回 (0 ) 变量名 | 类 型 | 静态 | 数组 | 备 注 | 矩阵2 | 数据矩阵类 | | | 矩阵1 | 数据矩阵类 | | | v2 | 双精度小数型 | | 3 | V1 | 双精度小数型 | | 3 |
v2 = { 0, 0, 1 } V1 = { 0, 0, 0 } 矩阵2. 初始化指针 (3, 1, #单通道矩阵双精度型, 取变量数据地址 (v2 )) 矩阵1 = H. 乘 (矩阵2 ) 视觉_控制台输出 (“V2:\n%mat\n”, 矩阵2 )视觉_控制台输出 (“V1:\n%mat\n”, 矩阵1 )角.左上角.左边 = 矩阵1. 取元素 (0, 0 ) ÷ 矩阵1. 取元素 (0, 2 )角.左上角.顶边 = 矩阵1. 取元素 (0, 1 ) ÷ 矩阵1. 取元素 (0, 2 ) v2 [2 ] = 输入. 行数 ()矩阵2. 初始化指针 (3, 1, #单通道矩阵双精度型, 取变量数据地址 (v2 )) 矩阵1 = H. 乘 (矩阵2 )角.左下角.左边 = 矩阵1. 取元素 (0, 0 ) ÷ 矩阵1. 取元素 (0, 2 )角.左下角.顶边 = 矩阵1. 取元素 (0, 1 ) ÷ 矩阵1. 取元素 (0, 2 ) v2 [1 ] = 输入. 列数 ()v2 [2 ] = 0 矩阵2. 初始化指针 (3, 1, #单通道矩阵双精度型, 取变量数据地址 (v2 )) 矩阵1 = H. 乘 (矩阵2 )角.右上角.左边 = 矩阵1. 取元素 (0, 0 ) ÷ 矩阵1. 取元素 (0, 2 )角.右上角.顶边 = 矩阵1. 取元素 (0, 1 ) ÷ 矩阵1. 取元素 (0, 2 ) v2 [1 ] = 输入. 列数 ()v2 [2 ] = 输入. 行数 ()矩阵2. 初始化指针 (3, 1, #单通道矩阵双精度型, 取变量数据地址 (v2 )) 矩阵1 = H. 乘 (矩阵2 )角.右下角.左边 = 矩阵1. 取元素 (0, 0 ) ÷ 矩阵1. 取元素 (0, 2 )角.右下角.顶边 = 矩阵1. 取元素 (0, 1 ) ÷ 矩阵1. 取元素 (0, 2 )|
优化接缝 | | | |
图 | 数据矩阵类 | | | | 变化 | 数据矩阵类 | | | | 输出 | 数据矩阵类 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 开始 | 整数型 | | | 进程宽度 | 双精度小数型 | | | 列 | 整数型 | | | 行 | 整数型 | | | 权重 | 双精度小数型 | | | i | 整数型 | | | p | 字节型指针类 | | | t | 字节型指针类 | | | d | 字节型指针类 | | | j | 整数型 | | |
开始 = 视觉_取最小值 (角.左上角.左边, 角.左下角.左边 ) 进程宽度 = 图. 列数 () - 开始 行 = 输出. 行数 ()列 = 图. 列数 () 权重 = 1 变量循环首 (0, 行 - 1, 1, i )p.指针 = 图. 取元素指针 (i, 0 ) t.指针 = 变化. 取元素指针 (i, 0 )d.指针 = 输出. 取元素指针 (i, 0 )变量循环首 (开始, 列 - 1, 1, i ) 如果 (t. 读 (j × 3 ) = 0 且 t. 读 (j × 3 + 1 ) = 0 且 t. 读 (j × 3 + 2 ) = 0 )权重 = 1 权重 = (进程宽度 (j - 开始 )) ÷ 进程宽度 d.写 (j × 3, p.读 (j × 3) × 权重 + t.读 (j × 3) (1 - 权重))d. 写 (j × 3 + 1, p. 读 (j × 3 + 1 ) × 权重 + t. 读 (j × 3 + 1 ) (1 - 权重 )) d. 写 (j × 3 + 2, p. 读 (j × 3 + 2 ) × 权重 + t. 读 (j × 3 + 2 ) (1 - 权重 )) 变量循环尾 ()变量循环尾 ()
特征提取
最终效果
|