使用 MATLAB 基于标记连通分量的自动裁剪
在数字图像处理中,基于标记连通分量的自动裁剪是一种裁剪技术,其中使用标记连通分量确定图像中的不同区域。之后,通过提取每个连接组件的周围区域自动裁剪图像。
基于标记连通分量的自动裁剪的主要优点是它允许隔离和提取图像中感兴趣的单个区域。
算法
下面给出了基于标记连通分量执行自动裁剪的分步过程:
步骤 1 - 如有必要,处理图像。此步骤可能涉及应用过滤器、对比度调整、RGB 到灰度转换等。
步骤 2 - 创建二值图像。这是通过使用阈值操作完成的。在二值图像中,图像内的感兴趣区域表示为前景。
步骤 3 - 对二值图像执行连通分量标记。
步骤 4 - 通过分析标记的连通分量找到感兴趣的属性,如面积、边界框等。在 MATLAB 中,可以使用"regionprops()"函数执行此操作。
步骤 5 - 根据特定条件选择所需的连通分量进行裁剪。
步骤 6 - 使用 MATLAB 中的"imcrop()"函数对每个选定组件进行裁剪。
步骤 7 - 使用 MATLAB 中的"imshow()"函数显示裁剪后的图像。
现在让我们借助 MATLAB 程序了解这种基于标记连通分量的图像自动裁剪。
示例
% MATLAB 程序演示基于标记连通分量的自动裁剪 % 调用 imread() 函数读取输入图像 img = imread('https://www.tutorialspoint.com/assets/questions/media/14304-1687425323.jpg'); % 将输入图像转换为灰度 grayimg = rgb2gray(img); % 使用阈值创建二值图像 % 根据需要设置阈值 threshold = 0.35; binaryimg = imbinarize(grayimg, Threshold); % 执行连通分量标记 labeledimg = bwlabel(binaryimg); % 提取连通分量的属性 prop = regionprops(labeledimg, 'BoundingBox'); % 选择并裁剪每个连通分量 for i = 1 : numel(prop) boundingbox = prop(i).BoundingBox; croppedimg = imcrop(img, boundingbox); % 显示裁剪后的图像 imshow(croppedimg); title('Cropped Image'); end
结论
在此 MATLAB 程序中,我们调用"imread"函数来读取输入图像。然后,使用"rgb2gray"函数将输入图像转换为灰度图像。接下来,我们调用"imbinarize"函数使用阈值创建灰度图像的二值图像。然后,我们调用"bwlabel"函数执行连通分量标记。之后,我们使用"regionprops"函数找到连通分量的属性。在这个示例程序中,我们提取了分量的边界框。接下来,我们运行"for"循环来处理每个连通分量,并使用"imcrop"函数从原始图像中裁剪区域。最后,我们调用"imshow"函数来显示裁剪后的图像。