如何在 MATLAB 中获取二进制图像中字符的外周长?
How can I obtain the outer perimeter of characters in binary images in MATLAB?
我需要获取二进制图像中字符的外周边缘。我有一个字母 A
的图像。这个图像是一个二进制矩阵。我已将图像二值化,并将其保存在 20 x 20 矩阵中。我只想获得外部 "ON" 像素。
总而言之,我有这张图片:
...我想要这张图片:
在 MATLAB 中执行此操作的最佳方法是什么?
我假设您已经安装了图像处理工具箱。您上传的示例图像是 RGB,因此必须进行一些预处理。首先读入图像,然后将图像转为二进制。
对于我提议的工作,对象像素需要是白色的,因此您需要反转图像,使其成为黑色背景上的白色文本。完成此操作后,填充所有孔,找到周长,然后重新恢复为原始配色方案。
您可能还需要加厚生成的周长,因为这只会找到一个 1 像素宽的边界。您的示例显示周长有几个像素厚。带有正方形结构元素的膨胀在这里可能有所帮助。
%// Read in image, convert to binary and invert
im = imread('http://i.stack.imgur.com/ooWFP.jpg');
im = ~im2bw(im);
%// Fill in holes
im_fill = imfill(im, 'holes');
%// Find perimeter
out = bwperim(im_fill);
%// Expand the perimeter and reinvert
out = ~imdilate(out, strel('square', 5));
%// Show image
imshow(out);
我们得到这个:
我需要获取二进制图像中字符的外周边缘。我有一个字母 A
的图像。这个图像是一个二进制矩阵。我已将图像二值化,并将其保存在 20 x 20 矩阵中。我只想获得外部 "ON" 像素。
总而言之,我有这张图片:
...我想要这张图片:
在 MATLAB 中执行此操作的最佳方法是什么?
我假设您已经安装了图像处理工具箱。您上传的示例图像是 RGB,因此必须进行一些预处理。首先读入图像,然后将图像转为二进制。
对于我提议的工作,对象像素需要是白色的,因此您需要反转图像,使其成为黑色背景上的白色文本。完成此操作后,填充所有孔,找到周长,然后重新恢复为原始配色方案。
您可能还需要加厚生成的周长,因为这只会找到一个 1 像素宽的边界。您的示例显示周长有几个像素厚。带有正方形结构元素的膨胀在这里可能有所帮助。
%// Read in image, convert to binary and invert
im = imread('http://i.stack.imgur.com/ooWFP.jpg');
im = ~im2bw(im);
%// Fill in holes
im_fill = imfill(im, 'holes');
%// Find perimeter
out = bwperim(im_fill);
%// Expand the perimeter and reinvert
out = ~imdilate(out, strel('square', 5));
%// Show image
imshow(out);
我们得到这个: