2026/4/16 14:44:52
网站建设
项目流程
厦门专业网站建设建站,昆山高端网站设计建设,个人如何优化网站有哪些方法,培训网络工程师机构一、实验核心概述1. 实验目标理解图像识别与分类的核心流程#xff08;数据准备→特征提取→模型训练→结果验证#xff09;#xff1b;掌握经典识别技术#xff1a;模板匹配#xff08;目标定位#xff09;、HOG 特征 SVM 分类#xff08;目标分类#xff09;、形态学…一、实验核心概述1. 实验目标理解图像识别与分类的核心流程数据准备→特征提取→模型训练→结果验证掌握经典识别技术模板匹配目标定位、HOG 特征 SVM 分类目标分类、形态学运算形状提取与计数熟悉 MATLAB 形态学处理、特征提取及分类器训练相关函数实现从简单目标识别到复杂分类的完整任务。2. 实验环境操作系统Windows 8/10/11软件版本MATLAB 2014 及以上版本部分功能需安装 Computer Vision Toolbox、Statistics and Machine Learning Toolbox3. 核心原理与关键函数模板匹配基于归一化互相关系数计算模板与图像子区域的相似度定位最匹配目标图像分类HOG 特征描述目标形状梯度信息 SVM 分类器线性核函数实现二分类形态学运算通过腐蚀、膨胀、开运算提取图像中特定形状矩形、线段结合连通区域标记实现目标计数关键函数normxcorr2模板匹配、extractHOGFeaturesHOG 特征提取、fitcsvmSVM 训练、strel/imopen形态学处理、bwlabel连通区域标记。二、完整实验内容与代码实现一模板匹配实现目标识别与定位实验任务读取包含多目标的图像→截取单个目标作为模板→计算归一化互相关系数→定位最匹配目标并标记。完整代码clear, clc, close all; % 读取原始图像和模板模板为待检测目标如单个硬币 img imread(Coins.png); % 包含多枚硬币的原始图像 template imread(Coin.png); % 单独截取的硬币模板 % 转换为灰度图消除颜色干扰简化计算 img_gray rgb2gray(img); template_gray rgb2gray(template); % 可视化原图与模板 figure(Name, 模板与原始图像, NumberTitle, off); subplot(1,2,1); imshow(img_gray); title(原始图像); subplot(1,2,2); imshow(template_gray); title(模板图像); % 计算归一化互相关系数相似度矩阵 corr_map normxcorr2(template_gray, img_gray); % 找到相似度最高的位置相关系数最大值对应的坐标 [max_corr, max_idx] max(corr_map(:)); [rows, cols] ind2sub(size(corr_map), max_idx); % 计算目标在原始图像中的左上角坐标 t_rows size(template_gray, 1); % 模板高度 t_cols size(template_gray, 2); % 模板宽度 top_left_row rows - t_rows 1; % 目标左上角行坐标 top_left_col cols - t_cols 1; % 目标左上角列坐标 % 标记并显示识别结果 figure(Name, 模板匹配结果, NumberTitle, off); imshow(img_gray); hold on; % 红色矩形框标记匹配目标 rectangle(Position, [top_left_col, top_left_row, t_cols, t_rows], ... EdgeColor, r, LineWidth, 2); title([模板匹配结果最大相关系数, num2str(max_corr, %.3f), ]); hold off;实验结果匹配结果红色矩形框精准定位到与模板最相似的目标最大相关系数接近 1本例为 1.000表示完全匹配适用场景适用于目标形状固定、背景简单的场景如零件定位、特定目标检索。二HOG 特征 SVM 实现汽车与自行车分类实验任务准备汽车 / 自行车两类训练样本→提取 HOG 特征→训练 SVM 分类器→对测试图像进行分类并可视化 HOG 特征。完整代码clear, clc, close all; % 步骤1设置数据集路径根据实际路径修改 car_dir C:\Users\xinxixueyuan\Desktop\数字图像处理\实验八\Matlab\dataSet\Car; bike_dir C:\Users\xinxixueyuan\Desktop\数字图像处理\实验八\Matlab\dataSet\Bike; % 步骤2读取训练集文件支持jpg、png格式 car_files [dir(fullfile(car_dir, *.jpg)); dir(fullfile(car_dir, *.png))]; bike_files [dir(fullfile(bike_dir, *.jpg)); dir(fullfile(bike_dir, *.png))]; % 步骤3提取HOG特征统一图像尺寸为128x64HOG特征常用尺寸 img_size [128, 64]; features []; % 存储所有样本特征 labels []; % 标签1汽车-1自行车 % 提取汽车样本HOG特征 for i 1:length(car_files) try img_path fullfile(car_dir, car_files(i).name); img imread(img_path); % 彩色图转灰度图 img_gray size(img, 3) 3 ? rgb2gray(img) : img; % 统一图像尺寸 img_resized imresize(img_gray, img_size); % 提取HOG特征 [hog_feat, ~] extractHOGFeatures(img_resized); features [features; hog_feat]; labels [labels; 1]; fprintf(已处理汽车图像 %d/%d\n, i, length(car_files)); catch ME fprintf(处理汽车图像 %s 失败%s\n, car_files(i).name, ME.message); end end % 提取自行车样本HOG特征 for i 1:length(bike_files) try img_path fullfile(bike_dir, bike_files(i).name); img imread(img_path); img_gray size(img, 3) 3 ? rgb2gray(img) : img; img_resized imresize(img_gray, img_size); [hog_feat, ~] extractHOGFeatures(img_resized); features [features; hog_feat]; labels [labels; -1]; fprintf(已处理自行车图像 %d/%d\n, i, length(bike_files)); catch ME fprintf(处理自行车图像 %s 失败%s\n, bike_files(i).name, ME.message); end end % 检查特征提取有效性 if size(features, 1) 0 error(未提取到有效特征请检查数据集路径或图像格式); end fprintf(\n特征提取完成共 %d 个样本每个样本 %d 维特征\n, size(features, 1), size(features, 2)); % 步骤4训练SVM分类器线性核函数标准化特征 fprintf(开始训练SVM分类器...\n); svm_model fitcsvm(features, labels, KernelFunction, linear, Standardize, true); % 计算训练准确率 train_pred predict(svm_model, features); train_accuracy sum(train_pred labels) / length(labels); fprintf(训练准确率%.2f%%\n, train_accuracy * 100); % 步骤5测试分类 test_img_path XiaomiSu7.png; % 测试图像路径 try test_img imread(test_img_path); test_gray size(test_img, 3) 3 ? rgb2gray(test_img) : test_img; test_resized imresize(test_gray, img_size); test_hog extractHOGFeatures(test_resized); % 提取测试图像HOG特征 % 预测类别 pred predict(svm_model, test_hog); % 可视化结果 figure(Name, SVM分类结果, NumberTitle, off); % 显示测试图像及分类结果 subplot(1,2,1); imshow(test_img); title(pred 1 ? 分类结果汽车 : 分类结果自行车, ... Color, pred 1 ? blue : red, FontSize, 14); % 可视化HOG特征 subplot(1,2,2); imshow(test_resized); hold on; plot(test_hog, LineWidth, 2, Color, green); title(HOG特征可视化, FontSize, 12); hold off; % 输出分类详情 fprintf(\n 测试分类结果 \n); fprintf(测试图像%s\n, test_img_path); fprintf(预测类别%s\n, pred 1 ? 汽车 : 自行车); fprintf(决策函数值%.4f\n, svm_model.Beta * test_hog svm_model.Bias); catch ME fprintf(测试图像处理失败%s\n, ME.message); end实验结果特征提取每个样本提取高维 HOG 特征能有效描述目标形状梯度信息分类效果训练准确率较高取决于样本数量与质量测试图像能被正确分类HOG 特征可视化呈现目标轮廓梯度分布核心优势HOG 特征对目标平移、缩放有一定鲁棒性SVM 线性核能高效实现二分类。三形态学运算提取矩形块与线段实验任务读取图像→二值化→通过不同结构元素的开运算→分别提取矩形块和 45° 线段→可视化结果。完整代码% 读取图像 Image imread(3.png); % 二值化OTSU自动计算阈值 Th graythresh(Image); OriginBW im2bw(Image, Th); % 图像反转便于形态学处理 BW1 1 - OriginBW; % 定义结构元素正方形提取矩形块、45°线段提取线段 se_square strel(square, 3); % 3x3正方形结构元素 se_line45 strel(line, 25, 45); % 长度25、角度45°的线段结构元素 % 开运算先腐蚀后膨胀提取目标形状 BW_rect 1 - imopen(BW1, se_square); % 提取矩形块 BW_line 1 - imopen(BW1, se_line45); % 提取45°线段 % 可视化结果 figure(Name, 形态学形状提取, NumberTitle, off); subplot(1,3,1); imshow(OriginBW); title(原始二值图像); subplot(1,3,2); imshow(BW_rect); title(矩形块提取); subplot(1,3,3); imshow(BW_line); title(线段提取); % 保存结果 imwrite(OriginBW, pattern1.bmp); imwrite(BW_rect, rectang1.bmp); imwrite(BW_line, line1.bmp);实验结果形态学原理开运算能平滑目标轮廓保留与结构元素形状相似的区域去除其他干扰提取效果正方形结构元素精准提取矩形块45° 线段结构元素高效提取对应角度线段目标与背景分离清晰。四形态学处理 连通区域标记实现米粒计数实验任务读取米粒图像→形态学开运算降噪→背景去除→二值化→连通区域标记→计数并标注米粒。完整代码clc; clear; close all; % 步骤1读取图像并转为灰度图 g imread(rice.png); if size(g, 3) 3 g rgb2gray(g); % 彩色图转灰度图 end % 步骤2形态学开运算先腐蚀后膨胀平滑轮廓、去除小噪声 SE strel(disk, 4); % 圆盘形结构元素半径4 I imopen(g, SE); % 步骤3背景去除提取背景并从原图中减去 BG imopen(I, strel(disk, 15)); % 大圆盘提取背景 I2 imsubtract(I, BG); % 图像减背景突出米粒目标 % 步骤4二值化OTSU最优阈值 level graythresh(I2); bw2 imbinarize(I2, level); % 步骤5连通区域标记8连通域标记每个米粒 [labeled, numObjects] bwlabel(bw2, 8); [L, n] bwlabel(bw2, 8); % n为米粒总数 % 步骤6可视化处理流程与计数结果 figure(Name, 米粒计数与标注, Position, [100, 100, 1200, 800]); subplot(2,3,1); imshow(g); title(原图); subplot(2,3,2); imshow(I); title(开运算后); subplot(2,3,3); imshow(BG); title(背景); subplot(2,3,4); imshow(I2); title(消除背景); subplot(2,3,5); imshow(bw2); title(二值化); % 标注米粒质心与编号 subplot(2,3,6); imshow(bw2); title([米粒计数, num2str(n)]); hold on; for k 1:n [r, c] find(L k); % 找到第k个米粒的所有像素坐标 rbar mean(r); % 质心行坐标 cbar mean(c); % 质心列坐标 % 白色圆圈标记质心 plot(cbar, rbar, Marker, o, MarkerEdgeColor, k, MarkerFaceColor, w, MarkerSize, 8); % 红色编号标注 text(cbar, rbar, num2str(k), Color, red, FontSize, 12, FontWeight, bold); end hold off; % 单独显示编号标注结果 figure(Name, 米粒编号标注, NumberTitle, off); imshow(bw2); title(米粒编号); hold on; for k 1:n [r, c] find(L k); rbar mean(r); cbar mean(c); plot(cbar, rbar, Marker, *, MarkerEdgeColor, w, MarkerSize, 10); text(cbar, rbar, num2str(k), Color, blue, FontSize, 14); end hold off; % 输出计数结果 fprintf(米粒总数%d\n, n);实验结果处理流程开运算降噪→背景去除→二值化→连通区域标记逐步分离米粒与背景计数效果能准确标记每个米粒的质心与编号计数结果精准本例为 94 颗应用场景适用于颗粒状目标计数如粮食颗粒、细胞计数。三、实验总结与关键知识点1. 核心技术梳理实验任务核心方法关键函数核心优势适用场景目标定位模板匹配归一化互相关normxcorr2、rectangle实现简单、定位精准固定形状目标检索、定位二分类HOG 特征 SVMextractHOGFeatures、fitcsvm形状描述能力强、分类高效目标分类如车辆、行人分类形状提取形态学开运算strel、imopen针对性提取特定形状几何形状分割矩形、线段提取目标计数连通区域标记bwlabel、find计数精准、支持标注颗粒状目标计数米粒、细胞2. 关键注意事项路径设置模板匹配、分类任务中需确保图像路径正确避免文件读取失败样本质量SVM 分类效果依赖训练样本数量与多样性样本过少易过拟合结构元素选择形态学运算中结构元素的形状、大小需与目标形状匹配如提取线段用线结构元素连通域选择颗粒计数时8 连通域比 4 连通域更贴合实际米粒边缘可能不规整。3. 应用场景拓展模板匹配工业零件定位、印刷品目标检索、特定标志识别HOGSVM交通场景车辆 / 行人检测、安防监控目标分类形态学运算医学图像分割如血管、肿瘤轮廓提取、工业缺陷检测连通区域计数农业产量估算粮食颗粒计数、生物医学细胞计数。通过本次实验系统掌握了图像识别与分类的核心技术从简单目标定位到复杂分类任务覆盖了传统图像处理的经典应用场景为后续深度学习图像识别如 CNN奠定了基础。