条纹图像 img_stripes = imread7bmp; 将图像转为二值图像 img_stripes = imbinarizeimg_stripes; 计算每个条纹的方向 stats = regionpropsimg_stripes Orientation; 计算条纹之间的距离 distances = ; for i = 1lengthstats for j = i+1lengthsta
%条纹图像 img_stripes = imread('7.bmp'); % 将图像转为二值图像 img_stripes = imbinarize(img_stripes); % 计算每个条纹的方向 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'); % 去除警告 warning('off', 'Images:initSize:adjustingMag');
原文地址: https://www.cveoy.top/t/topic/bquh 著作权归作者所有。请勿转载和采集!