OpenCV中使用加速鲁棒特征检测SURF与图像降噪讲解与实战(附源码)

简介: OpenCV中使用加速鲁棒特征检测SURF与图像降噪讲解与实战(附源码)

需要源码和图片请点赞关注收藏后评论区留言私信~~~

一、加速鲁棒特征检测

加速鲁棒特征( Speeded Up Robust Features, SURF) 是一种类似SIFT并且由其启发的专利算法。SURF于2006年推出,使用Haar小波变换。SURF 最大的优点是比SIFT更快

SURF算法如下

输入:原始图像

输出:图像的SIFT特征点

方法:

1:如果需要 将图像转换为灰度图像

2:计算不同尺度的积分图像,它是从上到下、从左到右的像素值之和,积分图像代替SIFT中的高斯滤波器

3:定义包含像素位置p和尺度为函数的灰度图像二阶导数的海森矩阵

4:行列式是与方阵有关的值,海森矩阵的行列式对应于点的局部变换,选择具有最大行列式的值

5:尺度由12.3式子定义,并且和SIFT一样,可以定义尺度octaves,SURF通过改变滤波器核心的尺寸来工作,而SIFT则是改变图像的大小,在上一步的缩放和图像空间中插入最大值

6:将Haar小波变换应用于围绕关键点的圆

7:使用滑动窗口对响应求和

8:从响应和中确定方向

图像的SIFT特征提取

可以看出提取的特征点没有SIFT多 但是运行速度快

部分代码如下

import cv2 as cv
import numpy as np 
img = cv.imread('images\lena_color_512.tif',cv.IMREAD_COLOR)
cv.imshow('Lean',img) 
#参数为hessian矩阵的阈值
surf = cv.xfeatures2d.SURF_create(500) 
#设置是否要检测方向
surf.setUpright(True) 
#输出设置值
print(surf.getUpright()) 
#找到关键点和描述符
key_query,ypoints(img,key_query,img) 
#输出描述符的个数
print(surf.descriptorSize()) 
cv.imshow('SURF',img)
cv.waitKey(0)

二、图像降噪

噪声是数据和图像中的常见现象。当然,噪声不是我们想要的,因为它不会为我们的分析增加任何价值。我们通常假设噪声正态分布在零附近。我们认为像素值是真实值和噪声的总和(如果有的话)。我们还假设噪声值是独立的,即一个像素的噪声值与另一个像素无关

一个简单的想法是平均小窗口中的像素,因为我们假设噪声的期望值为零。这就是模糊背后的大体想法。我们可以把这个想法更进一步,在个像素周围定义多个窗口,然后将这些相似的窗口再平均

OpenCV中有一些去噪的函数,通常需要指定滤波器的强度,搜索窗口的大小以及为检测相似性定义的窗口的大小

图像的去噪

结果如下

第二张图片添加了噪声,很明显变得模糊了许多,第三张图片进行去除噪声操作,又变得清晰

部分代码如下

import cv2 as cv
import numpy as np 
img = cv.imread('images\lena.jpg',cv.IMREAD_COLOR)
cv.imshow('Lean',img) 
Z = img.reshape((-1, 3))
np.random.seed(59)
noise = np.radomandom(Z.shape) < 0.99
noisy = (Z * noise.reshape((img.shape))
cv.imshow('noise Lena',noisy)
cleaned = cv.fasteansDenoisingColored(noisy, None, 10, 7, 7, 21)
cv.imshow('Denoised Lena',cleaned)
cv.waitKey()
cv.destroyAllWindows()

创作不易 觉得有帮助请点赞关注收藏~~~

目录
打赏
0
0
0
0
141
分享
相关文章
基于OpenCV的车牌识别系统源码分享
基于OpenCV的车牌识别系统主要利用图像边缘和车牌颜色定位车牌,再利用OpenCV的SVM识别具体字符,从而达到车牌识别的效果。
54 4
基于OpenCV的车牌识别系统源码分享
基于计算机视觉(opencv)的运动计数(运动辅助)系统-源码+注释+报告
基于计算机视觉(opencv)的运动计数(运动辅助)系统-源码+注释+报告
126 3
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
1048 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
Ubuntu系统下编译OpenCV4.8源码
通过上述步骤,你可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使你能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
82 43
Ubuntu系统下编译OpenCV4.8源码
通过上述步骤,你可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使你能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
76 30
Ubuntu系统下编译OpenCV4.8源码
通过上述步骤,你可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使你能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
39 12
Jetson 学习笔记(十一):jetson agx xavier 源码编译ffmpeg(3.4.1)和opencv(3.4.0)
本文是关于在Jetson AGX Xavier上编译FFmpeg(3.4.1)和OpenCV(3.4.0)的详细教程,包括编译需求、步骤、测试和可能遇到的问题及其解决方案。还提供了Jetson AGX Xavier编译CUDA版本的OpenCV 4.5.0的相关信息。
163 4
Jetson 学习笔记(十一):jetson agx xavier 源码编译ffmpeg(3.4.1)和opencv(3.4.0)
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
本文是关于Ubuntu系统中使用ffmpeg 3.2.16源码编译OpenCV 3.4.0的安装笔记,包括安装ffmpeg、编译OpenCV、卸载OpenCV以及常见报错处理。
331 2
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
Ubuntu系统编译OpenCV4.8源码
【10月更文挑战第17天】只要三步即可搞定,第一步是下载指定版本的源码包;第二步是安装OpenCV4.8编译需要的编译器与第三方库支持;第三步就是编译OpenCV源码包生成安装文件并安装。
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
182 7