一种基于直方图对二值图像进行处理的方法

2010-08-16 01:09刘跃锋宋永霞李松涛
长春工业大学学报 2010年5期
关键词:子程序直方图特征提取

刘跃锋, 宋永霞, 李松涛

(长春工业大学计算机科学与工程学院,吉林长春 130012)

0 引 言

根据图像的亮度信息并对其进行投影,得到的即为图像的灰度直方图,利用直方图技术对图像进行特征提取、边缘检测、分割等处理,可以得到想要的具有预定效果的图像,方便对其做进一步的处理。

1 灰度直方图简介[1]

在一幅数字图像中,若其范围在[0,G]内总共包含有L级灰度,则其直方图定义应为一个离散函数,即:h(rk)=nk,其中rk是区间[0,G]内的第k级亮度,nk是灰度级为rk的图像中的像素数。对于uint8类图像,G值为255;对于uint16类图像,G值为65535;对于double类图像,G值为1.0。也就是说,对于uint8或者uint16类图像,G=L-1。通常会用到归一化直方图,即使用所有元素h(rk)除以像素总数n所得到的图形。其公式为:

在Matlab仿真工具中,可以用imhist(f,b)函数获得图像的直方图。其中,f为输入图像,b为灰度级的个数。若要得到归一化的直方图,则需使用函数p=imhist(f,b)/numel(f)得到。其中,函数numel(f)给出数组f的元素个数。

2 利用直方图对二值图像进行处理

图像的分割和边缘检测是图像处理中的一个重要方面[2],对于一幅原始图像,不管要对其进行哪种操作,都要求首先确定整幅图像中有用信息与背景信息的区域,然后才能对该幅图像的有用信息区域进行想要做出的处理,而要达到这个目的,就要用到图像的边缘检测和图像分割技术。同时,要对图像进行想要的操作,就要尽可能得到图像有用信息齐全的、不相关的特征,这也同时要求研究者进行更加有利的特征提取方法研究。下面就这两个方面的方法进行介绍。

2.1 利用直方图和投影技术进行图像边缘检测和图像分割

对于一幅待处理的图像,要最大程度地得到图像的有用信息,首先就要去除图像背景图像的干扰,这就要检测出图像有用信息的边缘,以便对其进行处理[3]。在这里采用把一幅图像先进行二值化处理,把背景图像的灰度值设置为0,信息图像灰度值设置为1,然后,对图像的各种像素信息在各个方向进行投影,从而得到图像的像素信息在各个方向上的直方图[4]。根据投影直方图所在位置区别,就能得到图像有用信息在各个方向上的边界,这样就实现了图像的边缘检测。

一幅待处理的图像如图1所示(这幅图像还没有进行边缘检测和分割)。

图1 待处理的图像

确定边界并对其归一化后的图像如图2所示。

图2 确定边界后的图像

为了突出图像的区别,把周围背景色彩设置为黑色。

通过图1和图2的比较可以看出,图2是在图1的基础上通过得到上、下和左、右投影直方图之后,确定其边界,而对于图像的其它信息并没有什么影响。同理,对于一幅拥有多组有用信息的图像,根据图像有用信息在同一方向上的投影直方图位置之间的差异是否超出自己所设定的阈值,就能对图像进行合理准确的分割[5-6]。若超过阈值,则为另一组图像;若未超过阈值,则为同一组图像。可以用如下公式进行图像的分割。

式中:I——所得图像;

Ii——第i个图像;

Ij——第j个图像;

sj——第j个图像左边界;

si——第i个图像右边界;

T——所设阈值。

这种方法在对文字和数字串进行字符分割中特别适用。

边缘检测程序流程如图3所示。

图3 边缘检测程序流程

其Matlab程序如下:

Clc

clear all

f=imread('D:﹨ program files

﹨ MAT LAB71﹨ work ﹨ 2.1.bmp');

f1=im2bw(f,80/255);%二值化

f2=fanzhuan(f1);

f3=bwmorph(f2,'skel',3);%骨骼化

f4=bwmorph(f3,'spur',12);%去毛刺

fm=medfilt2(f4,[44]);%进行中值滤波

f5=bwmorph(fm,'thicken',10);%粗化操作

se=strel('disk',6);

foc=imclose(f5,se);%用半径为6的圆盘进行闭运算

fo=imopen(foc,se);%用半径为6的圆盘进行开运算

se1=strel('disk',7)

fo1=imopen(fo,se1);%用半径为7的圆盘进行开运算

f6=guiyi(f2);

其中有两个子程序:一个是翻转子程序,即f2=fanzhuan(f1)这一条程序;一个是归一子程序,即f6=guiyi(f2)这一条程序。这两个子程序如下:

function f6=guiyi(f5)

[m n]=size(f5);

for i=1:n

f(i)=0;

end;

for j=1:m

g(j)=0;

end;

for j=1:n

for i=1:m f(j)=f5(i,j)+f(j);

end;

end;%在 x轴进行投影

j=1;

while f(j)<=0

j=j+1;

end;

a=j;%找左边界

j=n;

while f(j)<=0

j=j-1;

end;

b=j;%找右边界

for i=1:m

for j=1:n g(i)=f5(i,j)+g(i);

end;

end;%在y轴投影

i=1;

while g(i)<=0

i=i+1;

end;

c=i;找上边界

i=m;

while g(i)<=0

i=i-1;

end;

d=i;%找下边界

f6=f5(c:d,a:b);

function f2=fanzhuan(f1)

[m n]=size(f1);

for i=1:m

for j=1:n

if f1(i,j)==1

f2(i,j)=0;

else f2(i,j)=1;

end;

end;

end;

其中,翻转子程序主要是用来确定图像与背景的关系,归一子程序主要对图像进行归一化,即图像的边缘检测。当整个程序结束,即得到如图2所示的图像。

本质上说,图像检索与图像边缘检测是同一种方法,只要得到图像的边缘,就能得到图像所在位置,同样也就实现了图像的检索[7]。而图像分割则是对一组图像分别进行边缘检测,待确定各个分图像的边缘之后,也就顺利地达到了对各个分图像分割的目的。利用这种方法对二值图像进行边缘检测和分割,不但节省了利用掩模在图像上来回移动所需要的时间,还节省了图像边缘对掩模的响应计算时间,因此,它比传统的点、线和边缘检测方法更有利,更具有实用性。

2.2 利用投影直方图和弹性网格技术获取图像的特征信息

首先是利用投影直方图在自己所规定的各个方向进行投影,得到各个方向灰度信息,然后再利用弹性网格结构对各个方向的灰度信息进行平分,从而得到各个方向的特征。由于使用的是弹性网格,所以得到的图像特征不但包括图像的结构特征,也包括图像的统计特征。与传统的只用一种特征对图像进行处理的方法相比,不但特征的提取方法更加简单,而且这种方法得到的特征更能保存图像的各种有用信息,因而也使得图像处理起来更加方便,更加准确。特征提取程序流程如图4所示。

图4 特征提取程序流程

其Matlab程序是在边缘检测程序的基础上再用一个子程序得到的,如下:

p=wangge(f6);

function p=wangge(f6)

[m n]=size(f6);

for i=1:m

f(i)=0;

end;

for i=1:n

g(i)=0;

end;%初始化;

s=0;

for j=1:n

for i=1:m

g(j)=f6(i,j)+g(j);

end;

s=s+g(j);

end;%求x轴投影和对其进行均分;

for i=1:7

a(i)=0;

end;

for i=1:7

b(i)=0;

end;

for i=1:5

k(i)=0;

end;%初始化

s;k1=s/6;

a(1)=1;a(7)=n;j=1;

for i=1:5

while k(i)<k1

k(i)=g(j)+k(i);

if j<n

j=j+1;

end;

end;

a(i+1)=j;

end;%对y轴进行投影;

for i=1:m;

for j=1:n;

f(i)=f6(i,j)+f(i);

end;

end;%对y轴投影进行均分;

b(1)=1;b(7)=m;

for i=1:5

l(i)=0;

end;

j=1;

for i=1:5

while l(i)<k1

l(i)=f(j)+l(i);

if j<m

j=j+1;

end;

end;

b(i+1)=j;

end;

for i=1:6

for j=1:6

if k1/6<=0.20*((a(i+1)-a(i))*(b(j+1)-b(j)))%0.2为判断阈值;

c(i,j)=0;

else c(i,j)=1;

end;

end;

for i=1:36

p(i)=0;

end;

l=1;

for j=1:6

for i=1:6

p(l)=c(i,j)

l=l+1;

end;

end;

该子程序主要是完成对获得的图像进行6*6特征提取的分割。

3 结 语

介绍了利用直方图对二值图像进行图像分割、图像检索、图像特征提取中的应用,突出了直方图在图像处理中的地位,开拓了利用直方图进行图像处理的思路,相信直方图会在图像处理中发挥更大的作用。

[1]冈萨雷斯.数字图像处理(M atlab版)[M].北京:电子工业出版社,2006.

[2]史东承,于明会.基于数学形态学滤波的灰度图像边缘检测[J].长春工业大学学报:自然科学版,2008,29(3):283-287.

[3]何书前,王建新,郭耀天,等.基于小波变换的图像二维直方图分割方法[J].电脑知识与技术,2009(8):6278-6279.

[4]邬长安,明生.基于灰度直方图和投影技术的图像检索算法[J].光盘技术,2007(5):35-37.

[5]马超杰,李晓霞,杨华,等.基于形态学和直方图分析的多元图像目标分割算法[J].航空兵器,2009(8):33-37.

[6]李立源,龚坚,陈维南.基于二维灰度直方图最佳一维投影的图像分割方法[J].自动化学报,1996(5):315-322.

[7]任平红,陈矗.基于改进的边缘直方图的图像检索方法[J].计算机技术与发展,2007(8):183-186.

猜你喜欢
子程序直方图特征提取
符合差分隐私的流数据统计直方图发布
基于Gazebo仿真环境的ORB特征提取与比对的研究
用直方图控制画面影调
基于Daubechies(dbN)的飞行器音频特征提取
Bagging RCSP脑电特征提取算法
中考频数分布直方图题型展示
基于空间变换和直方图均衡的彩色图像增强方法
浅谈子程序在数控车编程中的应用
基于MED和循环域解调的多故障特征提取
子程序在数控车加工槽中的应用探索