%读取图像 img = imread('7-1.tif');

% 将图像转化为二值化矩阵 bw = imbinarize(img);

% 骨架化操作 skel = bwmorph(bw, 'skel', Inf);

% 消除分支条纹 skel_pruned = bwmorph(skel, 'spur', 2);

% 计算条纹长度 pixel_size = 0.0595; % 空间分辨率为0.0595纳米/像素 lengths = [];

for i = 1:size(skel_pruned, 1) for j = 1:size(skel_pruned, 2) if skel_pruned(i, j) == 1 % 判断是否为对角线像素 if mod(i+j,2) == 0 pixel_length = pixel_size * 2; else pixel_length = pixel_size; end

        % 计算条纹长度
        [connectivity, num] = bwlabel(skel_pruned, 8);
        pixel_count = sum(connectivity(:) == connectivity(i, j));
        length = pixel_count * pixel_length;
        
        % 消除短条纹
        if length >= 0.483
            lengths = [lengths, length];
        end
    end
end

end

% 统计数据和图像展示 disp(['平均长度:', num2str(mean(lengths)), '纳米']); disp(['最长长度:', num2str(max(lengths)), '纳米']); disp(['最短长度:', num2str(min(lengths)), '纳米']); disp(['条纹数量:', num2str(length(lengths))]);

histogram(lengths); xlabel('条纹长度(纳米)'); ylabel('数量'); title('条纹长度分布图');

MATLAB图像处理:基于骨架化的条纹长度分析

原文地址: https://www.cveoy.top/t/topic/m5oy 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录