MATLAB图像处理:图像特征概念及提取方法HOG、SIFT

news2025/4/3 23:46:33

图像特征是计算机视觉中用于描述图像内容的关键信息,其提取质量直接影响后续的目标检测、分类和匹配等任务性能。本文将系统解析 全局与局部特征的核心概念,深入讲解 HOG(方向梯度直方图)与SIFT(尺度不变特征变换)的算法原理,并提供MATLAB代码实现及典型应用场景分析。

1. 图像特征基础

1.1 定义与分类
  • 图像特征:能够表征图像中目标形状、纹理或结构的关键信息,可为像素值、几何结构或变换域系数的抽象表达。
  • 分类
    • 全局特征:描述图像整体属性(如颜色直方图、纹理统计量)。
    • 局部特征:捕捉图像中显著点或区域的结构(如角点、边缘、关键点)。
1.2 特征提取核心目标
  • 区分性:不同类别的特征差异显著
  • 鲁棒性:对光照变化、旋转、缩放等干扰不敏感
  • 高效性:计算速度快,适合实时处理

2. 方向梯度直方图(HOG)

2.1 算法原理

HOG通过局部区域的梯度方向分布描述物体形状,适用于行人检测、手势识别等整体轮廓分析任务。

处理流程
  1. 预处理:转为灰度图像,应用Gamma校正减少光照影响
  2. 计算梯度:使用Sobel算子求取水平和垂直方向的梯度幅值G和方向 

  1. 分块统计:将图像划分为细胞单元(Cell),统计每个单元的梯度方向直方图(通常9个区间)
  2. 块归一化:将相邻的2×2细胞单元合并为块(Block),对直方图进行L2归一化提升光照鲁棒性
  3. 特征拼接:所有块的直方图串联成最终的高维特征向量

%% 读取图像并预处理
I = imread('刘亦菲.jpg');        % 替换为你的图像路径
I = imresize(I, [128, 128]);     % 调整图像大小
I_gray = rgb2gray(I);           % 转换为灰度图

%% 提取HOG特征
[hogFeatures, hogVisualization] = extractHOGFeatures(I_gray, ...
    'CellSize', [8 8], ...      % 每单元格大小
    'BlockSize', [2 2], ...     % 每块含2x2单元格
    'BlockOverlap', [1 1], ...  % 块间重叠单元格数
    'NumBins', 9);              % 梯度方向分9个区间

%% 可视化结果
figure;
subplot(1,2,1);
imshow(I_gray);
title('原图');

subplot(1,2,2);
imshow(I_gray); 
hold on;
plot(hogVisualization, 'Color','red'); % 叠加HOG特征
title('HOG特征可视化');
hold off;

%% 输出特征维度
disp(['HOG特征维度: ', num2str(length(hogFeatures))]);

 

关键步骤说明

  1. 图像预处理

    • 调整尺寸 (imresize):统一输入尺寸,特征维度固定。
    • 转灰度图 (rgb2gray):HOG通常处理单通道梯度。
  2. 参数设置

    • CellSize: 8x8 像素的单元格统计直方图。
    • BlockSize: 2x2 单元格的块归一化直方图,提升光照鲁棒性。
    • NumBins: 将梯度方向量化为 9 个区间。
  3. 可视化

    • 红色线条表示梯度方向分布,反映物体轮廓。

3. 尺度不变特征变换(SIFT)

3.1 算法原理

SIFT通过检测并描述尺度空间的极值点,实现对旋转、缩放、亮度变化的不变性,适用于图像匹配、三维重建等任务。

处理流程
  1. 构建尺度空间:通过高斯金字塔生成不同尺度的图像
  2. 检测关键点:在高斯差分(DoG)金字塔中寻找局部极值点
  3. 精确定位:去除低对比度和边缘响应点(通过Hessian矩阵筛选)
  4. 方向分配:计算关键点主方向(利用邻域梯度方向直方图)
  5. 生成描述子:将关键点邻域划分为4×4子区域,统计每个区域的梯度方向直方图(总计128维向量)
3.2 MATLAB实现示例
% 读取图像并提取SIFT特征
img1 = rgb2gray(imread('img1.jpg'));
img2 = rgb2gray(imread('img2.jpg'));

% 检测SIFT特征点
points1 = detectSIFTFeatures(img1);
points2 = detectSIFTFeatures(img2);

% 提取特征描述子
[features1, valid_points1] = extractFeatures(img1, points1);
[features2, valid_points2] = extractFeatures(img2, points2);

% 特征匹配
index_pairs = matchFeatures(features1, features2, 'MaxRatio', 0.6);
matched_points1 = valid_points1(index_pairs(:,1));
matched_points2 = valid_points2(index_pairs(:,2));

% 可视化匹配结果
figure; 
 imshowpair(img1,img2,'montage') 
title('原图(图1左侧,图2右侧)');
figure; 
showMatchedFeatures(img1, img2, matched_points1, matched_points2, 'montage');
title('SIFT特征匹配结果');

4. HOG与SIFT对比及应用场景

4.1 性能对比
指标HOGSIFT
特征维度较高(数千维度)高(每关键点128维)
鲁棒性对遮挡敏感对旋转、缩放、光照鲁棒
速度较慢(需构建多尺度空间)
适用任务目标检测(整体形状分析)图像匹配、三维重建(局部特征)
4.2 典型应用案例
  • HOG
    • 行人检测(配合SVM分类器)
    • 车牌识别中的字符定位
  • SIFT
    • 全景图像拼接(特征点匹配)
    • 基于内容的图像检索

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2299421.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kibana es 语法记录 elaticsearch

目录 一、认识elaticsearch 1、什么是正向索引 2、什么是倒排索引 二、概念 1、说明 2、mysql和es的对比 三、mapping属性 1、定义 四、CRUD 1、查看es中有哪些索引库 2、创建索引库 3、修改索引库 4、删除索引库 5、新增文档 6、删除文档 5、条件查询 一、认识…

手写一个Java Android Binder服务及源码分析

手写一个Java Android Binder服务及源码分析 前言一、Java语言编写自己的Binder服务Demo1. binder服务demo功能介绍2. binder服务demo代码结构图3. binder服务demo代码实现3.1 IHelloService.aidl3.2 IHelloService.java(自动生成)3.3 HelloService.java…

【动态规划篇】:当回文串遇上动态规划--如何用二维DP“折叠”字符串?

✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:动态规划篇–CSDN博客 文章目录 一.回文串类DP核心思想(判断所有子串是否是回文…

Windows 安装 GDAL 并配置 Rust-GDAL 开发环境-1

Rust-GDAL 是 Rust 语言的 GDAL(Geospatial Data Abstraction Library) 绑定库,用于处理地理数据。由于 GDAL 依赖较多,在 Windows 上的安装相对复杂,本文档将介绍如何安装 GDAL 并配置 Rust-GDAL 的开发环境。 1. 检…

第1期 定时器实现非阻塞式程序 按键控制LED闪烁模式

第1期 定时器实现非阻塞式程序 按键控制LED闪烁模式 解决按键扫描,松手检测时阻塞的问题实现LED闪烁的非阻塞总结补充(为什么不会阻塞) 参考江协科技 KEY1和KEY2两者独立控制互不影响 阻塞:如果按下按键不松手,程序就…

开源语音克隆项目 OpenVoice V2 本地部署

#本机环境 WIN11 I5 GPU 4060ti 16G 内存 32G #开始 git clone https://github.com/myshell-ai/OpenVoice.git conda create -n opvenv python3.9 -y conda activate opvenv pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/…

DeepSeek大模型一键部署解决方案:全平台多机分布式推理与国产硬件优化异构计算私有部署

DeepSeek R1 走红后,私有部署需求也随之增长,各种私有部署教程层出不穷。大部分教程只是简单地使用 Ollama、LM Studio 单机运行量化蒸馏模型,无法满足复杂场景需求。一些操作配置也过于繁琐,有的需要手动下载并合并分片模型文件&…

如何利用PLM软件有效地推进制造企业标准化工作?

在智能制造浪潮的推动下,中国制造业正面临从“规模扩张”向“质量提升”的关键转型。工信部数据显示,85%的制造企业在产品研发、生产过程中因标准化程度不足导致效率损失超20%,而标准化水平每提升10%,企业综合成本可降低5%-8%。如…

环境影响评价(EIA)中,土地利用、植被类型及生态系统图件的制作

在环境影响评价(EIA)中,土地利用、植被类型及生态系统图件的制作需依据科学、法规和技术规范,以确保数据的准确性和图件的规范性。以下是主要的制作依据: 1. 法律法规与政策依据 《中华人民共和国环境影响评价法》 明确…

更高效实用 vscode 的常用设置

VSCode 可以说是文本编辑神器, 不止程序员使用, 普通人用其作为文本编辑工具, 更是效率翻倍. 这里分享博主对于 VSCode 的好用设置, 让 VSCode 如虎添翼 进入设置 首先进入设置界面, 后续都在这里进行配置修改 具体设置 每项配置通过搜索关键字, 来快速定位配置项 自动保存…

【异或数列——博弈论】

题目 思路 异或和为0(即每一位都有偶数个1):平局最高有效位只有唯一的1:先手必胜最高有效位有奇数个1,偶数个0:先手必胜 若先选1产生优势,则剩下偶数个1,偶数个0:对手选…

草图绘制技巧

1、点击菜单栏文件–》新建–》左下角高级新手切换–》零件; 2、槽口:直槽口,中心点槽口,三点源槽口,中心点圆弧槽口; 3、草图的约束:需要按住ctrl键,选中两个草图,然后…

Spring Boot中如何自定义Starter

文章目录 Spring Boot中如何自定义Starter概念和作用1. 概念介绍2. 作用和优势2.1 简化依赖管理2.2 提供开箱即用的自动配置2.3 标准化和模块化开发2.4 提高开发效率2.5 提供灵活的配置覆盖3. 应用场景创建核心依赖1. 确定核心依赖的作用2. 创建 starter-core 模块2.1 依赖管理…

内容中台构建高效数字化内容管理新范式

内容概要 在数字化转型浪潮中,高效的内容管理能力已成为企业构建核心竞争力的关键要素。通过动态发布引擎、元数据智能分类与跨平台协作机制,企业能够实现内容的实时触达与精准分发,同时确保知识资产在多终端环境下的无缝适配与安全共享。这…

PyQt组态软件 拖拽设计界面测试

PyQt组态软件测试 最近在研究PyQt,尝试写个拖拽设计界面的组态软件,目前实现的功能如下: 支持拖入控件,鼠标拖动控件位置 拖动控件边缘修改控件大小支持属性编辑器,修改当前选中控件的属性 拖动框选控件,点选控件 控…

深度学习R4周:LSTM-火灾温度预测

🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊 任务: 数据集中提供了火灾温度(Tem1)、一氧化碳浓度(CO 1)烟雾浓度(Soot 1)…

Datawhale 数学建模导论二 笔记1

第6章 数据处理与拟合模型 本章主要涉及到的知识点有: 数据与大数据Python数据预处理常见的统计分析模型随机过程与随机模拟数据可视化 本章内容涉及到基础的概率论与数理统计理论,如果对这部分内容不熟悉,可以参考相关概率论与数理统计的…

UIView 与 CALayer 的联系和区别

今天说一下UIView 与 CALayer 一、UIView 和 CALayer 的关系 在 iOS 开发中,UIView 是用户界面的基础,它负责处理用户交互和绘制内容,而 CALayer 是 UIView 内部用于显示内容的核心图层(Layer)。每个 UIView 内部都有…

一键安装教程

Maven 安装 右键 以管理员身份运行点击 下一步安装完成后会同步配置环境变量打开 cmd, 输入 mvn 查看mvn版本修改 maven 本地仓库地址 见图三, 本地新建文件夹,修改为你本地文件夹地址 Redis 安装 右键 以管理员身份运行点击 下一步会安装到选择的文件夹下 JAVA\R…

李宏毅机器学习笔记:【6.Optimization、Adaptive Learning Rate】

Optimization 1.Adaptive Learning Rate2.不同的参数需要不同的学习率3.Root Mean Square4.RMSProp5.Adam6.learning rate scheduling7.warm up总结 critical point不一定是你在训练一个network时候遇到的最大的障碍。 1.Adaptive Learning Rate 也就是我们要给每个参数不同的…