Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >计算机视觉中的图像特征提取技术详解

计算机视觉中的图像特征提取技术详解

作者头像
芯动大师
发布于 2025-05-19 09:43:58
发布于 2025-05-19 09:43:58
278010
代码可运行
举报
文章被收录于专栏:防止网络攻击防止网络攻击
运行总次数:10
代码可运行

简介

计算机视觉图像特征提取是指从图像中提取出具有代表性的特征,以便计算机能够更好地理解和处理图像。常用的特征提取方法包括边缘检测、角点检测、纹理分析、颜色直方图等。在深度学习领域,卷积神经网络(CNN)也被广泛应用于图像特征提取任务。通过CNN,可以自动学习出图像中具有代表性的特征,从而提高计算机视觉领域的各项任务的准确性。

边缘检测

边缘检测是计算机视觉中一种常见的图像处理方法,用于检测图像中的边缘。在图像中,边缘是物体或场景中明显的亮度变化或颜色变化的位置,通常可以用来表示图像中的物体轮廓或物体边界。下面是几种常用算子的讲解:

1.Sobel算子

Sobel算子是一种基于梯度的边缘检测算子,其原理是通过计算图像中每个像素点周围像素点的亮度变化大小来检测图像中的边缘。Sobel算子可以分别检测图像中水平和垂直方向的边缘,最终将两个方向上的边缘合并得到最终的边缘检测结果。

其中,Gx表示水平方向上的梯度模板,Gy表示垂直方向上的梯度模板。Sobel算子可以通过将图像与Gx、Gy模板进行卷积操作,得到图像中每个像素点的梯度值,然后根据梯度值的大小来确定像素点是否为边缘像素。

2.Prewitt算子

Prewitt算子与Sobel算子类似,也是一种基于梯度的边缘检测算子,其原理与Sobel算子相似,不同之处在于Prewitt算子的模板不同。

3.Roberts算子

Roberts算子是一种基于差分的边缘检测算子,其原理是通过对图像进行差分操作,得到图像中每个像素点的梯度值,然后根据梯度值的大小来确定像素点是否为边缘像素。

4.Canny算子

Canny算子是一种基于多阶段处理的边缘检测算子,其原理是通过对图像进行高斯滤波、计算梯度、非极大值抑制、双阈值处理等多个阶段的处理,最终得到图像中高质量的边缘检测结果。Canny算子在实际应用中具有较高的精度和稳定性,被广泛应用于计算机视觉领域的各种任务中。

角点检测

角点检测是计算机视觉中的一种重要算法,用于寻找图像中的角点,也称为兴趣点。角点是图像中具有局部最大曲率或变化率的位置,通常被认为是图像中最具有特征性的点之一。角点检测可以用于图像匹配、三维重建、目标跟踪等领域。

1.Harris角点检测算法

Harris角点检测算法基于图像的灰度值变化来判断是否为角点。该算法计算每个像素点周围邻域的自相关矩阵,并用矩阵的特征值来判断该点是否为角点。如果特征值都比较大,则该点为角点;如果只有一个特征值比较大,则该点为边缘点;如果两个特征值都比较小,则该点为平滑区域。

C++实现

代码语言:javascript
代码运行次数:10
运行
AI代码解释
复制
Mat src = imread("test.jpg");
    if (src.empty()) {
        cout << "Could not open or find the image!\n" << endl;
        return -1;
    }

    Mat src_gray, dst, dst_norm, dst_norm_scaled;
    int blockSize = 2;
    int apertureSize = 3;
    double k = 0.04;
    int thresh = 200;

    cvtColor(src, src_gray, COLOR_BGR2GRAY);
    dst = Mat::zeros(src.size(), CV_32FC1);

    cornerHarris(src_gray, dst, blockSize, apertureSize, k);

    normalize(dst, dst_norm, 0, 255, NORM_MINMAX, CV_32FC1, Mat());
    convertScaleAbs(dst_norm, dst_norm_scaled);

    for (int i = 0; i < dst_norm.rows; i++) {
        for (int j = 0; j < dst_norm.cols; j++) {
            if ((int)dst_norm.at<float>(i, j) > thresh) {
                circle(dst_norm_scaled, Point(j, i), 5, Scalar(0), 2, 8, 0);
            }
        }
    }

Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
blockSize = 2
apertureSize = 3
k = 0.04
thresh = 200

dst = cv2.cornerHarris(gray, blockSize, apertureSize, k)

dst_norm = np.empty_like(dst)
cv2.normalize(dst, dst_norm, 0, 255, cv2.NORM_MINMAX)

dst_norm_scaled = cv2.convertScaleAbs(dst_norm)

for i in range(dst_norm.shape[0]):
    for j in range(dst_norm.shape[1]):
        if dst_norm[i,j] > thresh:
            cv2.circle(dst_norm_scaled, (j,i), 5, (0), 2)

需要注意的是,在实际应用中,需要根据图像的具体特点来调整算法的参数,以获得更好的效果。同时,Harris角点检测算法也存在一些限制,比如对旋转和尺度变换不具有不变性,因此,在实际应用中需要结合其他算法,以提高检测的准确性和鲁棒性。

Shi-Tomasi角点检测算法

Shi-Tomasi角点检测算法是对Harris角点检测算法的改进,它计算每个像素点周围邻域的最小特征值,并用最小特征值来判断该点是否为角点。该算法比Harris算法更加稳健,能够更好地处理图像中的噪声和图像变换。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
maxCorners = 100
qualityLevel = 0.01
minDistance = 10
corners = cv2.goodFeaturesToTrack(gray, maxCorners, qualityLevel, minDistance)

corners = np.int0(corners)

for i in corners:
    x,y = i.ravel()
    cv2.circle(img,(x,y),3,(0,0,255),-1)

使用OpenCV库实现了Shi-Tomasi角点检测算法,对输入的图像进行角点检测,并将结果显示出来。其中,maxCorners表示最多检测的角点数,qualityLevel是角点质量的阈值,minDistance是角点之间的最小距离。

FAST角点检测算法

FAST(Features from Accelerated Segment Test)角点检测算法是一种用于实时图像处理的高效角点检测算法。该算法通过比较像素点与其邻域像素点的灰度值来判断该点是否为角点,从而实现快速检测角点的功能。

FAST角点检测算法的具体实现步骤如下:

  • 选择一个像素点p作为候选角点;
  • 设置一个阈值t,将p的灰度值与其邻域内所有像素的灰度值进行比较,如果p的灰度值与其中n个像素的灰度值之差都大于t,则认为该点为角点;
  • 为了避免检测到邻域内的多个像素点作为角点,需要对检测到的角点进行非极大值抑制,即只保留灰度值最大的角点。

需要注意的是,在实际应用中,需要根据图像的具体特点来调整算法的参数,以获得更好的效果。同时,FAST角点检测算法也存在一些限制,比如对噪声和图像变换的鲁棒性较差,需要结合其他算法进行增强。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fast = cv2.FastFeatureDetector_create()
kp = fast.detect(gray, None)

img2 = cv2.drawKeypoints(img, kp, None, color=(0,255,0))

其中,cv2.FastFeatureDetector_create用于创建FAST角点检测器,kp为检测到的关键点。

纹理分析

纹理分析在计算机视觉、图像处理、机器学习等领域有着广泛的应用,例如图像分类、图像检索、医学影像分析、人脸识别等。在实际应用中,需要根据具体的任务和图像特点,选择合适的纹理分析方法,并对算法进行优化和改进,以获得更好的效果。

1.灰度共生矩阵(GLCM)

灰度共生矩阵是一种用于描述图像中灰度分布的方法。它可以统计图像中相邻像素之间的灰度值差异,并生成一个共生矩阵。通过对这个共生矩阵进行分析和计算,可以提取出图像中的纹理特征。

  • 将图像进行灰度化处理;
  • 根据指定的距离和方向参数,计算图像中相邻像素之间的灰度值差异,并统计每种差异出现的次数,生成共生矩阵;
  • 根据共生矩阵计算出各种纹理特征,例如对比度、能量、熵、相关性等。
2.局部二值模式(LBP)

局部二值模式是一种用于描述图像中纹理特征的方法。它可以通过比较像素点与其邻域像素点的灰度值,来判断该像素点所属的纹理类型。通过对图像中所有像素点进行局部二值模式计算,可以生成用于分类和检索的特征向量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 定义 LBP 算法函数
def LBP(img, radius=1, neighbors=8):
    height, width = img.shape
    lbp_img = np.zeros((height, width), dtype=np.uint8)
  
    for row in range(radius, height - radius):
        for col in range(radius, width - radius):
            center = img[row, col]
            code = 0
            for i in range(neighbors):
                x = col + int(radius * np.cos(2 * np.pi * i / neighbors))
                y = row - int(radius * np.sin(2 * np.pi * i / neighbors))
                if img[y, x] > center:
                    code += 1 << i
            lbp_img[row, col] = code
    return lbp_img

# 计算 LBP 图像
lbp_img = LBP(gray)

需要注意的是,在计算 LBP 图像时,需要对边缘像素进行特殊处理,以免出现越界问题。

方向梯度直方图

方向梯度直方图(Histogram of Oriented Gradients,HOG)是一种用于描述图像纹理特征的方法,它可以通过计算图像中局部区域的梯度方向和大小来得到该区域的方向梯度直方图,从而描述图像的纹理特征。HOG 算法具有良好的旋转不变性和局部不变性,常用于目标检测、人脸识别等领域。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 计算 HOG 特征向量
hog_feature, hog_image = hog(gray, orientations=9, pixels_per_cell=(8, 8),
                             cells_per_block=(2, 2), block_norm='L2-Hys', visualize=True)

在计算 HOG 特征向量时,需要使用第三方库 skimage。总的来说,HOG 算法是一种基于梯度方向的图像纹理特征描述方法,可以用于图像分类、目标检测、人脸识别等领域。在实际应用中,需要根据具体的任务和图像特点,选择合适的算法,并对算法进行优化和改进,以获得更好的效果。

颜色直方图

颜色直方图(Color Histogram)是一种用于描述图像颜色分布的方法,它可以统计图像中每个像素的颜色分布情况,并将其表示为一个直方图。颜色直方图通常用于图像检索、图像分类、目标识别等领域。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
快乐学AI系列——计算机视觉(2)特征提取和描述
在计算机视觉中,图像特征是指从图像中提取出的一些有意义的信息,如边缘、角点、颜色等。通过对图像特征的提取,可以将图像转换为可处理的数字形式,从而使计算机能够理解和处理图像。
MATRIX.矩阵之芯
2023/03/29
9600
快乐学AI系列——计算机视觉(2)特征提取和描述
图像特征提取(颜色,纹理,形状)
计算机视觉的特征提取算法研究至关重要。在一些算法中,一个高复杂度特征的提取可能能够解决问题(进行目标检测等目的),但这将以处理更多数据,需要更高的处理效果为代价。而颜色特征无需进行大量计算。只需将数字图像中的像素值进行相应转换,表现为数值即可。因此颜色特征以其低复杂度成为了一个较好的特征。
小白学视觉
2020/12/07
4.4K0
图像特征提取(颜色,纹理,形状)
利用MATLAB进行图像处理-基础技术与实例
图像处理是计算机科学和工程中一个重要的领域,广泛应用于医疗、工业、安防等多个行业。MATLAB作为一种强大的数学软件,提供了丰富的工具箱和函数,方便进行图像处理。本篇文章将介绍MATLAB图像处理的基础技术,并结合代码实例进行详细解析。
一键难忘
2025/01/13
3620
角点检测集锦(Harris,Shi-Tomasi,亚像素级角点检测)原理及相关实现
一个像素所在的区域一般情况下可以分为以下三种情况,平坦,边,角点三种情况,如下图最右边。 在角点处,沿任意方向运动都会引起像素颜色的明显变化等价于:在角点附近,图像梯度具有至少两个主方向。
种花家的奋斗兔
2020/11/13
1.3K0
计算机视觉 OpenCV Android | 特征检测与匹配之角点检测——Harris角点检测与Shi-Tomasi角点检测
Harris角点检测与Shi-Tomasi角点检测都是经典的角点特征提取算法, 但两者在API的使用上有出入(详见文中代码或GitHub项目);
凌川江雪
2019/03/04
1.3K0
计算机视觉 OpenCV Android | 特征检测与匹配之角点检测——Harris角点检测与Shi-Tomasi角点检测
特征检测之Harris角点检测
如果有n阶矩阵A,其矩阵的元素都为实数,且矩阵A的转置等于其本身,则称A为实对称矩阵。
Datawhale
2020/07/09
1.5K0
特征检测之Harris角点检测
图像处理之特征提取
知乎上看到一个话题—— 目前火热的 Deep Learning 会灭绝传统的 SIFT / SURF 特征提取方法吗? ---- 由于之前研究过SIFT和HOG这两种传统的特征提取方法,故本篇文章先对SIFT和HOG作一综述,并比较二者优缺点。之后,将SIFT和HOG同神经网络特征提取做一对比,浅谈对上述问题的看法。如果能写得快一些,再简单介绍其他几种传统的特征提取的方法——SURF、ORB、LBP、HAAR等等。 ---- 目录 [1] SIFT(尺度不变特征变换) [2] HOG(方向梯度直方图)
echobingo
2018/04/25
5.8K0
图像处理之特征提取
特征提取——纹理特征
图像处理之特征提取(二)之LBP特征简单梳理 https://blog.csdn.net/coming_is_winter/article/details/72859957 https://blog.csdn.net/zouxy09/article/details/7929531 LBP特征理解。 http://blog.csdn.net/hqh45/article/details/24501097 LBP(Local Binary Pattern,局部二值模式)是一种用来描述图像局部纹理特征的算子;它具有旋转不变性和灰度不变性等显著的优点。它是首先由T. Ojala, M.Pietikäinen, 和 D. Harwood 在1994年提出,用于纹理特征提取。而且,提取的特征是图像的局部的纹理特征;
AomanHao
2022/01/14
1.9K0
使用Python+OpenCV进行图像处理(三)| 视觉入门
检测是计算机视觉任务中的主要任务之一,而且应用很广泛。检测技术可以帮助人类检测那些容易被肉眼忽略的错误;也可以”帮助“自动驾驶汽车感知空间信息。无疑自动化的检测技术的广泛应用将为我们带来效率与安全。
磐创AI
2019/05/14
2.3K1
使用Python+OpenCV进行图像处理(三)| 视觉入门
OpenCV与图像处理(十)
图像处理是利用计算机对图像进行去噪、增强、复原、重建、编码、压缩、几何变换、分割,提取特征等的理论、方法和技术。图像处理中,输入的是低质量的图像,输出的是改善质量后的图像。
Must
2020/07/27
1.4K0
OpenCV 之 角点检测
角点 (corners) 的定义有两个版本:一是 两条边缘的交点,二是 邻域内具有两个主方向的特征点。
用户8408908
2021/03/18
6500
全面综述:图像特征提取与匹配技术
链接 | https://zhuanlan.zhihu.com/p/133301967
AI算法与图像处理
2020/08/28
6.2K0
全面综述:图像特征提取与匹配技术
图像匹配中Harris角点特征提取
在进行图像检测或者是识别的时候,我们需要提取出一些有特征的点加以识别,最常用的就是基于点的识别。这里所谓的点,其实就是一些重要的点,比如轮廓的拐角,线段的末端等。这些特征比较容易识别,而且不容易受到光照等环境的影响,因此在许多的特征匹配算法中十分常见。
mythsman
2022/11/14
9130
图像匹配中Harris角点特征提取
Sober算子边缘检测与Harris角点检测1「建议收藏」
Harris opencv 的对应代码 cv2.cornerHarris(src, blockSize, ksize, k[, dst[, borderType]]) 参数类型 src – 输入灰度图像,float32类型 blockSize – 用于角点检测的邻域大小,就是上面提到的窗口的尺寸 ksize – 用于计算梯度图的Sobel算子的尺寸 k – 用于计算角点响应函数的参数k,取值范围常在0.04~0.06之间
全栈程序员站长
2022/09/14
5170
Sober算子边缘检测与Harris角点检测1「建议收藏」
opencv角点检测学习总结[通俗易懂]
如果一个点在两个正交方向上都有明显的导数,则我们认为此点更倾向于是独一无二的,所以许多可跟踪的特征点都是角点。
全栈程序员站长
2022/09/27
1K0
【计算机视觉】基础图像知识点整理
在数字图像中,各像素点的亮度或色彩信息,即每个像素点的取值称为灰度,一幅图像所包含的灰度总数称为灰度级。
zstar
2022/06/09
1.5K0
【计算机视觉】基础图像知识点整理
特征类型和图像分割
我们最想检测的就是角点,因为角点是可重复性最高的特征,也就是说因为角点是可重复性最高的特征,给出关于同一景象的两张或以上图像 我们就能很轻易地识别出这类特征。 举一个简单的例子:
小飞侠xp
2018/08/29
1.1K0
熟练掌握CV中最基础的概念:图像特征,看这篇万字的长文就够了
目录 1,图像特征 2,角点特征 3,使用OpenCV和PIL进行特征提取和可视化 4,特征匹配 5,图像拼接
deephub
2020/05/09
4K0
熟练掌握CV中最基础的概念:图像特征,看这篇万字的长文就够了
【计算机视觉】基础图像知识点整理
在数字图像中,各像素点的亮度或色彩信息,即每个像素点的取值称为灰度,一幅图像所包含的灰度总数称为灰度级。
zstar
2022/06/14
1.6K0
【计算机视觉】基础图像知识点整理
图像局部特征提取
图像特征可以包括颜色特征、纹理特征、形状特征以及局部特征点等。其中局部特点具有很好的稳定性,不容易受外界环境的干扰。图像特征提取是图像分析与图像识别的前提,它是将高维的图像数据进行简化表达最有效的方式,从一幅图像的的数据矩阵中,我们看不出任何信息,所以我们必须根据这些数据提取出图像中的关键信息,一些基本元件以及它们的关系。
范中豪
2019/09/30
3.1K0
图像局部特征提取
推荐阅读
相关推荐
快乐学AI系列——计算机视觉(2)特征提取和描述
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验