窗口程序集名 | 保 留 | 保 留 | 备 注 |
程序集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 - 权重
))

变量循环尾 ()
变量循环尾 ()