% 读取原始图像 Img = imread('7-1.jpg');

% 将图像转化为灰度图像 Img_gray = rgb2gray(Img);

% 将灰度图像进行二值化操作 Img_bw = imbinarize(Img_gray);

% 对二值化图像进行骨架化操作 Img_sk = bwmorph(Img_bw, 'skel', Inf);

% 去除分支条纹 Img_clean = bwmorph(Img_sk, 'spur', 3);

% 计算条纹长度 resolution = 0.0595; % 空间分辨率 Img_label = bwlabel(Img_clean); Img_stats = regionprops(Img_label, 'Area', 'PixelList'); stripe_length = zeros(length(Img_stats), 1); for i = 1:length(Img_stats) if Img_stats(i).Area >= 3 % 只保留三个以上连接的像素 continue; end pixel_list = Img_stats(i).PixelList; length_sum = 0; for j = 1:size(pixel_list, 1) if j < size(pixel_list, 1) && abs(pixel_list(j, 1) - pixel_list(j+1, 1)) == 1 && abs(pixel_list(j, 2) - pixel_list(j+1, 2)) == 1 % 对角线像素 length_sum = length_sum + 2 * resolution; else length_sum = length_sum + resolution; end end stripe_length(i) = length_sum; end

% 过滤长度小于0.483nm的条纹 min_length = 0.483; Img_filtered = Img_clean; for i = 1:length(Img_stats) if stripe_length(i) < min_length pixel_list = Img_stats(i).PixelList; for j = 1:size(pixel_list, 1) Img_filtered(pixel_list(j, 2), pixel_list(j, 1)) = 0; end end end

% 展示结果 figure(1); imshow(Img_bw); title('原始图像');

figure(2); imshow(Img_sk); title('骨架化图像');

figure(3); imshow(Img_clean); title('去除分支后的图像');

figure(4); imshow(Img_filtered); title('过滤后的图像');

figure(5); histogram(stripe_length(stripe_length ~= 0)); title('条纹长度分布');

MATLAB图像处理:条纹识别与长度分析

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

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