binaryImage = imread('7-1.bmp');
grayImage = rgb2gray(binaryImage); % 转换为灰度图像
threshold = graythresh(grayImage); % 自适应阈值分割
binaryImage = imbinarize(grayImage, threshold);

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;
    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);
MATLAB图像处理:提取图像中长条纹的长度信息

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

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