MATLAB图像处理:提取和分析条纹长度
使用MATLAB提取和分析条纹长度
本教程将演示如何使用MATLAB从图像中提取条纹,计算其长度并绘制条纹长度直方图。
步骤:
-
读入图像:
% 读入原始图像 img = imread('7-1.tif'); -
转换为灰度图像:
% 转换为灰度图像 gray_img = rgb2gray(img); -
二值化图像:
% 二值化图像 bw_img = imbinarize(gray_img); -
骨架化操作:
% 骨架化操作 skel_img = bwmorph(bw_img, 'skel', Inf); -
计算像素长度:
pixel_size = 0.0595; % 空间分辨率为0.0595(纳米/像素) -
去除端点和分支点:
skel_img_diag = diag(skel_img); skel_img_diag(skel_img_diag == 1) = 2 * pixel_size; skel_img(skel_img_diag == 2 * pixel_size) = 0; % 消除分支条纹 branch_points = bwmorph(skel_img, 'branchpoints'); end_points = bwmorph(skel_img, 'endpoints'); skel_img(branch_points) = 0; skel_img(end_points) = 0; -
提取条纹:
% 提取条纹 cc = bwconncomp(skel_img); skel_props = regionprops(cc, 'PixelIdxList', 'PixelList', 'Area'); -
计算条纹长度:
% 计算条纹长度 skel_lengths = zeros(numel(skel_props), 1); for i = 1:numel(skel_props) skel_length = skel_props(i).Area * pixel_size; skel_lengths(i) = skel_length; end -
消除短条纹:
% 消除短条纹 long_skel_lengths = skel_lengths(skel_lengths >= 0.483,:); -
统计数据和图像展示:
% 统计数据和图像展示
disp(['Total number of stripes: ', num2str(numel(skel_props))]);
disp(['Total length of stripes: ', num2str(sum(skel_lengths)), ' nm']);
disp(['Number of long stripes: ', num2str(numel(long_skel_lengths))]);
disp(['Total length of long stripes: ', num2str(sum(long_skel_lengths)), ' nm']);
figure; imshow(img); hold on;
for i = 1:numel(skel_props)
plot(skel_props(i).PixelList(:, 1), skel_props(i).PixelList(:, 2), 'r');
end
title('Skeletonized Stripes');
figure; histogram(long_skel_lengths, 'BinWidth', 1);
xlabel('Stripe Length (nm)');
ylabel('Frequency');
title('Histogram of Long Stripes');
代码解释:
bwmorph(bw_img, 'skel', Inf)使用形态学操作对二值图像进行骨架化,得到条纹的中心线。regionprops(cc, 'PixelIdxList', 'PixelList', 'Area')计算每个连通域的面积,像素列表和索引列表,用于确定条纹的长度。skel_lengths(skel_lengths >= 0.483,:)用于筛选出长度大于0.483纳米的条纹。- 最后,使用
histogram函数绘制长条纹的直方图。
注意:
在消除短条纹时,需要确保 skel_lengths 是一个列向量,才能正确地使用索引。
结果:
本代码将显示:
- 原始图像上叠加的骨架化条纹。
- 长条纹长度的直方图。
- 统计信息:条纹总数、总长度、长条纹数量和长条纹总长度。
应用:
本代码可以应用于各种领域,例如材料科学,用于分析材料的纳米结构,或生物学,用于分析细胞内的微管结构。
更多信息:
- MATLAB图像处理工具箱:https://www.mathworks.com/products/image.html
- bwmorph 函数:https://www.mathworks.com/help/images/ref/bwmorph.html
- regionprops 函数:https://www.mathworks.com/help/images/ref/regionprops.html
原文地址: https://www.cveoy.top/t/topic/m1kC 著作权归作者所有。请勿转载和采集!