【技术实现步骤摘要】
光照不均文本图像处理方法
[0001]本专利技术涉及计算机领域图像处理方法,尤其指对光照不均匀文本图像进行处理的方法。
技术介绍
[0002]文本图像是只含文字的图像,例如印刷体文档等。由于拍照技术、拍摄条件等制约,得到的文本图像往往存在光照不均、角度倾斜、文字模糊等情况。这种低质量的文本图像不仅不利于保存和后续研究,也不利于光学字符识别,导致实验中对文本图像中文字的检测和识别率从90%以上下降到60%多。
[0003]目前处理光照不均图像已经有了一些研究,主要是用图像增强或图像二值化技术。其中图像增强的已有方法有直方图均衡化、Gamma变换、Laplace变换和Retinex算法等,但这四种方法都有各自的缺陷,其中,直方图均衡化后的图像灰度级减少,某些细节消失,某些图像,如直方图有高峰,经处理后对比度会不自然的过分增强,灰度级不平坦;Gamma变换只适用于图像整体偏亮或偏暗,当图像整体偏暗时,扩展灰度级,图像整体偏亮时,压缩灰度级,但不适用于图像一部分偏亮而另一部分偏暗的特殊情况;Laplace变换在增强图像细节方 ...
【技术保护点】
【技术特征摘要】
1.一种光照不均文本图像处理方法,其特征在于包括以下步骤:第一步,对光照不均文本图像Img进行图像增强,恢复图像上光照过强导致的过亮处或者阴影遮挡导致的过暗处的图像细节,方法为:1.1对彩色图像Img的颜色进行分通道处理,每个通道分量像素值由整数型即int转换为浮点数即float,并对R,G,B三个通道求均值,得到通道求均值后的新图像I,像素大小为H
×
W方法是:1.1.1将Img各像素的灰度值由整数型转换为浮点数,得到转换后的图像Img1;1.1.2使用python的numpy库中的np.sum函数,对Img的R,G,B通道的所有像素点的像素值求和,得到图像Img1;np.sum函数的输入参数为输入数组a=Img,数组的维度axis=2,其他保持默认值;Img1的第x列第y行像素点的像素值Img1(x,y)=R(x,y)+G(x,y)+B(x,y),得到的Img1的维度为H
×
W;H为Img的R,G,B三个通道的通道的高,W为通道的宽;R(x,y)表示Img的R通道中第x列第y行像素点的像素值,G(x,y)表示Img的G通道中第x列第y行像素点的像素值,B(x,y)表示Img的B通道中第x列第y行像素点的像素值,0£x£W
‑
1,0£y£H
‑
1;Img的维度为H
×
W
×
3,像素大小为H
×
W;1.1.3将Img1的每个像素点的像素值除以3,得到新图像I,I的维度为H
×
W;使用Python中的numpy库的divide函数,直接令I=Img1/3,即将Img1的每个像素值Img1(x,y)除以3后赋值给I(x,y),得到新图像I;1.2采用多尺度加权平均的方法对I进行图像增强,得到增强后的图像T,T为维度为H
×
W的矩阵;1.3对T进行色彩平衡处理,得到色彩均衡处理后的图像T
’
,方法是:1.3.1令Img的像素总数total=H
×
W;1.3.2计算T的色彩平衡的上下界,得到色彩平衡上界high_val,色彩平衡下界low_val;1.3.3对T进行色彩均衡处理,将T中像素值大于high_val的像素点赋值为high_val,使得太亮的像素变暗,将T中像素值等于high_val的像素点保持不变,将T中像素值小于low_val的像素点赋值为low_val,使得太暗的像素变亮,T中像素值等于low_val的像素点保持不变,得到色彩均衡处理后的图像T
’
;1.4将T
’
中每个分量像素值由整数型转换为浮点数,得到浮点处理后的图像P;使用Python中numpy库的np.max函数和np.min函数将T
’
中的每个分量像素值按公式P=[(T
’‑
np.min(T
’
))/(np.max(T
’
)
‑
np.min(T
’
))]
×
255.0+1.0进行转换,得到P,维度为H
×
W,记P中任意一个元素为P(x,y),np.min(T
’
)表示T
’
中最小的元素,np.max(T
’
)表示T
’
中最大的元素;1.5计算彩色恢复因子A,采用A对R,G,B三个通道进行图像增强处理,方法是:1.5.1初始化一个与原始彩色图像Img同维度的全0矩阵M,M维度为H
×
W
×
3;1.5.2对M的元素M(x,y,0),M(x,y,1)和M(x,y,2)进行明暗处理并进行彩色恢复;1.5.3使用Python中numpy库的函数np.uint8将M中元素值转换为8位无符号整数,即得到整个图像增强后的图像M
’
,此时M
’
仍是彩色图像;第二步,对M
’
进行局部二值化,根据坐标为(x,y)像素点邻域内的灰度均值与标准方差动态计算像素点(x,y)的二值化阈值,方法是:
2.1使用Python中cv2库中的函数cv2.cvtColor将M
’
转换为灰度图E,E的维度为H
×
W,其中,cv2.cvtColor函数的输入参数为需要转换的图像src,src=M
’
,图像转换类型code=cv2.COLOR_BGR2GRAY表示将BGR转换成灰度图,其他保持默认值;记E中任意一个元素为E(x,y);2.2设定滑动窗口大小为h_kernel
×
w_kernel,h_kernel为滑动窗口的高,w_kernel为滑动窗口的宽,h_kernel和w_kernel为奇数;2.3计算E各个像素点的积分和开方积分,得到积分矩阵integral和开方积分矩阵integral_sqrt,integral和integral_sqrt中的元素均为整数类型,integral(x,y)值为以E(0,0),E(x,0),E(0,y)和E(x,y)为四个顶点的矩形内所有像素点的像素值之和,integral_sqrt(x,y)值为以E(0,0),E(x,0),E(0,y)和E(x,y)为四个顶点的矩形内所有像素点的像素值开方之和;2.4初始化5个与E同维度的全0矩阵,分别记做diff,sqrt_diff,mean,std和threshold矩阵;diff矩阵的元素diff(x,y)用于记录以E(x,y)为中心,大小为h_kernel
×
w_kernel的邻域内所有像素点的像素值之和;sqrt_diff矩阵的元素sqrt_diff(x,y)用于记录以E(x,y)为中心,大小为h_kernel
×
w_kernel的邻域内所有像素点的像素值开方之和;mean矩阵的元素mean(x,y)用于记录以E(x,y)为中心,大小为h_kernel
×
w_kernel的邻域内所有像素点像素值的均值;std矩阵的元素std(x,y)用于记录以E(x,y)为中心,大小为h_kernel
×
w_kernel的邻域内所有像素点的像素值的标准方差;threshold矩阵的元素threshold(x,y)用于记录二值化E(x,y)的阈值;2.5计算邻域的半径whalf,whalf=h_kernel/2;2.6对E中所有元素求出二值化的阈值,即求出矩阵threshold中的每个元素的值,最后根据矩阵threshold对E中所有元素E(x,y)进行二值化,方法是:2.6.1令循环变量x=0;2.6.2如果0£x£H
‑
1,转2.6.3,否则得到最终二值化的E,转第三步;2.6.3令循环变量y=0;2.6.4如果0£y£W
‑
1,转2.6.5,否则转2.6.28;2.6.5计算出以像素点(x,y)为中心,大小为h_kernel
×
w_kernel的滑动窗口的最左端坐标值xmin、最右端坐标值xmax、顶部坐标值ymin和底部坐标值ymax,以及滑动窗口的面积area;2.6.6判断以当前像素点(x,y)为中心,大小为h_kernel
×
w_kernel的滑动窗口是否位于图像的左上角:若xmin=0且ymin=0,说明像素点(x,y)的滑动窗口左边界和上边界分别与整个图像的左边界和上边界重合,转2.6.7,否则说明像素点(x,y)的滑动窗口没有位于整个图像的左上角,转2.6.9;2.6.7令diff(x,y)=integral(xmax,ymax);2.6.8令sqrt_diff(x,y)=integral_sqrt(xmax,ymax),转2.6.21;2.6.9判断以当前像素点(x,y)为中心,大小为h_kernel
×
w_kernel的滑动窗口是否位于图像的顶部:若xmin>0且ymin=0,说明像素点(x,y)的滑动窗口上边界与整个图像的上边界重合,转2.6.10,否则说明像素点(x,y)的滑动窗口上边界没有与整个图像的上边界重合,转2.6.12;
2.6.10计算以E(x,y)为中心,大小为h_kernel
×
w_kernel的邻域内所有像素点的像素值之和,diff(x,y)=integral(xmax,ymax)
‑
integral(xmin
‑
1,ymax);2.6.11计算以E(x,y)为中心,大小为h_kernel
×
w_kernel的邻域内所有像素点的像素值开方之和,sqrt_diff(x,y)=integral_sqrt(xmax,ymax)
‑
integral_sqrt(xmin
‑
1,ymax),转2.6.21;2.6.12判断以当前像素点(x,y)为中心,大小为h_kernel
×
w_kernel的滑动窗口是否位于图像E的左侧边缘:若xmin=0且ymin>0,说明像素点(x,y)的滑动窗口左边界与图像E的左边界重合,转2.6.13,否则说明像素点(x,y)的滑动窗口左边界没有与图像E的左边界重合,转2.6.15;2.6.13计算以E(x,y)为中心,大小为h_kernel
×
w_kernel的邻域内所有像素点的像素值之和,diff(x,y)=integral(xmax,ymax)
‑
integral(xmax,ymax
‑
1);2.6.14计算以E(x,y)为中心,大小为h_kernel
×
w_kernel的邻域内所有像素点的像素值开方之和,sqrt_diff(x,y)=integral_sqrt(xmax,ymax)
‑
integral_sqrt(xmax,ymax
‑
1),转2.6.21;2.6.15计算以当前像素点(x,y)为中心,大小为h_kernel
×
w_kernel的滑动窗口到右下角顶点的灰度值和diagsum,diagsum=integral(xmax,ymax)+integral(xmin
‑
1,ymin
‑
1);2.6.16计算以当前像素点(x,y)为中心,大小为h_kernel
×
w_kernel的滑动窗口到左上角顶点的灰度值和idiagsum,idiagsum=integral(xmax,ymin
‑
1)+integral(xmin
‑
1,ymax);2.6.17令diff[x,y]=diagsum
‑
idiagsum,得到以(x,y)为中心、大小h_kernel
×
w_kernel的邻域内灰度值的和;2.6.18计算当前像素点(x,y)大小为h_kernel
×
w_kernel的滑动窗口到右下角顶点的灰度值和的开平方值sqdiagsum,sqdiagsum=integral_sqrt(xmax,ymax)+integral_sqrt(xmin
‑
1,ymin
‑
1);2.6.19计算当前像素点(x,y)大小为h_kernel
×
w_kernel的滑动窗口到左上角顶点的灰度值和的开平方值sqidiagsum,sqidiagsum=integral_sqrt(xmax,ymin
‑
1)+integral_sqrt(xmin
‑
1,ymax);2.6.20令sqrt_diff(x,y)=sqdiagsum
‑
sqidiagsum,得到以(x,y)为中心,大小h_kernel
×
w_kernel的邻域内灰度值和的开平方值sqrt_diff(x,y),转2.6.21;2.6.21计算以(x,y)为中心点,大小为h_kernel
×
w_kernel的邻域内灰度值的均值mean(x,y),mean(x,y)=diff(x,y)/area;2.6.22计算以(x,y)为中心点,大小为h_kernel
×
w_kernel的邻域内灰度值的标准差std(x,y),std(x,y)=sqrt((sqrt_diff(x,y)
‑
sqrt(diff(x,y))/area)/(area
‑
1));2.6.23计算分割当前点(x,y)的阈值threshold(x,y)...
【专利技术属性】
技术研发人员:祝恩,金佳琪,胡婧韬,王思为,刘新旺,汪昌健,罗磊,张毅,郭敏,
申请(专利权)人:中国人民解放军国防科技大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。