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

%将二值图像进行骨架提取 skeletonImage = bwmorph(binaryImage,'skel',Inf);

%计算像素长度 pixelLength = 0.1; %假设像素大小为0.1nm

%消除分支条纹 branchPoints = bwmorph(skeletonImage,'branchpoints'); endPoints = bwmorph(skeletonImage,'endpoints'); junctionPoints = branchPoints + endPoints; junctionPoints = imfill(junctionPoints,'holes'); skeletonImage(junctionPoints) = false;

%解释为条纹 [labelImage, numLabels] = bwlabel(skeletonImage, 4); labelSizes = zeros(numLabels,1); for i = 1:numLabels labelSizes(i) = sum(labelImage(:) == i); end labelSizes(labelSizes < 3) = 0; skeletonImage = ismember(labelImage, find(labelSizes));

%计算条纹长度 labelSizes = labelSizes * pixelLength; for i = 1:numLabels [y,x] = find(labelImage == i); distances = pdist2([y(1),x(1)],[y(end),x(end)]); if distances > 1 %对角线像素 labelSizes(i) = labelSizes(i) * 2; end end

%删除短条纹 shortLabels = find(labelSizes < 0.483); skeletonImage(ismember(labelImage,shortLabels)) = false;

%存储剩余条纹 remainingLabels = find(labelSizes >= 0.483); remainingImage = ismember(labelImage, remainingLabels);

%显示结果图像 imshow(remainingImage);

MATLAB代码:二值图像骨架提取和条纹分析

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

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