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;
    if any(stripePixels(:) > 1)
        stripeLength = stripeLength + (sqrt(2) - 1) * sum(stripePixels(:)==2) * 2 * pixelSize;
    end
    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);

代码修改说明:

代码修改前,stripeLength = stripeLength + (sqrt(2) - 1) * sum(stripePixels(:)==2) * 2 * pixelSize; 这行代码可能导致索引超出数组范围的错误,因为stripePixels(:) 中可能存在大于 1 的值。

为了解决这个问题,代码修改后添加了一个判断条件if any(stripePixels(:) > 1),只有当stripePixels(:) 中存在大于 1 的值时,才会执行stripeLength = stripeLength + (sqrt(2) - 1) * sum(stripePixels(:)==2) * 2 * pixelSize; 这行代码,从而避免索引超出数组范围的错误。

代码功能:

本代码使用MATLAB对图像进行处理,首先将图像转换为灰度图像,并使用自适应阈值分割将图像二值化。然后,利用骨架化和连通域分析提取图像中的长条纹,并统计其长度。最后,保存处理后的图像和长条纹长度的直方图。

代码流程:

  1. 读取图像并转换为灰度图像。
  2. 使用自适应阈值分割将图像二值化。
  3. 利用骨架化提取图像中的细线。
  4. 使用连通域分析找出所有长条纹。
  5. 统计每个长条纹的长度。
  6. 保存处理后的图像和长条纹长度的直方图。

代码应用场景:

本代码可以用于提取图像中的长条纹,并统计其长度,例如可以用于识别条形码、图像中的线条等。

MATLAB图像处理:提取长条纹并统计长度

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

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