当前位置: 首页 > news >正文

计算机视觉----opencv高级操作(二)(图像的直方图均衡化,角点检测,特征提取Sift)

数据准备:(这是参考图片,实际可以换成自己想用的图片)

black.jpg

zhiwen_duan.png

mm.jpg

一、 图像的直方图均衡化

  • 概念:直方图均衡化是一种增强图像对比度的方法,通过调整图像的灰度分布,使原本灰度值集中的区域变得更分散,从而让图像细节更清晰。
  • 原理:基于图像的灰度直方图(统计每个灰度值出现的频率),将其映射为均匀分布的直方图,扩展灰度值的动态范围。
  • 应用:常用于医学影像、监控图像等对比度较低的场景,改善视觉效果。
  • OpenCV 实现:通过 cv2.equalizeHist() 函数实现,需注意该函数仅支持单通道(灰度)图像。

示例代码

woman = cv2.imread('black.jpg',cv2.IMREAD_GRAYSCALE)
woman = cv2.resize(woman,(300,400))
plt.hist(woman.ravel(),bins=256)
plt.show()
###
woman_equalize = cv2.equalizeHist(woman)
plt.hist(woman_equalize.ravel(),bins=256)res = np.hstack((woman,woman_equalize))
cv_show('woman_equalize',res)# # # 自适应直方图均衡化(局部直方图处理), 通过局部调整图像的直方图分布来提升图像的对比度和细节表现力, 当需要保存细节特征, 需要做局部处理
# # # cv2.createCLAHE([, clipLimit[, tileGridSize]]) → retval
# # # 参数说明:
# # # clipLimit: 颜色对比度的阈值, 可选项, 默认值8
# # # titleGridSize: 局部直方图均衡化的模板(邻域)大小, 可选项, 默认值(8, 8)clahe = cv2.createCLAHE(clipLimit=1,tileGridSize=(16,16))
woman_clahe = clahe.apply(woman)
res = np.hstack((woman,woman_equalize,woman_clahe))
cv_show('phone_equalize',res)

二、角点检测

  • 概念:角点是图像中灰度变化剧烈的点(如物体的拐角、边缘的交点),是图像中稳定且具有代表性的特征。
  • 常用算法
    • Harris 角点检测:通过计算图像局部区域的灰度变化,判断是否为角点(在任意方向移动窗口,灰度变化都很大)。
    • Shi-Tomasi 角点检测:对 Harris 算法的改进,通过更合理的响应函数提高角点检测的稳定性。
  • 应用:图像拼接、目标跟踪、相机标定等,用于提取图像中的关键特征点。
  • OpenCV 实现cv2.cornerHarris()(Harris 算法)和 cv2.goodFeaturesToTrack()(Shi-Tomasi 算法)。
cornerHarris(img, blockSize, ksize, k[, dst[, borderType]]) -> dstimg: 输入图像。blockSize: 角点检测中要考虑的领域大小。ksize: Sobel求导中使用的窗口大小。k: Harris角点检测方程中的自由参数,取值参数为[0.04,0.06].dst: 返回numpy.ndarray对象,大小和src相同,值越大,对应像素是角点的概率越高

示例代码


img = cv2.imread("zhiwen_duan.png")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
dst = cv2.cornerHarris(gray, blockSize=4, ksize=3, k=0.04)# 标记检测到的角点
img[dst > 0.05 * dst.max()] = [0, 0, 255]
# 这里通过对角点响应进行阈值处理,标记出检测到的角点。
# 0.05 * dst.max()是一个阈值,大于这个值的像素点会被标记为红色。
cv2.imshow("img", img)
cv2.waitKey(0)

三、SIFT 特征提取

  • 概念:SIFT(Scale-Invariant Feature Transform,尺度不变特征变换)是一种局部特征描述算法,能在不同尺度、旋转、光照条件下提取稳定的特征点。
  • 特点
    • 尺度不变性:通过高斯金字塔和差分高斯金字塔检测不同尺度下的特征点。
    • 旋转不变性:以特征点的梯度方向为基准进行方向归一化。
    • 鲁棒性:对光照变化、噪声、部分遮挡等有较强的抵抗能力。
  • 应用:图像匹配、物体识别、全景拼接等。
  • OpenCV 实现:由于专利原因,OpenCV 较高版本中 SIFT 需通过 cv2.SIFT_create() 调用(需安装扩展模块),返回的特征点包含位置、尺度、方向和描述子等信息。
  • sift.detect(img)在图像中查找关键点

示例代码:

man = cv2.imread("mm.jpg")
man_gray = cv2.cvtColor(man, cv2.COLOR_BGR2GRAY)#
sift = cv2.SIFT_create()  # sift对象
kp = sift.detect(man_gray)
# kp.pt: 关键点的(x, y)
# 坐标。
# kp.size: 关键点的大小(尺度)。
# kp.angle: 关键点的方向。
# kp.response: 关键点的响应值。
# kp.octave: 关键点所在的金字塔层级。
# 绘制富有关信息的关键点。
man_sift = cv2.drawKeypoints(man, kp, outImage=None, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imshow("man_sift", man_sift)
cv2.waitKey(0)
#
# ## 使用sift.compute()计算关键点描述符,方便后期的特征匹配
kp, des = sift.compute(man, kp)  #
print(np.array(kp).shape, des.shape)
# 输出关键点的形状描述符的形状。
# np.array(kp).shape 表示关键点的数量和属性。
# des.shape 表示描述符的数量和属性

扩展(一些额外的特征提取方法)

除了 SIFT 之外,OpenCV 中还有许多常用的特征提取算法,各自适用于不同场景,以下是一些补充:

1. SURF(Speeded Up Robust Features)
  • 特点:SIFT 的加速版本,通过近似计算减少运算量,同时保持了尺度、旋转不变性,对模糊和光照变化也有较强鲁棒性。
  • 原理:使用盒式滤波器近似高斯二阶导数,简化特征点检测和描述子计算,速度比 SIFT 快数倍。
  • 应用:实时性要求较高的场景,如视频流中的目标匹配。
  • 注意:同 SIFT 一样受专利保护,需通过 OpenCV 扩展模块调用(cv2.xfeatures2d.SURF_create())。
2. ORB(Oriented FAST and Rotated BRIEF)
  • 特点:开源免费的高效特征提取算法,结合了 FAST 角点检测和 BRIEF 描述子的优点,并添加了旋转不变性和尺度不变性改进。
  • 原理
    • 用 FAST 算法快速检测角点(通过比较像素与周围邻域像素的灰度差异)。
    • 为特征点分配方向(基于灰度质心),解决 BRIEF 描述子不具备旋转不变性的问题。
  • 优势:速度远快于 SIFT 和 SURF,适合实时应用。
  • 应用:SLAM(同步定位与地图构建)、实时目标跟踪、移动端视觉任务。
  • OpenCV 实现cv2.ORB_create()
3. BRIEF(Binary Robust Independent Elementary Features)
  • 特点:一种二进制描述子算法,不负责特征点检测(需配合其他角点检测算法,如 FAST),仅生成二进制特征描述符。
  • 原理:通过随机选择特征点周围的若干对像素,比较其灰度值生成二进制串(0/1),计算速度快且存储成本低。
  • 局限:不具备旋转和尺度不变性,对光照变化较敏感。
  • 应用:对速度要求高但场景稳定的任务(如静态图像匹配)。
4. FAST(Features from Accelerated Segment Test)
  • 特点:一种快速角点检测算法,专注于特征点定位而非描述,以速度快著称。
  • 原理:在像素周围画一个半径为 3 的圆,若圆上有连续 N 个像素的灰度值与中心像素差异超过阈值,则判定为角点(常用 N=12)。
  • 优势:检测速度极快,适合实时系统。
  • 局限:不生成特征描述子,需与其他描述子(如 BRIEF)结合使用。
5. 特征提取的核心思路
  • 特征点:优先选择图像中稳定、独特的点(如角点、边缘端点、斑点),这些点在视角变化时仍能被稳定识别。
  • 描述子:对特征点周围的局部区域进行编码(如灰度分布、梯度信息),生成可用于匹配的向量或二进制串,描述子需具备区分性(不同特征点的描述子差异大)和鲁棒性(同一特征点在不同条件下的描述子相似)。
  • 匹配方式:常用欧氏距离(对 SIFT/SURF)或汉明距离(对二进制描述子如 ORB/BRIEF)衡量两个特征点的相似度。

文章转载自:

http://0OSFFx1y.rhjhy.cn
http://hRkrfClE.rhjhy.cn
http://H9cOaic0.rhjhy.cn
http://h15PzhSx.rhjhy.cn
http://GRvXkQZ9.rhjhy.cn
http://AX82s80j.rhjhy.cn
http://qwH26AhQ.rhjhy.cn
http://Upr3XLDH.rhjhy.cn
http://KXEsPBa9.rhjhy.cn
http://VV11DqGf.rhjhy.cn
http://dV4Sdl9T.rhjhy.cn
http://SgkSVmAe.rhjhy.cn
http://GNTN0kqu.rhjhy.cn
http://axcxAS10.rhjhy.cn
http://Bxjf7Vys.rhjhy.cn
http://wizuM2Ox.rhjhy.cn
http://xCVz1QdF.rhjhy.cn
http://kKHD49WJ.rhjhy.cn
http://rU98SB9g.rhjhy.cn
http://lMzYnFrx.rhjhy.cn
http://k2bBE2Xj.rhjhy.cn
http://T23Piuam.rhjhy.cn
http://GJ1CnaMt.rhjhy.cn
http://7xwOEXCz.rhjhy.cn
http://L3EECMz2.rhjhy.cn
http://niJ7HLAs.rhjhy.cn
http://c51Ncesv.rhjhy.cn
http://URPBG1J9.rhjhy.cn
http://A0zlgRoJ.rhjhy.cn
http://teeuEIck.rhjhy.cn
http://www.dtcms.com/a/380502.html

相关文章:

  • Vue 3 中监听多个数据变化的几种方法
  • nodejs 、 npm、vite的版本对应关系及创建一个指定版本的 Vite 项目
  • 5. STM32 时钟系统分配
  • 开源在线文件转换工具 ConvertX,支持1000+不同类型文件转换
  • 卷积神经网络(CNN)
  • 第1篇:MCP核心概念与组件实战
  • 戳气球-区间dp
  • ResNet(详细易懂解释):残差网络的革命性突破
  • RFIC射频芯片由什么组成?
  • OpenCV的cv2.VideoCapture如何加GStreamer后端
  • 自由学习记录(98)
  • 【爬坑指南】亚马逊文件中心 AWS S3 预签名URL 前端直传
  • 【技术教程】如何将文档编辑器集成至用PHP编写的Web应用程序中
  • AWS RDSInstance模型优化实践:从字段长度调整到索引策略全面提升
  • ADSP-ADI sharc 内存配置笔记
  • 嵌入式C语言-关键字typedef
  • daily notes[44]
  • 手机端APP解析工具开发实战——从0到1实现漏洞检测与接口分析
  • Mysql数据库多表设计
  • open和fopen的区别
  • 排序---选择排序(Selection Sort)
  • 玩转PostMan之调试天气接口-心知天气 API
  • OpenHarmony DHCP 全栈深度剖析:从 DhcpClientStateMachine 到双栈 dhcpd 的客户端-服务器架构设计与源码实现
  • Linux 前后台作业控制及管理
  • 【设计模式】题目小练2
  • 软考中级习题与解答——第五章_面向对象方法(2)
  • 【智慧城市】2025年中国地质大学(武汉)暑期实训优秀作品(4):智矿中国
  • wslg 应用白色边框问题(Jetbrains 系列白色边框)
  • jmeter配置数据库连接步骤
  • Dest1ny安全漫谈-如何做好一个安全项目