本篇关于之前做的一个project的具体实现。常有一种遗憾,遇到很美的风景而你的镜头却不能全部将它收入“眼底”。现在许多手机上都有了全景模式,这个功能在一定程度上缓解了问题,但对于有些的同学比如说我依然会拍出“抖动”严重的画面。今天我要介绍的这个project就可以将多个单张不同角度的风景拼成一张大图。
效果如下:
首先使用Harris Corner特征检测器和sift描述符检测图像中的特征,并在其他图像中找到最佳匹配特征; 然后使用RANSAC 对齐照片(确定它们的重叠和相对位置),最后将生成的图像拼接到一个无缝的全景图中。
多张单图:
全景图:
首先基本步骤为:
- 进行角点检测,本文中将使用Harris corner detector方法进行角点检测。
- 进行兴趣点描述,构建sift descriptor。
- 两张图片之间进行兴趣点匹配
- 利用Ransac算法计算两张图片之间的homography(H矩阵)
- 根据H变换图片并将两张图片拼接在一起。
- 多次运行以上步骤,将所有图片进行拼接,最后获得全景图。
具体步骤:
Step1. Harris corner角点检测
A.计算图像x,y方向上的导数。
B.计算图像导数的协方差矩阵H。
H=
通常,在计算协方差矩阵时,计算窗口或图像的小区域上的,和之和。为了获得更好的角点检测结果可以使用高斯加权窗口。使用det(H)/trace(H),其中det(H)为 计算每个点的Harris响应值。设置阈值找到并存储兴趣点位置。
code:
def detectKeypoints(image):
#接收图像
image = image.astype(np.float32)
image /= 255.
height, width = image.shape[:2]
features = []
grayImage = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
#转换成灰度图 计算Harris值
harrisImage, orientationImage = computeHarrisValues(grayImage)
#harrisImage=[harrisImage>np.average(harrisImage)]
#应用LocalMaxima算法进行特征筛选
harrisMaxImage =computeLocalMaxima(harrisImage)
#设置threshold将特征值进一步过滤,兴趣点数量进一步减少
threhold = 0.01*np.max(harrisImage)
for y in range(height):
for x in range(width):
if not harrisMaxImage[y, x]:
continue
f = cv2.KeyPoint()
f.size = 10
f.angle = orientationImage[y,x]
f.pt = (x,y)
f.response = harrisImage[y,x]
if(f.response>threhold):
features.append(f)
return features
Harris corner的部分
def computeHarrisValues(Image):
height, width = Image.shape[:2]
harrisImage = np.zeros(Image.shape[:2], dtype=float)
orientationImage = np.zeros(Image.shape[:2], dtype=float)
sobx = np.zeros(Image.shape[:2], dtype=float)
filters.sobel(Image, 1, sobx)
soby = np.zeros(Image.shape[:2], dtype=float)
filters.sobel(Image, 0, soby)
# sobx = filters.convolve(srcImage,sx,mode='reflect')
# soby = filters.convolve(srcImage,sy,mode='reflect')
Ix = sobx*sobx
Iy = soby*soby
Ixy = sobx*soby
Wxx = filters.gaussian_filter(Ix,sigma=0.5)
Wyy = filters.gaussian_filter(Iy,sigma=0.5)
Wxy = filters.gaussian_filter(Ixy,sigma=0.5)
harrisImage = Wxx*Wyy - Wxy*Wxy - 0.1*(Wxx+Wyy)*(Wxx+Wyy)
orientationImage = np.arctan2(soby,sobx)*(180) / np.pi
return harrisImage, orientationImage
结果展示:
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
检测器
+关注
关注
1文章
811浏览量
47295 -
图像
+关注
关注
2文章
1063浏览量
40042 -
Sift
+关注
关注
1文章
38浏览量
15004
发布评论请先 登录
相关推荐
5种Python实现方式详解
、PyPy和Pyston等,以下是对其简要介绍:CPythonCPython是标准Python,也是其他Python编译器的参考实现。通常提到“Python”
发表于 05-22 15:52
用ADE XLall跑all Corner时 第一个Corner为什么总是会报错?
在用 ADE XL仿真出现一个error ERRO ID:5010在用 ADE XLall 跑all Corner 的时候,第一个Corner总是会报错。不知道怎么回事,outputl
发表于 06-25 06:04
实现Python与STM32通信 精选资料分享
断断续续学了几周Stm32后,突然想实现上位机和下位机的通信,恰好自己学过一点python,便想通过python实现通信. 在网上看见
发表于 08-16 07:28
基于小波变换多尺度Harris角点检测算法
提出一种新的基于小波变换的Harris 多尺度角点检测算法,可以在不同的尺度下获取角点,克服了单一尺度的Harris 角点检测算法可能存在的角点信息丢失和易受噪声影响而检测出
发表于 01-09 11:18
•41次下载
Harris加快信号处理FPGA验证
Harris公司的工程师们经常在紧迫的时限内交付基于FPGA的复杂信号处理系统。为了满足客户时常十分严格的要求以及自身的质量标准,工程师们会在综合各个系统前彻底验证HDL设计。 在过去,HDL验证需要多步手工操作现在,Harris工程师们使用EDASimulatoLink
发表于 03-15 15:36
•13次下载
蚁群算法python编程实现
本文主要介绍了Python编程实现蚁群算法详解,涉及蚂蚁算法的简介,主要原理及公式,以及Python中的实现代码,具有一定参考价值。
发表于 02-02 10:36
•7278次阅读
FPGA中的fast corner和slow corner介绍
在FPGA的时序分析页面,我们经常会看到`Max at Slow Process Corner`和`Min at Fast Process Corner`,具体是什么含义呢?
UltraEM®的Corner Sweep仿真实例
UltraEM可以使用Corner Sweep来仿真工艺变化对器件结构造成的影响,具体包含三种仿真模式:MonteCarlo仿真、Perturbation仿真与Corner仿真。
Python实现OpenCV的安装与使用
本文实例讲述了 Python 实现 OpenCV 的安装与使用。分享给大家供 大家参考,具体如下: 由于下一步要开始研究下深度学习,而深度学习领域很多的算法和应 用都是用 Python 来
发表于 07-20 11:46
•7次下载
芯片制造流片Corner介绍
1.Corner是芯片制造是一个物理过程,存在着工艺偏差(包括掺杂浓度、扩散深度、刻蚀程度等),导致不同批次之间,同一批次不同晶圆之间,同一晶圆不同芯片之间情况都是不相同的。 在一片wafer
芯片后端signoff的RC corner指什么?
今天想聊一聊STA相关的RC corner的问题。我先简单介绍一些什么是signoff的corner,然后重点聊一聊RC corner。
评论