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()

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

相关文章
|
1月前
|
计算机视觉
Opencv学习笔记(八):如何通过cv2读取视频和摄像头来进行人脸检测(jetson nano)
如何使用OpenCV库通过cv2模块读取视频和摄像头进行人脸检测,并提供了相应的代码示例。
82 1
|
1月前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
328 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
2月前
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
49 4
|
1月前
|
机器学习/深度学习 计算机视觉
目标检测笔记(六):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)
本文介绍了如何使用OpenCV进行特定区域的目标检测,包括人脸检测实例,展示了两种实现方法和相应的代码。
61 1
目标检测笔记(六):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)
|
2月前
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
|
1月前
|
算法 计算机视觉 Python
圆形检测算法-基于颜色和形状(opencv)
该代码实现了一个圆检测算法,用于识别视频中的红色、白色和蓝色圆形。通过将图像从RGB转换为HSV颜色空间,并设置对应颜色的阈值范围,提取出目标颜色的区域。接着对这些区域进行轮廓提取和面积筛选,使用霍夫圆变换检测圆形,并在原图上绘制检测结果。
64 0
|
3月前
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
WK
|
3月前
|
编解码 计算机视觉 Python
如何在OpenCV中进行图像转换
在OpenCV中,图像转换涉及颜色空间变换、大小调整及类型转换等操作。常用函数如`cvtColor`可实现BGR到RGB、灰度图或HSV的转换;`resize`则用于调整图像分辨率。此外,通过`astype`或`convertScaleAbs`可改变图像数据类型。对于复杂的几何变换,如仿射或透视变换,则可利用`warpAffine`和`warpPerspective`函数实现。这些技术为图像处理提供了强大的工具。
WK
108 1
|
4月前
|
机器学习/深度学习 XML 计算机视觉
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
|
5月前
|
算法 计算机视觉
【Qt&OpenCV 图像的感兴趣区域ROI】
【Qt&OpenCV 图像的感兴趣区域ROI】
166 1