圖像特征是計算機視覺中用于描述圖像內容的關鍵信息,其提取質量直接影響后續的目標檢測、分類和匹配等任務性能。本文將系統解析 全局與局部特征的核心概念,深入講解 HOG(方向梯度直方圖)與SIFT(尺度不變特征變換)的算法原理,并提供MATLAB代碼實現及典型應用場景分析。
1. 圖像特征基礎
1.1 定義與分類
- 圖像特征:能夠表征圖像中目標形狀、紋理或結構的關鍵信息,可為像素值、幾何結構或變換域系數的抽象表達。
- 分類:
- 全局特征:描述圖像整體屬性(如顏色直方圖、紋理統計量)。
- 局部特征:捕捉圖像中顯著點或區域的結構(如角點、邊緣、關鍵點)。
1.2 特征提取核心目標
- 區分性:不同類別的特征差異顯著
- 魯棒性:對光照變化、旋轉、縮放等干擾不敏感
- 高效性:計算速度快,適合實時處理
2. 方向梯度直方圖(HOG)
2.1 算法原理
HOG通過局部區域的梯度方向分布描述物體形狀,適用于行人檢測、手勢識別等整體輪廓分析任務。
處理流程:
- 預處理:轉為灰度圖像,應用Gamma校正減少光照影響
- 計算梯度:使用Sobel算子求取水平和垂直方向的梯度幅值G和方向?
- 分塊統計:將圖像劃分為細胞單元(Cell),統計每個單元的梯度方向直方圖(通常9個區間)
- 塊歸一化:將相鄰的2×2細胞單元合并為塊(Block),對直方圖進行L2歸一化提升光照魯棒性
- 特征拼接:所有塊的直方圖串聯成最終的高維特征向量
%% 讀取圖像并預處理
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))]);
?
關鍵步驟說明
-
圖像預處理
- 調整尺寸 (
imresize
):統一輸入尺寸,特征維度固定。 - 轉灰度圖 (
rgb2gray
):HOG通常處理單通道梯度。
- 調整尺寸 (
-
參數設置
CellSize
: 8x8 像素的單元格統計直方圖。BlockSize
: 2x2 單元格的塊歸一化直方圖,提升光照魯棒性。NumBins
: 將梯度方向量化為 9 個區間。
-
可視化
- 紅色線條表示梯度方向分布,反映物體輪廓。
3. 尺度不變特征變換(SIFT)
3.1 算法原理
SIFT通過檢測并描述尺度空間的極值點,實現對旋轉、縮放、亮度變化的不變性,適用于圖像匹配、三維重建等任務。
處理流程:
- 構建尺度空間:通過高斯金字塔生成不同尺度的圖像
- 檢測關鍵點:在高斯差分(DoG)金字塔中尋找局部極值點
- 精確定位:去除低對比度和邊緣響應點(通過Hessian矩陣篩選)
- 方向分配:計算關鍵點主方向(利用鄰域梯度方向直方圖)
- 生成描述子:將關鍵點鄰域劃分為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 性能對比
指標 | HOG | SIFT |
---|---|---|
特征維度 | 較高(數千維度) | 高(每關鍵點128維) |
魯棒性 | 對遮擋敏感 | 對旋轉、縮放、光照魯棒 |
速度 | 快 | 較慢(需構建多尺度空間) |
適用任務 | 目標檢測(整體形狀分析) | 圖像匹配、三維重建(局部特征) |
4.2 典型應用案例
- HOG:
- 行人檢測(配合SVM分類器)
- 車牌識別中的字符定位
- SIFT:
- 全景圖像拼接(特征點匹配)
- 基于內容的圖像檢索