MATLAB图像处理:提取图像中长条纹的长度信息
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);
原文地址: https://www.cveoy.top/t/topic/m03b 著作权归作者所有。请勿转载和采集!