传统图像处理之几何特征寻找算法(一)

简介: 传统图像处理之几何特征寻找算法(一)

几何特征


几何学,相信是每个初高中生的噩梦,做不完的辅助线,各种边边角,成了多少人的恐惧。那么,图像的几何特征除了我们小时候学过的形状、位置、角度、距离等基本特征之外,还有边缘、角点和斑点等。这一节我们就来学习图像几何特征的算法。


边缘特征


这里的边缘不是指图片的四条边,而是指图像中物体的边缘,由于物体的颜色和周围的颜色不同,所以边缘的特性是像素值快速变化,或者说像素值函数一节导数的局部极值点。


如何提取边缘特征?需要先用高斯函数进行滤波(高斯去噪)。高思滤波函数是线性平滑滤波,其对整幅图像像素值进行加权平均,使得新的图像每一个像素的值,都由原图像同一点的像素值和其领域内的其他点的像素值经过加权平均后的到。具体操作:用一个用户指定的卷积核去扫描图像中的每一个像素,然后用卷积核范围内像素的加权平均值去替代卷积核中心像素的值。需要注意的是,高斯滤波只能除去高斯噪声(分布为正态分布的噪声)。


61b8b127056279e28ed2019c36ffe3a7_27335f793f6e4d748f4929aeb9c763e1.jpeg


8c143249de3580bae69585835a2879b.png


由于高斯分布的定义域是无穷大的,理论上需要一个无穷大的高斯核,但是一般我们只需要用到三个标准差以内的函数值即可。当我们决定了标准差之后,就可以计算高斯核了,注意高斯核内所有权重的总和应为1(为了保证总像素不变),所以计算完高斯核的各个权重后还要除以高斯内核内所有权重的总和。


常用的卷积核为3x3的卷积核,然后使用ndimage.convolve()函数进行卷积操作。该函数有两个参数,第一个参数是需要使用卷积核的图片,第二个参数是卷积核矩阵。ndimage函数库功能非常强大,包括但不限于傅里叶变换,图像旋转,图像拉伸,以及图像滤波。


例1:


import numpy as np
import cv2
import scipy.ndimage as ndimage
#生成卷积核
kernel=np.array([[1,1],[1,1]])
#读取图片
img=cv2.imread('F:\Image\\test5.jpeg',0)
#进行卷积操作
img1=ndimage.convolve(img,kernel)
#显示图片
cv2.imshow('1',img)
cv2.imshow('2',img1)
cv2.waitKey(0)



高斯核使用相比普通的卷积核更加方便,只需要使用cv2.GaussianBlur()函数即可,此函数有三个参数,分别是输入的图像,高斯核大小和高斯函数标准差。高斯核大小一般为(3,3)或(5,5),高斯函数标准差设置为0,则会根据高斯核大小进行自动计算。



上面两种卷积操作后,通过对比,第二种的边缘处更加平滑,第一种的卷积核处理后,图像的边缘十分显眼。两种操作,博主更建议使用第二种,简单。而且效果更好。


通过高斯去噪后,再利用梯度获取像素值函数极值,即可得到边缘特征。高斯内核的标准差决定了边缘提取的尺度,对于清晰得边界,标准差可以取得大一些,反之,对于模糊的边界,标准差需要取得小些。这是由于标准差越小,提取到的尺度越小,提取的边缘比较清晰。


角点


与边缘特征 的定义相似,角点不是指图像的四个角,而是指一个局部的小区域与周围的区域不同。常用的角点检测方法有:Harris角点检测和Fast角点检测。


Harris角点的定义:向任意方向移动小观察窗,像素值函数都会显著变化。具体的算法是对于图像上的(x,y)坐标点,平移(Δx,Δy)后,计算相似性:


963ec8a54dfeca4c2e1daccd23ba375.png


简化后自相关函数变为二元二次函数,或者说是椭圆函数。椭圆形状和M的特征值有关。对于角点,两个特征值都很大,且几乎相等。对于平面,两个特征值都很小,且几乎相等。这是由于在特征值大的方向上,图像的像素值变化也大。实际上,在实际操作中,并不需要将特征值提取出来,只需要对矩阵进行操作即可。计算完自相关函数,得到矩阵后,再计算各像素的Harris响应值R,并进行阈值化处理:


a5130cf6b0c013cbd6dc8be558ecfc4.png


import cv2
import numpy as np
#读取图片
img=cv2.imread('F:\Image\\test6.jpeg',0)
#关键点存储在 points中
points
#绘制特征图
img=cv2.drawKeypoints(img,points,img,color=(255,0,0))
#显示结果
cv2.imshow('绘制关键点',img)
cv2.waitKey(0)


Harris角点检测


         

Harris角点检测使用cv2.cornerHarris()函数,参数为img(需要检测的图像)、blocksize(检测窗口的大小),ksize(求导窗口的大小)、k(角点检测方程中的自由参数a)。


示例代码:


#角点检测
import cv2
import numpy as np
#读取图片
img=cv2.imread('F:\Image\\test7.jpg')
#转化为灰度图像
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#转化为32位浮点
gray=np.float32(gray)
#进行角点检测
R=cv2.cornerHarris(gray,2,3,0.04)
#对于响应值大于一定阈值的点进行标红
img[R>0.05*R.max()]=[0,0,255]
#显示结果
cv2.imshow('Harris角点检测',img)
cv2.waitKey(0)


1d6fe47b06d3eda1b0d2e0728d03142c_e09e134876604d4681ab0a4d516a3754.png


这张图片可能不容易分清,我们可以调整参数,比如阈值化处理时对阈值点进行缩小。


7662be79faf450210d3b216c3e30be39_d06f121f8434405eb7fecf4e69f221ee.png


这张图片是不是就很清晰了。这是由于参数a对检测值影响较大,随着a增大,响应值R减小,检测到的角点数量减小,反之,随着a减小,角点检测敏感度增加,检测到的角点数量增加。但是,亮度和对比度对Harris角点检测算法影响较小,这是由于梯度极值点没有发生变化。

相关文章
|
2月前
|
移动开发 算法 前端开发
前端常用算法全解:特征梳理、复杂度比较、分类解读与示例展示
前端常用算法全解:特征梳理、复杂度比较、分类解读与示例展示
33 0
|
4月前
|
算法 JavaScript 前端开发
国标非对称加密:RSA算法、非对称特征、js还原、jsencrypt和rsa模块解析
国标非对称加密:RSA算法、非对称特征、js还原、jsencrypt和rsa模块解析
345 1
|
3月前
|
机器学习/深度学习 算法
基于心电信号时空特征的QRS波检测算法matlab仿真
本课题旨在通过提取ECG信号的时空特征并应用QRS波检测算法识别心电信号中的峰值。使用MATLAB 2022a版本实现系统仿真,涵盖信号预处理、特征提取、特征选择、阈值设定及QRS波检测等关键步骤,以提高心脏疾病诊断准确性。预处理阶段采用滤波技术去除噪声,检测算法则结合了一阶导数和二阶导数计算确定QRS波峰值。
|
4月前
|
机器学习/深度学习 算法 搜索推荐
支付宝商业化广告算法问题之在DNN模型中,特征的重要性如何评估
支付宝商业化广告算法问题之在DNN模型中,特征的重要性如何评估
|
6月前
|
机器学习/深度学习 存储 人工智能
算法金 | 使用随机森林获取特征重要性
**随机森林算法简介**:集成多个决策树提升性能,常用于各类任务。在葡萄酒分类项目中,使用`RandomForestClassifier`实现模型,100棵树,得分100%。特征重要性显示了哪些化学成分影响最大。通过特征选择保持高准确性,证明了有效特征选择的重要性。7个关键特征中脯氨酸和酒精含量最重要。简洁高效,适用于特征工程。[链接指向知识星球]
76 5
|
6月前
|
人工智能 搜索推荐 算法
常见的经典排序算法及其特征
【6月更文挑战第21天】本文介绍经典排序算法的特征和例子,详细步骤和例子包含在内,可以只选择阅读关心的内容。
65 3
|
6月前
|
移动开发 算法 计算机视觉
技术笔记:openCV特征点识别与findHomography算法过滤
技术笔记:openCV特征点识别与findHomography算法过滤
115 0
|
3天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
110 80
|
22天前
|
算法
基于WOA算法的SVDD参数寻优matlab仿真
该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。
|
8天前
|
供应链 算法 调度
排队算法的matlab仿真,带GUI界面
该程序使用MATLAB 2022A版本实现排队算法的仿真,并带有GUI界面。程序支持单队列单服务台、单队列多服务台和多队列多服务台三种排队方式。核心函数`func_mms2`通过模拟到达时间和服务时间,计算阻塞率和利用率。排队论研究系统中顾客和服务台的交互行为,广泛应用于通信网络、生产调度和服务行业等领域,旨在优化系统性能,减少等待时间,提高资源利用率。

热门文章

最新文章