图像特征提取是计算机视觉中的重要任务,它有助于识别、分类、检测和跟踪对象。以下是一些常用的图像特征提取算法及其简介:
颜色直方图(Color Histogram):
局部二值模式(Local Binary Pattern,LBP):
方向梯度直方图(Histogram of Oriented Gradients,HOG):
尺度不变特征变换(Scale-Invariant Feature Transform,SIFT):
加速稳定特征(Speeded-Up Robust Features,SURF):
卷积神经网络特征(Convolutional Neural Network Features):
历程:
颜色直方图 (Color Histogram) 示例:
#include
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) 示例:
#include
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) 示例:
#include
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) 示例:
#include
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) 示例:
#include
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) 示例:
#include
#include
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;
}