熟练掌握CV中最基础的概念:图像特征,看这篇万字的长文就够了(一)

简介: 熟练掌握CV中最基础的概念:图像特征,看这篇万字的长文就够了(一)

图像特征

什么是图像特征?

| 特征

·对图像进行描述。

·指出图像中的相关信息。            

·将一组图像与其他图像区分开来。

| 类别

·全局特征:将图像视为一个整体。

·局部特征:图像中的部分区域。

| 正式定义

在计算机视觉和图像处理中,特征指的是为解决与某一应用有关的计算任务的一段信息。

·所有的机器学习和深度学习算法都依赖于特征。

 

什么能作为特征?

·单独的像素点强度不能作为特征

| 特征

·总体强度测量平均值,直方图,调色板等。

·边缘和山脊梯度和轮廓。

·特殊的角点特征和曲率。

·斑点和纹理。

·使用过滤器获得的特征。

 

例子

1,        像素点强度

image.png

像素点强度组合作为特征

2,        边缘

image.png


边缘作为特征

3,        关键点

image.png

关键点作为特征


什么是好的特征?

那些受外部因素影响不大的特征是好的特征。

| 特征不变性

·伸缩

·旋转

·转换

·透视法

·仿射

·颜色

·照度

 

角点特征

·角:定义为两条边的交点。·关键点:图像中具有明确位置且可以可靠检测的点。

| 适用范围

·运动检测和视频跟踪。·图像注册。·图像拼接和全景拼接。·3D建模和对象识别。

 

例子

1,        关键点

image.png

 关键点识别

2,        

image.png


角识别


Harris角点检测

| Harris角点检测算法可以分为5个步骤

·转化为灰度图

·计算空间导数

·设置结构向量

·计算Harris响应

·抑制非最大值

| 使用OpenCV实现Harris角点检测


''''' Harris Corners using OpenCV ''' %matplotlib inline  import numpy as np  import cv2  from matplotlib import pyplot as plt  img = cv2.imread("imgs/chapter9/chess_slant.jpg", 1)   #img = cv2.resize(img, (96, 96))  gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  gray = np.float32(gray)   ################################FOCUS###############################  dst = cv2.cornerHarris(gray,2,3,0.04)  ####################################################################   # Self-study: Parameters  plt.figure(figsize=(8, 8))  plt.imshow(dst, cmap="gray")  plt.show()

image.png

'''''  result is dilated for marking the corners '''  dst = cv2.dilate(dst,None)  plt.figure(figsize=(8, 8))  plt.imshow(dst, cmap="gray")  plt.show()


image.png

''''' Threshold for an optimal value, it may vary depending on the image.  We first calculate what is the maximum and minimum value of pixel in this image  '''   max_val = np.uint8(dst).max()  min_val = np.uint8(dst).min()  print("max_val = {}".format(max_val))  print("min_val = {}".format(min_val))

输出


max_val = 255  min_val = 0  img = cv2.imread("imgs/chapter9/chess_slant.jpg", 1)  img[dst>0.1*dst.max()]=[0,0,255]  plt.figure(figsize=(8, 8))  plt.imshow(img[:,:,::-1])  plt.show()

image.png

|利用OpenCV-harris角点求角点坐标

%matplotlib inline  import numpy as np  import cv2  from matplotlib import pyplot as plt   img = cv2.imread("imgs/chapter9/chess_slant.jpg", 1);  #img = cv2.resize(img, (96, 96))  gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)   # find Harris corners  gray = np.float32(gray)  dst = cv2.cornerHarris(gray,2,3,0.04)  dst = cv2.dilate(dst,None)  ret, dst = cv2.threshold(dst,0.01*dst.max(),255,0)  dst = np.uint8(dst)  # find centroids  ret, labels, stats, centroids = cv2.connectedComponentsWithStats(dst)  # define the criteria to stop and refine the corners  # Explain Criteria  criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 0.001)  corners = cv2.cornerSubPix(gray,np.float32(centroids),(5,5),(-1,-1),criteria)  # Now draw them  res = np.hstack((centroids,corners))  res = np.int0(res)  for x1, y1, x2, y2 in res:      #cv2.circle(img,(x1, y1), 5, (0,255,0), -1) # Point Centroids     cv2.circle(img,(x2, y2), 10, (0,0,255), -1) # Point corners  #img[res[:,1],res[:,0]]=[0,0,255]  #img[res[:,3],res[:,2]] = [0,255,0]  plt.figure(figsize=(8, 8))  plt.imshow(img[:,:,::-1])  plt.show()

image.png

目录
相关文章
|
存储 人工智能 自然语言处理
边缘智能的新时代:端侧大模型的研究进展综述
【10月更文挑战第9天】随着人工智能的发展,大语言模型在自然语言处理领域取得突破,但在资源受限的边缘设备上部署仍面临挑战。论文《On-Device Language Models: A Comprehensive Review》全面综述了端侧大模型的研究进展,探讨了高效模型架构、压缩技术、硬件加速及边缘-云协作等解决方案,展示了其在实时、个性化体验方面的潜力,并指出了未来的研究方向和挑战。
1070 2
|
8月前
|
编解码 算法 数据安全/隐私保护
一维信号的小波变换与重构算法matlab仿真
本程序使用MATLAB2022A实现一维信号的小波变换与重构,对正弦测试信号进行小波分解和重构,并计算重构信号与原信号的误差。核心步骤包括:绘制分解系数图像、上抽取与滤波重构、对比原始与重构信号及误差分析。小波变换通过多分辨率分析捕捉信号的局部特征,适用于非平稳信号处理,在信号去噪、压缩等领域有广泛应用。
|
存储 测试技术 计算机视觉
栈和队列经典练习题
栈和队列经典练习题
|
11月前
|
缓存 前端开发 JavaScript
Webpack 动态加载的原理
【10月更文挑战第23天】Webpack 动态加载通过巧妙的机制和策略,实现了模块的按需加载和高效运行,提升了应用程序的性能和用户体验。同时,它也为前端开发提供了更大的灵活性和可扩展性,适应了不断变化的业务需求和技术发展。
|
机器学习/深度学习 人工智能 算法
Python中实现简单神经网络
【9月更文挑战第2天】本文将通过Python编程语言,介绍如何从零开始构建一个简单的神经网络。我们将使用纯Python代码,不依赖任何外部库,来展示神经网络的核心概念和工作原理。文章将详细解释每个步骤,并最终实现一个能够进行基本模式识别的神经网络模型。通过这篇文章,读者可以对神经网络有一个直观的理解,并为进一步学习深度学习打下坚实的基础。
|
负载均衡 Java 开发者
如何在Spring Boot项目中实现微服务架构?
如何在Spring Boot项目中实现微服务架构?
|
编解码 开发工具 git
技术心得记录:小波变换(wavelettransform)的通俗解释(一)
技术心得记录:小波变换(wavelettransform)的通俗解释(一)
932 0
|
消息中间件 关系型数据库 MySQL
MySQL 到 Kafka 实时数据同步实操分享(1),字节面试官职级
MySQL 到 Kafka 实时数据同步实操分享(1),字节面试官职级
|
数据采集 XML 运维
主数据管理实施全流程保姆级教程,附带超级福利!
主数据管理实施全流程保姆级教程,附带超级福利!