修改后的代码如下:

% 读取图像 img = imread('7-1.tif'); % 将图像转为二值化矩阵 bw = im2bw(img); % 骨架化操作 skel = bwmorph(bw, 'skel', Inf); % 消除分支条纹 skel_pruned = bwmorph(skel, 'spur', 2); % 计算条纹长度 pixel_size = 0.0595; % 空间分辨率为0.0595纳米/像素 line_lengths = []; for i = 2:size(skel_pruned, 1)-1 for j = 2:size(skel_pruned, 2)-1 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)); line_length = pixel_count * pixel_length; % 消除短条纹 if line_length >= 0.483 && i < size(skel_pruned, 1)-1 && j < size(skel_pruned, 2)-1 % 修改处 line_lengths = [line_lengths, line_length]; end end end end % 统计数据和图像展示 disp(['平均长度:', num2str(mean(line_lengths)), '纳米']); disp(['最长长度:', num2str(max(line_lengths)), '纳米']); disp(['最短长度:', num2str(min(line_lengths)), '纳米']); disp(['条纹数量:', num2str(length(line_lengths))]); histogram(line_lengths); xlabel('条纹长度(纳米)'); ylabel('数量'); title('条纹长度分布图');

主要修改在位置 1 处,将 i 和 j 的取值范围修改为 < size(skel_pruned, 1)-1 和 < size(skel_pruned, 2)-1,避免越界。

读取图像 img = imread7-1tif; 将图像转为二值化矩阵 bw = im2bwimg; 骨架化操作 skel = bwmorphbw skel Inf; 消除分支条纹 skel_pruned = bwmorphskel spur 2; 计算条纹长度 pixel_size = 00595; 空间分辨率为00595纳米像素 line_lengths = ; for i

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

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