需要源码和图片请点赞关注收藏后评论区留言私信~~~
一、加速鲁棒特征检测
加速鲁棒特征( 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()
创作不易 觉得有帮助请点赞关注收藏~~~