img_stripes = imread('7.bmp'); img_stripes = imbinarize(img_stripes);

%将图像转为二维 img_stripes = img_stripes(:,:,1);

%计算每个条纹的方向 stats = regionprops(img_stripes, 'Orientation');

%计算条纹之间的距离 distances = []; for i = 1:length(stats) for j = i+1:length(stats) %如果方向相似,则进一步分析 if abs(stats(i).Orientation - stats(j).Orientation) < 30 %计算相邻条纹的像素 pixels1 = stats(i).PixelList; pixels2 = stats(j).PixelList;

        %将像素按照方向排序
        if abs(stats(i).Orientation) > 45
            pixels1 = fliplr(pixels1);
        end
        if abs(stats(j).Orientation) > 45
            pixels2 = fliplr(pixels2);
        end
        
        %选择相同级别的像素
        level1 = unique(pixels1(:,2));
        level2 = unique(pixels2(:,2));
        levels = intersect(level1, level2);
        pixels1 = pixels1(ismember(pixels1(:,2), levels), :);
        pixels2 = pixels2(ismember(pixels2(:,2), levels), :);
        
        %计算最小距离
        d = pdist2(pixels1, pixels2);
        distances = [distances; min(d(:))];
    end
end

end

%选择有效的距离 idx = find(distances > 0.02 & distances < 0.6); distances = distances(idx);

%显示条纹和距离 figure; imshow(img_stripes); hold on; for i = 1:length(stats) plot(stats(i).PixelList(:,1), stats(i).PixelList(:,2), 'r.'); end for i = 1:length(idx) [m, n] = ind2sub([length(stats), length(stats)], idx(i)); plot([stats(m).PixelList(1,1), stats(n).PixelList(1,1)], [stats(m).PixelList(1,2), stats(n).PixelList(1,2)], 'b-'); end hold off; title('Stripes and Distances');

图像转为二值图像 img_stripes = imread7bmp; img_stripes = imbinarizeimg_stripes; 计算每个条纹的方向 stats = regionpropsimg_stripes Orientation; 计算条纹之间的距离 distances = ; for i = 1lengthstats for j = i+1lengthstats 如果方向

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

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