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

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

相关文章
|
3天前
|
数据采集 Java 数据挖掘
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
|
6天前
|
算法 计算机视觉
OpenCV高斯差分技术实现图像边缘检测
OpenCV高斯差分技术实现图像边缘检测
|
8天前
|
计算机视觉
OpenCV图像运动模糊
OpenCV图像运动模糊
11 0
|
8天前
|
计算机视觉
OpenCV图像阈值
OpenCV图像阈值
5 0
|
8天前
|
计算机视觉
OpenCV图像混合
OpenCV图像混合
10 0
|
8天前
|
计算机视觉 Python
OpenCV为图像扩边(填充)
OpenCV为图像扩边(填充)
10 0
|
8天前
|
Ubuntu 编译器 C++
Ubuntu系统下编译OpenCV4.8源码
本文档介绍了在Ubuntu系统下编译和安装OpenCV4.8的简单步骤:首先,通过wget命令下载源码包,然后解压;接着,安装必要的编译器和第三方库支持;最后,在源码目录创建build文件夹,执行cmake和make安装。整个过程包括下载、安装依赖和编译安装三个主要步骤。
23 6
|
8天前
|
机器学习/深度学习 传感器 算法
【OpenCV】告别人工目检:深度学习技术引领工业品缺陷检测新时代
【OpenCV】告别人工目检:深度学习技术引领工业品缺陷检测新时代
|
8天前
|
计算机视觉 Python
轻松掌握opencv的8种图像变换
轻松掌握opencv的8种图像变换
|
8天前
|
算法 计算机视觉
【OpenCV】- 图像修复
【OpenCV】- 图像修复