关于提取图片中文字区域的算法和实现方法

最近在研究的【如何确定文字范围以提供边缘检测和Hough变换】的方法,目前想到了三个方法,介绍如下:

膨胀(腐蚀)算法

膨胀(腐蚀)算法的原理就是将符合条件的像素点(块)替换成设定的形状

二值图像的膨胀算法可以使用matlab提供的imdilate函数实现
其中X是M*N的二值图像矩阵,B为结构元素,其元素必须包含只有0和1,其数据类型任意不需要是逻辑类型,返回值Z是与X大小相同的二值图像矩阵,使用如下:

>> X=imread('number.bmp');
>> B=[0 1 0;1 1 1;0 1 0];
>> Z1=imdilate(X,B);
>> Z2=imdilate(Z1,B);
>> Z3=imdilate(Z2,B);
>> imshow(X),figure,imshow(Z1),figure,imshow(Z2),figure,imshow(Z3);

这段代码表示的是三次膨胀,其中B=[0 1 0;1 1 1;0 1 0];表示的是每个像素点按照十字形状膨胀效果如下:
在这里插入图片描述
明显可见原本的图象被加粗了。

在本次中我尝试了拉近字间距,规格为:
关于提取图片中文字区域的算法和实现方法_第1张图片
效果如下:关于提取图片中文字区域的算法和实现方法_第2张图片
经过三次次膨胀
膨胀形状为:
第一次:
关于提取图片中文字区域的算法和实现方法_第3张图片
第二次:
关于提取图片中文字区域的算法和实现方法_第4张图片

clear
clc
X1=imread(‘abc.bmp’);
%X1=rgb2gray(A);
B1=[0 0 0;1 1 1;0 0 0];
B2=[1 1 1;1 1 1;1 1 1];
Z1=imdilate(X1,B1);
Z2=imdilate(Z1,B1);
Z3=imdilate(Z2,B1);
imshow(X1),figure,imshow(Z3);

效果如下:

关于提取图片中文字区域的算法和实现方法_第5张图片
可以看见除了F字母其他部分基本已经连接成线条了,这里我考虑用一次重构算法填充其中的孔洞部分

在matlab中可以使用函数实现重构

Z=imreconstruct(M,X)

重构填充的原理是通过取反,得到外部图像,在反向填充、与原图叠加最终实现填充孔洞
经过尝试效果不明显

你可能感兴趣的:(hough变换,matlab基础)