当前位置: 首页 > wzjs >正文

老域名怎么做新网站seo搜索引擎优化主要做什么

老域名怎么做新网站,seo搜索引擎优化主要做什么,合肥市网站制作,夏天做哪个网站能致富文章目录 前言一、图像拼接的原理1. 特征提取与匹配2. 图像配准3. 图像变换与投影4. 图像融合5. 优化与后处理 二、图像拼接的简单实现(案例实现)1.引入库2.定义cv_show()函数3.创建特征检测函数detectAndDescribe()4.读取拼接图片5.计算图片特征点及描述…

文章目录

  • 前言
  • 一、图像拼接的原理
    • 1. 特征提取与匹配
    • 2. 图像配准
    • 3. 图像变换与投影
    • 4. 图像融合
    • 5. 优化与后处理
  • 二、图像拼接的简单实现(案例实现)
    • 1.引入库
    • 2.定义cv_show()函数
    • 3.创建特征检测函数detectAndDescribe()
    • 4.读取拼接图片
    • 5.计算图片特征点及描述符
    • 6.建立暴力匹配BFMatcher并使用drawMatchesKnn()绘制关键点之间的连线
    • 7.透视变换
    • 8.将图片A填充到指定位置(左)
    • 9.完整代码:
  • 总结


前言

在数字图像处理领域,图像拼接(Image Stitching)是一项将多张重叠图像无缝合成广角视图的关键技术。这项技术被广泛应用于全景照片生成、卫星地图制作、医学影像分析等领域。本文将使用OpenCV库,结合Python示例代码,深入解析图像拼接的核心实现流程。


一、图像拼接的原理

常用算法

  • SIFT(尺度不变特征变换):对旋转、尺度、光照变化具有鲁棒性。

  • SURF(加速版SIFT):计算速度更快。

  • ORB(Oriented FAST and Rotated BRIEF):轻量级,适合实时应用。
    在这里插入图片描述
    代码处理后:
    在这里插入图片描述

1. 特征提取与匹配

目的:找到不同图像之间的对应点,建立空间关联。

  • 关键点检测:
    使用特征检测算法(如SIFT、SURF、ORB)在每张图像中提取显著的特征点(角点、边缘等)。这些关键点对旋转、缩放和光照变化具有鲁棒性。

  • 描述子生成:
    为每个关键点生成一个特征向量(描述子),用于描述该点周围像素的分布特性。例如,SIFT描述子通过梯度方向直方图表示局部特征。

  • 特征匹配:
    使用相似性度量(如欧氏距离)在不同图像的特征描述子之间进行匹配,找到对应的关键点对。常用方法包括暴力匹配(Brute-Force)或快速近似最近邻(FLANN)。

2. 图像配准

目的:计算图像之间的几何变换关系,对齐重叠区域。

3. 图像变换与投影

目的:将图像映射到同一坐标系下,准备拼接。

  • 透视变换(Warping):
    利用单应性矩阵 H对源图像进行透视变换,使其与目标图像的视角对齐。OpenCV中的 cv2.warpPerspective 函数实现此功能。

  • 拼接画布计算:
    根据变换后的图像角点坐标,计算最终拼接图的尺寸,确保所有图像内容都能包含在内。例如,将多张图像的角点坐标极值(最大/最小x和y值)作为画布边界。

4. 图像融合

目的:消除拼接处的接缝和曝光差异,实现平滑过渡。

5. 优化与后处理

  • 曝光补偿:
    若图像间亮度差异较大,需对重叠区域的像素值进行直方图匹配,调整曝光一致性。

  • 接缝优化:
    使用动态规划或图割(Graph Cut)算法寻找最佳拼接路径,避开运动物体或高对比度区域。

  • 重投影校正:
    对广角拼接结果进行球形或圆柱形投影,消除透视畸变(适用于全景图)。

二、图像拼接的简单实现(案例实现)

在这里插入图片描述

1.引入库

import cv2
import numpy as np
import sys

2.定义cv_show()函数

def cv_show(name,img):cv2.imshow(name,img)cv2.waitKey(0)

3.创建特征检测函数detectAndDescribe()

def detectAndDescribe(image):gray =cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)#灰度图descriptor = cv2.SIFT_create()#建立sift生成器#检测sift特征点,计算描述符,第二个参数为掩模(kps,des) = descriptor.detectAndCompute(gray,None)# 将结果转换为numpy数组kps_float = np.float32([kp.pt for kp in kps])return (kps,kps_float,des)

4.读取拼接图片

imageA = cv2.imread('1.jpg')
imageB = cv2.imread('2.jpg')
cv_show('imgA',imageA)
cv_show('imgB',imageB)

5.计算图片特征点及描述符

(kpsA,kps_floatA,desA) = detectAndDescribe(imageA)
(kpsB,kps_floatB,desB) = detectAndDescribe(imageB)

6.建立暴力匹配BFMatcher并使用drawMatchesKnn()绘制关键点之间的连线

BFMatcher,在匹配大型训练集合速度更快

matcher = cv2.BFMatcher()
rawMatches = matcher.knnMatch(desB,desA,2)
good = []
matches =[]
for m in rawMatches:if len(m) == 2 and m[0].distance < 0.65 * m[1].distance:good.append(m)matches.append((m[0].queryIdx,m[0].trainIdx))
print(len(good))
print(matches)vis = cv2.drawMatchesKnn(imageB,kpsB,imageA,kpsA,good,None,flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv_show('vis',vis)

在这里插入图片描述

7.透视变换

if len(matches)>4: #筛选后的匹配对大于4时,计算视角变换矩阵ptsB = np.float32([kps_floatB[i] for (i, _) in matches])ptsA = np.float32([kps_floatA[i] for (_, i) in matches])(H,mask) = cv2.findHomography(ptsB,ptsA,cv2.RANSAC,10)
else:print('图片未找到4个以上的匹配点')sys.exit()result = cv2.warpPerspective(imageB,H,(imageB.shape[1] + imageA.shape[1],imageB.shape[0]))
cv_show('resultB',result)

在这里插入图片描述

8.将图片A填充到指定位置(左)

result[0:imageA.shape[0], 0:imageA.shape[1]] = imageA
cv_show('result',result)

在这里插入图片描述

9.完整代码:

import cv2
import numpy as np
import sys
def cv_show(name,img):cv2.imshow(name,img)cv2.waitKey(0)
def detectAndDescribe(image):gray =cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)#灰度图descriptor = cv2.SIFT_create()#建立sift生成器#检测sift特征点,计算描述符,第二个参数为掩模(kps,des) = descriptor.detectAndCompute(gray,None)# 将结果转换为numpy数组kps_float = np.float32([kp.pt for kp in kps])return (kps,kps_float,des)
'''----------读取拼接图片----------'''
imageA = cv2.imread('1.jpg')
imageB = cv2.imread('2.jpg')
cv_show('imgA',imageA)
cv_show('imgB',imageB)
'''计算图片特征点及描述符'''
(kpsA,kps_floatA,desA) = detectAndDescribe(imageA)
(kpsB,kps_floatB,desB) = detectAndDescribe(imageB)
'''-------建立暴力匹配BFMatcher,在匹配大型训练集合速度更快--------'''
matcher = cv2.BFMatcher()
rawMatches = matcher.knnMatch(desB,desA,2)
good = []
matches =[]
for m in rawMatches:if len(m) == 2 and m[0].distance < 0.65 * m[1].distance:good.append(m)matches.append((m[0].queryIdx,m[0].trainIdx))
print(len(good))
print(matches)vis = cv2.drawMatchesKnn(imageB,kpsB,imageA,kpsA,good,None,flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv_show('vis',vis)
'''透视变换'''
if len(matches)>4: #筛选后的匹配对大于4时,计算视角变换矩阵ptsB = np.float32([kps_floatB[i] for (i, _) in matches])ptsA = np.float32([kps_floatA[i] for (_, i) in matches])(H,mask) = cv2.findHomography(ptsB,ptsA,cv2.RANSAC,10)
else:print('图片未找到4个以上的匹配点')sys.exit()result = cv2.warpPerspective(imageB,H,(imageB.shape[1] + imageA.shape[1],imageB.shape[0]))
cv_show('resultB',result)
#将图片传入result图片最左端
result[0:imageA.shape[0], 0:imageA.shape[1]] = imageA
cv_show('result',result)

总结

图像拼接的本质是通过特征匹配建立图像间的几何对应关系,利用投影变换对齐视角,最后通过融合技术消除拼接痕迹。其核心原理结合了特征匹配、几何变换和图像融合三大技术模块,是计算机视觉领域的基础应用之一。

http://www.dtcms.com/wzjs/4960.html

相关文章:

  • 冀州做网站的公司网店培训教程
  • 做网站前端用什么语言网站域名怎么查询
  • 上海手机网站开发苏州seo优化
  • win10电脑做网站无代码网站开发平台
  • 广州网站建设 粤icp创建网站的公司
  • 织梦的网站收录不好淘宝店铺买卖交易平台
  • 深圳 手机网站建设牛推网
  • 衡水网站建设与制作品牌广告
  • 地狱少女通信网站怎么做重庆seo代理计费
  • 宿州网站建设时间以网红引流促业态提升
  • 中国建设银行网站类型网站发布
  • 长春专业网站建设模板关键词歌词图片
  • 招聘网站系统怎么做大数据精准获客软件
  • 个人做淘宝客网站好做吗关键词优化顾问
  • 沈阳哪家做网站好网络项目平台
  • 网站四网合一河南百度推广电话
  • 长沙网站搭建首选智投未来黄页引流推广网站入口
  • 网站被禁止访问怎么打开简单的网站制作
  • 定制网站就上爱用建站室内设计培训哪个机构比较好
  • 学校网站制作方案搜索引擎技术基础
  • 中企动力 35 做网站宁波网络建站模板
  • 专门做稀有产品的网站网站建设培训机构
  • 杭州seo网站优化中文域名交易网站
  • 家用电脑可以做网站服务器芭嘞seo
  • 自己做网站需要学什么广州网站优化
  • 微名片网站怎么做创意营销案例
  • 浙江网站建设制作流程前端seo怎么优化
  • 网站服务器和vps做一台一键优化软件
  • 商标注册查询官网入口官方西安网站优化培训
  • 佛山网站搜索排名廊坊网络推广公司