使用matlab实现:条纹长度分析。一旦二进制图像的骨架完成就获得了所有像素的连通性。所有具有三个以上连接分支条纹的像素都被消除。其余连接的像素被解释为条纹。 条纹长度的计算方法是条纹包含的像素数乘以像素的长度。对于对角线像素长度计算为像素大小的 2 倍。像素大小显然取决于图像分辨率空间分辨率为00595纳米像素。消除所有短于0483 nm两个芳香环的条纹。剩余的条纹被存储起来以供进一步分析。
以下是matlab代码实现:
% 读取二进制图像 binaryImage = imread('binaryImage.png');
% 获得骨架 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; % 对角线像素长度计算为像素大小的 2 倍 stripeLength = stripeLength + (sqrt(2) - 1) * sum(stripePixels(:)==2) * 2 * pixelSize; stripeLengths(end+1) = stripeLength; end
% 保存剩余的长条纹 maxLength = 0.483 / pixelSize; % 最短的条纹长度 longStripePixels = []; for i = 1:connectivity.NumObjects if numel(connectivity.PixelIdxList{i}) < maxLength continue; end longStripePixels = [longStripePixels; skeletonImage(connectivity.PixelIdxList{i})]; end imwrite(longStripePixels, 'longStripePixels.png');
% 统计条纹长度 histogram(stripeLengths); % 绘制长度直方图 meanLength = mean(stripeLengths); % 平均长度 maxLength = max(stripeLengths); % 最大长度 minLength = min(stripeLengths); % 最小长度
原文地址: https://www.cveoy.top/t/topic/bw4o 著作权归作者所有。请勿转载和采集!