MATLAB图像骨架提取并过滤:解决数组超出最大大小问题

本文将介绍使用MATLAB进行图像骨架提取的代码,并重点关注在处理大型图像时出现的'请求的数组超过允许的最大变量大小'错误,以及相应的解决方案。

原始代码:

Image = imread('7.bmp');
binaryImage = im2bw(binaryImage);
% 将二值图像转换为逻辑图像
skeletonImage = bwmorph(binaryImage,'skel',Inf);
connectivity = bwconncomp(skeletonImage);
skeletonImage(connectivity.PixelIdxList{cellfun(@numel, connectivity.PixelIdxList) < 3}) = 0;
pixelSize = 0.1;
stripeLengths = cellfun(@numel, connectivity.PixelIdxList) .* pixelSize;
stripeLengths(skeletonImage(connectivity.PixelIdxList)) = stripeLengths(skeletonImage(connectivity.PixelIdxList)) * 2;
stripeLengths(stripeLengths < 0.483) = [];
remainingStripes = skeletonImage;
remainingStripes(connectivity.PixelIdxList(stripeLengths < 0.483)) = 0;
imshow(remainingStripes);

错误原因: 该错误通常出现在处理高分辨率图像或包含大量像素的图像时,导致生成的数组超过了MATLAB允许的最大变量大小。

解决方案:

  1. 减少输入图像的大小: 使用imresize函数将图像缩小到更小的尺寸,以减少数组大小。
Image = imread('7.bmp');
Image = imresize(Image, 0.5); % 将图像缩小至原来的一半
...后续代码...
  1. 减少计算过程中的数据量: 例如,可以在连接组件之前使用bwareaopen函数删除小的对象,以减少连接组件的数量。
...前序代码...
binaryImage = bwareaopen(binaryImage, 10); % 删除面积小于10像素的对象
...后续代码...
  1. 使用更高级的计算机或存储设备: 例如,使用GPU加速计算或使用分布式计算集群。

  2. 重新设计算法: 考虑使用更节省存储空间的数据结构或使用更节省存储空间的算法。例如,可以使用稀疏矩阵来表示连接组件,而不是使用完整的像素矩阵。

通过以上几种方法,您可以有效地解决'请求的数组超过允许的最大变量大小'错误,并顺利进行图像骨架提取和过滤操作。


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

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