图像中的段数字 - Matlab

时间:2011-04-04 22:24:39

标签: matlab image-processing

我有一张黑白车牌图片。

它的外观如下:

enter image description here

现在我想为每个数字的背景着色,以便进一步完成工作 切割板上的数字。

像这样:

enter image description here

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:7)

生成方框的一种简单方法是将sum图像向下移动到每列,并查找总和低于某个阈值的位置(即白色像素低于该列中给定数字的位置)。这将为您提供框应该在哪里的列索引。这些框的宽度可能太窄(即数字的小部分可能会突出两侧),因此您可以使用convolving索引向量扩展边缘,并使用一个小向量,并查找结果值大于零。以下是使用上图的示例:

rawImage = imread('license_plate.jpg');  %# Load the image
maxValue = double(max(rawImage(:)));     %# Find the maximum pixel value
N = 35;                                  %# Threshold number of white pixels
boxIndex = sum(rawImage) < N*maxValue;   %# Find columns with fewer white pixels
boxImage = rawImage;                     %# Initialize the box image
boxImage(:,boxIndex) = 0;                %# Set the indexed columns to 0 (black)
dilatedIndex = conv(double(boxIndex),ones(1,5),'same') > 0;  %# Dilate the index
dilatedImage = rawImage;                 %# Initialize the dilated box image
dilatedImage(:,dilatedIndex) = 0;        %# Set the indexed columns to 0 (black)

%# Display the results:
subplot(3,1,1);
imshow(rawImage);
title('Raw image');
subplot(3,1,2);
imshow(boxImage);
title('Boxes placed over numbers');
subplot(3,1,3);
imshow(dilatedImage);
title('Dilated boxes placed over numbers');

enter image description here

注意:上面的阈值处理可能是黑白图像可能是double类型(值为0或1),逻辑(也可能是值为0或1),或无符号8位整数(值为0或255)。您所要做的就是将N设置为白色像素数,以用作识别包含数字部分的列的阈值。

答案 1 :(得分:0)

假设你有一个围绕字母的方框 - 它给你整体角度

将图像折叠成1d(可能有助于首先旋转它以使边界框水平)

然后查找此1d签名中字母之间的间隙,为您提供数字位置。如果您知道数字的位数和板的格式,它会有所帮助。