% 读取二进制图像 binaryImage = imread('7-1.bmp');

% 获得骨架 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 = round(0.483 / pixelSize); % 最短的条纹长度 longStripePixels = zeros(size(skeletonImage)); for i = 1:connectivity.NumObjects if numel(connectivity.PixelIdxList{i}) < maxLength continue; end longStripePixels(connectivity.PixelIdxList{i}) = skeletonImage(connectivity.PixelIdxList{i}); end imwrite(longStripePixels, 'longStripePixels.png');

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


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

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