摘要
在材料科学与土木工程领域,沥青孔隙率是评价其耐久性和稳定性的重要指标。本文提出一种基于图像处理的孔隙率自动计算方法,通过MATLAB实现灰度化、对比度增强、形态学处理等关键步骤,最终输出试样孔隙率。代码注释清晰,可直接应用于实际工程图像分析。
目录
- 需求背景
- 算法流程
- 代码实现(逐行注释)
- 实验结果
- 总结与资源
一、需求背景
沥青试样孔隙率的传统测量方法依赖人工显微镜观测,存在效率低、主观性强等问题。本文基于数字图像处理技术,实现以下目标:
- 自动化计算:输入试样照片,自动输出孔隙率
- 抗干扰处理:消除光照不均、表面纹理干扰
- 形态学优化:精确分离粘连孔隙
二、算法流程
三、代码实现
%% 1.图像预处理
clear all; close all; warning off;% 读取并截取核心区域(避免边缘干扰)
picpath = ‘试样图片/4-3.jpg’;
Im = imread(picpath);
[row,col,~] = size(Im);
Im = Im(ceil(row*0.2):ceil(row*0.8), ceil(col*0.2):ceil(col*0.8),:);% 灰度化与反色处理(突出孔隙区域)
Img = double(rgb2gray(Im))/256;
ImgF = 1 – Img; % 孔隙在反色后表现为高亮%% 2.对比度增强
Imeq = adapthisteq(ImgF, ‘NumTiles’, [8 8], ‘ClipLimit’, 0.005); % CLAHE算法%% 3.二值化分割
T = graythresh(Imeq); % Otsu自动阈值
Imeq2 = imbinarize(Imeq, T*0.8); % 降低阈值增强孔隙识别%% 4.形态学处理
SE = strel(‘arbitrary’, eye(2));
Imeq3 = imerode(Imeq2, SE); % 腐蚀消除噪声点
SE = strel(‘disk’, 1);
Imeq4 = imopen(Imeq3, SE); % 开运算平滑边界
SE = strel(‘square’, 4);
Imeq5 = imclose(Imeq4, SE); % 闭运算填充孔隙
Imeq5 = imclose(Imeq5, SE); % 二次闭运算强化效果%% 5.孔隙率计算
poreArea = sum(Imeq5(:) == 1); % 统计白色像素(孔隙区域)
totalArea = numel(Imeq5);
porosity = poreArea / totalArea;%% 6.结果可视化
figure;
subplot(1,2,1); imshow(Im); title(‘原始试样’);
subplot(1,2,2); imshow(Imeq5);
title([‘孔隙率: ‘, num2str(porosity*100, ‘%.2f’), ‘%’]);
实验结果
处理阶段 | 图像特征描述 |
---|---|
原始图像 | 可见明显黑色孔隙与砂石纹理 |
CLAHE增强后 | 孔隙对比度提升,边界更清晰 |
形态学处理后 | 独立孔隙完整,背景干净 |