开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 3136|回复: 8
收起左侧

[技术专题] OpenCV 图像拼接融合之特征匹配

[复制链接]
结帖率:91% (75/82)
发表于 2023-11-17 15:50:23 | 显示全部楼层 |阅读模式   江苏省苏州市
本帖最后由 z13228604287 于 2023-11-17 15:55 编辑

需求将这两张图链接起来



  
窗口程序集名保 留  保 留备 注
程序集1   
变量名类 型数组备 注
四角结构  

子程序名返回值类型公开备 注
_启动子程序整数型 本子程序在程序启动后最先执行
变量名类 型静态数组备 注
左图数据矩阵类 
右图数据矩阵类 
SURF高速稳健特征类SURF算法 SURF算法 SURF SURF(Speeded Up Robust Features)是对SIFT的?种改进,主要特点是快速。
匹配器暴力匹配器类创建一个暴力匹配器 用于特征点匹配
特征点1关键点类0
特征点2关键点类0
训练描述子数据矩阵类 
查询描述子数据矩阵类 
匹配结果特征匹配结构0特征点对比,保存   特征点为中心点区域比对
最优匹配结果特征匹配结构0
点数整数型 
i整数型循环变量
输出图数据矩阵类 
图像点1坐标二维小数型结构0
图像点2坐标二维小数型结构0
输出掩码数据矩阵类 
单应性数据矩阵类 
图像变化数据矩阵类接收透视转换结果
输出宽整数型 
输出高整数型 
输出数据矩阵类 
' 左图
左图.从字节集加载 ( #图片1, #读图_彩色 )
' 右图
右图.从字节集加载 ( #图片2, #读图_彩色 )
' 左右图显示
' 视觉_显示图像 (“left”, left)
' 视觉_显示图像 (“right”, right)
' 创建 函数参数 海森矩阵阀值 800特征点以内
SURF.创建 (800, 4, 3, 假, )
' 1、选择特征点
' 左图 右图 识别特征点 是Mat对象 用c d保存
SURF.检测提取 (左图, , 特征点2, 查询描述子, )
SURF.检测提取 (右图, , 特征点1, 训练描述子, )
' 特征点对比,保存   特征点为中心点区域比对
匹配器.创建 (4, )  ' 匹配器需要初始化
匹配器.匹配 (查询描述子, 训练描述子, 匹配结果, )
' 排序从小到大 找到特征点连线
视觉_特征匹配排序 (匹配结果, )
' 2、保存最优的特征点对象
点数 = 视觉_取最小值 (50, 取数组成员数 (匹配结果) × 0.15)
计次循环首 (点数, i)
加入成员 (最优匹配结果, 匹配结果 [i])
计次循环尾 ()
' 2-1、画线 最优的特征点对象连线
视觉_绘制匹配 (左图, 特征点2, 右图, 特征点1, 最优匹配结果, 输出图, , , , #绘制匹配_不画单个关键点 )
视觉_显示图像 (“outimg”, 输出图)
' 3、特征点匹配
计次循环首 (取数组成员数 (最优匹配结果), i)
' 查找特征点可连接处                          变形
加入成员 (图像点1, 特征点1 [最优匹配结果 [i].训练索引 + 1].坐标 ())
' 查找特征点可连接处                          查找基准线
加入成员 (图像点2, 特征点2 [最优匹配结果 [i].查询索引 + 1].坐标 ())
计次循环尾 ()
' 4、透视转换 图形融合
单应性 = 视觉_寻找单应性矩阵 (图像点1, 图像点2, #鲁棒估计_RANSAC算法, 3, 输出掩码, 2000, 0.995)
' 根据透视转换矩阵进行计算 四个坐标
计算拐角 (单应性, 右图)
' 透视转换
视觉_透视变换 (右图, 图像变化, 单应性, 尺寸整数 (视觉_取最大值 (角.右上角.左边, 角.右下角.左边), 左图.行数 ()), #插值_双线性二次, #边界_常数模式, )
' 右图透视变换 由于本次图片材料是自己截图拼接的 因此看不出透视变换的明显特征
' 视觉_显示图像 (“imageTransForm”, imageTransForm)
' 结果进行整合
输出宽 = 图像变化.列数 ()
输出高 = 左图.行数 ()
输出.初始化0 (输出高, 输出宽, #三通道矩阵字节型 )
图像变化.复制 (输出.感兴区域 (矩形整数型 (0, 0, 图像变化.列数 (), 图像变化.行数 ())), )
左图.复制 (输出.感兴区域 (矩形整数型 (0, 0, 左图.列数 (), 左图.行数 ())), )
' 5、优化图像
优化接缝 (左图, 图像变化, 输出)
视觉_显示图像 (“dst”, 输出)
视觉_等待按键 (0)
返回 (0)  ' 可以根据您的需要返回任意数值
子程序名返回值类型公开备 注
计算拐角  
参数名类 型参考可空数组备 注
H数据矩阵类
输入数据矩阵类
变量名类 型静态数组备 注
矩阵2数据矩阵类 
矩阵1数据矩阵类 
v2双精度小数型3
V1双精度小数型3
v2 = { 0, 0, 1 }  ' 左上角
V1 = { 0, 0, 0 }  ' 变换后的坐标值
矩阵2.初始化指针 (3, 1, #单通道矩阵双精度型, 取变量数据地址 (v2))
' V1M.初始化指针 (3, 1, #单通道矩阵双精度型, 取变量数据地址 (V1))
矩阵1 = H. (矩阵2)
' 左上角(0,0,1)
视觉_控制台输出 (“V2:\n%mat\n”, 矩阵2)
视觉_控制台输出 (“V1:\n%mat\n”, 矩阵1)
角.左上角.左边 = 矩阵1.取元素 (0, 0) ÷ 矩阵1.取元素 (0, 2)
角.左上角.顶边 = 矩阵1.取元素 (0, 1) ÷ 矩阵1.取元素 (0, 2)
' 左下角(0,src.rows,1)
v2 [2] = 输入.行数 ()
矩阵2.初始化指针 (3, 1, #单通道矩阵双精度型, 取变量数据地址 (v2))  ' 列向量
矩阵1 = H. (矩阵2)
角.左下角.左边 = 矩阵1.取元素 (0, 0) ÷ 矩阵1.取元素 (0, 2)
角.左下角.顶边 = 矩阵1.取元素 (0, 1) ÷ 矩阵1.取元素 (0, 2)
' 右上角(src.cols,0,1)
v2 [1] = 输入.列数 ()
v2 [2] = 0
矩阵2.初始化指针 (3, 1, #单通道矩阵双精度型, 取变量数据地址 (v2))  ' 列向量
矩阵1 = H. (矩阵2)
角.右上角.左边 = 矩阵1.取元素 (0, 0) ÷ 矩阵1.取元素 (0, 2)
角.右上角.顶边 = 矩阵1.取元素 (0, 1) ÷ 矩阵1.取元素 (0, 2)
' 右下角(src.cols,src.rows,1)
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  ' img1中像素的权重
变量循环首 (0, 行 - 1, 1, i)
p.指针 = 图.取元素指针 (i, 0)  ' 获取第i行的首地址
t.指针 = 变化.取元素指针 (i, 0)
d.指针 = 输出.取元素指针 (i, 0)
变量循环首 (开始, 列 - 1, 1, i)
' 如果遇到图像trans中无像素的黑点,则完全拷贝img1中的数据
如果 (t. (j × 3) = 0 t. (j × 3 + 1) = 0 t. (j × 3 + 2) = 0)
权重 = 1
' img1中像素的权重,与当前处理点距重叠区域左边界的距离成正比,实验证明,这种方法确实好
权重 (进程宽度 (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 - 权重))
变量循环尾 ()
变量循环尾 ()


i支持库列表   支持库注释   
OpenCV(未知支持库)
spec特殊功能支持库

特征提取
下载.png
最终效果
下载 1.png

下载 2.png
下载 3.png

评分

参与人数 1好评 +1 精币 +2 收起 理由
我爱逛精易 + 1 + 2 支持开源~!感谢分享

查看全部评分


结帖率:75% (3/4)

签到天数: 23 天

发表于 2024-2-22 11:33:42 | 显示全部楼层   河北省石家庄市
支持开源
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)

签到天数: 23 天

发表于 2024-1-22 04:33:08 | 显示全部楼层   广东省汕头市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

结帖率:33% (1/3)

签到天数: 3 天

发表于 2024-1-10 14:49:33 | 显示全部楼层   湖北省黄冈市
牛逼
回复 支持 反对

使用道具 举报

结帖率:49% (19/39)

签到天数: 1 天

发表于 2024-1-5 11:58:59 | 显示全部楼层   广东省深圳市
支持库能不能分享一下啊?
回复 支持 反对

使用道具 举报

结帖率:100% (10/10)

签到天数: 2 天

发表于 2023-11-30 00:03:19 | 显示全部楼层   广东省梅州市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

结帖率:100% (34/34)

签到天数: 21 天

发表于 2023-11-22 09:49:00 | 显示全部楼层   浙江省衢州市
回复 支持 反对

使用道具 举报

结帖率:67% (2/3)

签到天数: 5 天

发表于 2023-11-21 10:15:08 | 显示全部楼层   山东省济南市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

签到天数: 3 天

发表于 2023-11-17 17:19:57 | 显示全部楼层   浙江省宁波市
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表