计算机视觉之图像特征提取

图像特征提取是计算机视觉中的重要任务,它有助于识别、分类、检测和跟踪对象。以下是一些常用的图像特征提取算法及其简介:

  1. 颜色直方图(Color Histogram)

    • 简介:颜色直方图表示图像中各种颜色的分布情况。通过将图像中的像素分成颜色通道(如RGB)并计算每个通道的颜色值分布,可以捕捉到图像的颜色信息。
    • 应用:颜色直方图常用于图像检索、图像分类和图像匹配等任务。
  2. 局部二值模式(Local Binary Pattern,LBP)

    • 简介:LBP是一种用于纹理特征提取的方法。它通过比较每个像素与其邻域像素的灰度值来构建特征。LBP特征对纹理的变化和结构有很好的描述能力。
    • 应用:LBP常用于人脸识别、纹理分类和目标检测等任务。
  3. 方向梯度直方图(Histogram of Oriented Gradients,HOG)

    • 简介:HOG是一种用于物体检测的特征提取方法,特别适用于行人检测。它通过计算图像中每个像素的梯度方向并构建梯度方向的直方图来表示图像。
    • 应用:HOG广泛应用于行人检测、目标识别和行为分析等领域。
  4. 尺度不变特征变换(Scale-Invariant Feature Transform,SIFT)

    • 简介:SIFT是一种用于检测和描述图像中局部特征的方法。它对图像的尺度、旋转和亮度变化具有不变性,因此在各种条件下都表现良好。
    • 应用:SIFT广泛用于特征匹配、物体识别和图像配准等任务。
  5. 加速稳定特征(Speeded-Up Robust Features,SURF)

    • 简介:SURF是一种用于图像特征提取的快速算法。它结合了SIFT的特点,并使用积分图像来加速特征检测和描述子计算。
    • 应用:SURF适用于实时应用,如实时目标跟踪和图像拼接。
  6. 卷积神经网络特征(Convolutional Neural Network Features)

    • 简介:基于深度学习的方法,如卷积神经网络(CNN),已经取得了在图像特征提取任务上的显著成功。通过在预训练的CNN模型上提取特征向量,可以获得强大的图像表示。
    • 应用:CNN特征广泛用于图像分类、目标检测、图像生成等各种计算机视觉任务。

历程:

颜色直方图 (Color Histogram) 示例

cpp 复制代码
#include <opencv2/opencv.hpp>

int main() {
    cv::Mat image = cv::imread("image.jpg");
    cv::Mat hist;

    // 将图像转换为HSV颜色空间
    cv::cvtColor(image, image, cv::COLOR_BGR2HSV);

    // 计算直方图
    int histSize = 256; // 直方图的大小
    float range[] = {0, 256}; // 像素值范围
    const float* histRange = {range};
    cv::calcHist(&image, 1, 0, cv::Mat(), hist, 1, &histSize, &histRange);

    // 打印直方图
    for (int i = 0; i < histSize; i++) {
        std::cout << "Bin " << i << ": " << hist.at<float>(i) << std::endl;
    }

    return 0;
}

局部二值模式 (Local Binary Pattern, LBP) 示例

cpp 复制代码
#include <opencv2/opencv.hpp>

int main() {
    cv::Mat image = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);
    cv::Mat lbpImage;

    // 计算LBP图像
    cv::Ptr<cv::ximgproc::LBP> lbp = cv::ximgproc::createLBPFast();
    lbp->compute(image, lbpImage);

    return 0;
}

方向梯度直方图 (Histogram of Oriented Gradients, HOG) 示例

cpp 复制代码
#include <opencv2/opencv.hpp>

int main() {
    cv::Mat image = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);
    cv::HOGDescriptor hog;

    // 设置HOG参数
    hog.winSize = cv::Size(64, 128); // 检测窗口大小
    hog.blockSize = cv::Size(16, 16); // 块大小
    hog.blockStride = cv::Size(8, 8); // 块的步幅
    hog.cellSize = cv::Size(8, 8); // 细胞大小

    // 计算HOG特征向量
    std::vector<float> descriptors;
    hog.compute(image, descriptors);

    return 0;
}

加速稳健特征 (Speeded-Up Robust Features, SURF) 示例

cpp 复制代码
#include <opencv2/opencv.hpp>

int main() {
    cv::Mat image = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);
    cv::Ptr<cv::xfeatures2d::SURF> surf = cv::xfeatures2d::SURF::create();

    // 检测关键点和计算描述子
    std::vector<cv::KeyPoint> keypoints;
    cv::Mat descriptors;
    surf->detectAndCompute(image, cv::noArray(), keypoints, descriptors);

    return 0;
}

尺度不变特征变换 (Scale-Invariant Feature Transform, SIFT) 示例

cpp 复制代码
#include <opencv2/opencv.hpp>

int main() {
    cv::Mat image = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);
    cv::Ptr<cv::xfeatures2d::SIFT> sift = cv::xfeatures2d::SIFT::create();

    // 检测关键点和计算描述子
    std::vector<cv::KeyPoint> keypoints;
    cv::Mat descriptors;
    sift->detectAndCompute(image, cv::noArray(), keypoints, descriptors);

    return 0;
}

卷积神经网络特征 (Convolutional Neural Network Features) 示例

cpp 复制代码
#include <opencv2/opencv.hpp>
#include <opencv2/dnn.hpp>

int main() {
    cv::Mat image = cv::imread("image.jpg");
    cv::dnn::Net net = cv::dnn::readNetFromCaffe("deploy.prototxt", "model.caffemodel");

    // 预处理图像(归一化、尺寸调整等)
    cv::Mat blob = cv::dnn::blobFromImage(image, 1.0, cv::Size(224, 224), cv::Scalar(104, 117, 123));

    // 设置输入图像
    net.setInput(blob);

    // 前向传播并获取特征向量
    cv::Mat features = net.forward();

    return 0;
}
相关推荐
学习前端的小z6 分钟前
【AIGC】如何通过ChatGPT轻松制作个性化GPTs应用
人工智能·chatgpt·aigc
埃菲尔铁塔_CV算法34 分钟前
人工智能图像算法:开启视觉新时代的钥匙
人工智能·算法
EasyCVR35 分钟前
EHOME视频平台EasyCVR视频融合平台使用OBS进行RTMP推流,WebRTC播放出现抖动、卡顿如何解决?
人工智能·算法·ffmpeg·音视频·webrtc·监控视频接入
打羽毛球吗️41 分钟前
机器学习中的两种主要思路:数据驱动与模型驱动
人工智能·机器学习
蒙娜丽宁43 分钟前
《Python OpenCV从菜鸟到高手》——零基础进阶,开启图像处理与计算机视觉的大门!
python·opencv·计算机视觉
好喜欢吃红柚子1 小时前
万字长文解读空间、通道注意力机制机制和超详细代码逐行分析(SE,CBAM,SGE,CA,ECA,TA)
人工智能·pytorch·python·计算机视觉·cnn
小馒头学python1 小时前
机器学习是什么?AIGC又是什么?机器学习与AIGC未来科技的双引擎
人工智能·python·机器学习
神奇夜光杯1 小时前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
正义的彬彬侠1 小时前
《XGBoost算法的原理推导》12-14决策树复杂度的正则化项 公式解析
人工智能·决策树·机器学习·集成学习·boosting·xgboost
Debroon1 小时前
RuleAlign 规则对齐框架:将医生的诊断规则形式化并注入模型,无需额外人工标注的自动对齐方法
人工智能