% 读取二进制图像 binaryImage = imread('binaryImage.png');

% 获得骨架 skeletonImage = bwmorph(binaryImage, 'skel', Inf);

% 获得像素连接性 connectivity = bwconncomp(skeletonImage);

% 消除分支条纹 for i = 1:connectivity.NumObjects if numel(connectivity.PixelIdxList{i}) >= 3 skeletonImage(connectivity.PixelIdxList{i}) = 0; end end

% 计算条纹长度 pixelSize = 0.0595; % 空间分辨率 stripeLengths = []; for i = 1:connectivity.NumObjects if numel(connectivity.PixelIdxList{i}) < 3 % 忽略短条纹 continue; end stripePixels = skeletonImage(connectivity.PixelIdxList{i}); stripeLength = sum(stripePixels) * pixelSize; % 对角线像素长度计算为像素大小的 2 倍 stripeLength = stripeLength + (sqrt(2) - 1) * sum(stripePixels(:)==2) * 2 * pixelSize; stripeLengths(end+1) = stripeLength; end

% 保存剩余的长条纹 maxLength = 0.483 / pixelSize; % 最短的条纹长度 longStripePixels = []; for i = 1:connectivity.NumObjects if numel(connectivity.PixelIdxList{i}) < maxLength continue; end longStripePixels = [longStripePixels; skeletonImage(connectivity.PixelIdxList{i})]; end imwrite(longStripePixels, 'longStripePixels.png');

% 统计条纹长度 histogram(stripeLengths); % 绘制长度直方图 meanLength = mean(stripeLengths); % 平均长度 maxLength = max(stripeLengths); % 最大长度 minLength = min(stripeLengths); % 最小长度

Matlab 实现条纹长度分析:基于骨架提取和连接性分析

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

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