1 1 1
上式类似于矩阵,我们通常称之为模板。中间的黑点表示该元素中心元素,即该个元素是要进行处理的元素。如果模板是:
1• 1 1
1/9 1 1 1
1 1 1
则该操作应该描述为:将原图中一个像素的灰度值和它右下邻近的8个像素的灰度值相加,然后将求得的平均值9(除以9)作为新图中该像素的灰度值。如果模板为 2. ,
1
则表示将自身灰度值的2倍加下边的元素灰度值作为新值,而 2 则表示将自身
1.
灰度值加上边元素灰度值的2倍作为新灰度值。通常模板不允许移出边界,所以处理后的图像会比原图小,例如:当模板是 1. 0 原图灰度值矩阵是 1 1 1 1 1
0 2 2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
时,经过模板操作后的图像为 5 5 5 5 -
8 8 8 8 -
11 11 11 11 -
- - - - -
“-”表示边界上无法进行模板操作的点,一般的做法是复制原图的灰度值,不再进行任何其他的处理。模板操作实现了一种领域运算,即某个像素点的结果不仅和本像素灰度有关,而且和其领域点的值有关。下面对平滑的用途和解决方法进行详细介绍。
在图像的采集过程中,由于各种因素的影响,图像中往往会出现一些不规则的随机噪声,如数据在传输、存储时发生的数据丢失和损坏等,这些都会影响图像的质量。处理噪声点的过程称之为平滑,平滑可以降低图像的视觉噪声,同时除去图像中的高频部分后,那些本来不明显的低频成分更容易识别。而噪声点一般是孤
立的点,噪声点的像素灰度与它们的近邻像素有显著的区别,即灰度变化总在这附近有突变高频。平滑可用卷积来实现,平滑的频率截止点由卷积核的大小及卷积系数决定。用于平滑滤波的卷积核叫做低通过滤波器,低通过滤波器具有如下的特征:1卷积核的行、列数为奇数,通常为3×3的矩阵;2卷积系数以中心点为中心对称分布;3所有的卷积系数都为正数;4距离中心较远的卷积系数的值较小或保持不变;5卷积后的结果不改变图像的亮度。经过卷积平滑后给随后的水平投影、二值化提供了较好的图像效果。水平投影的曲线显得比较平滑,二值化后的图像孤立点比较少。以下是几个常用的卷积核:
1/9 1/9 1/9 1/10 1/10 1/10 1/16 2/16 1/16
1/9 1/9 1/9 1/10 1/5 1/10 2/16 4/16 2/16
1/9 1/9 1/9 1/10 1/10 1/10 1/16 2/16 1/16
L P1 LP2 LP3
通常的处理是:将中心点周围八个点的像素值乘于各自矩阵相应的系数后相加得到一个值,然后将这个值乘上中心点的系数,中心点的像素值赋为得到的最后值。一般来说,不同的噪声有各自针对性的卷积算法。本文使用的卷积算法是高斯卷积核,亦即上面卷积核的LP3。高斯卷积是通过采样2文高斯函数得到的。高斯平滑算法的优点是平滑后图像的失真少,算法更具备通用性,能去除不同的噪声干扰。需要注意的是:在平滑处理时,图像边界点无法处理,因此循环范围应设定在图像边界内。
(2) 具体实现高斯平滑功能
知道高斯平滑原理之后,可进行编码将其实现:
① 编辑菜单IDR_MAINFRAM,在菜单“预处理”中添加一子菜单项,命名为“高斯平滑”并将其ID设为ID_READY_Template。
② 在类CFaceDetectView中添加“高斯平滑”菜单项的事件处理程序,其代码如下:
//进行模板操作
Template(tem ,3,3, xishu);
Invalidate(TRUE);
其中tem是模板参数,xishu是模板系数;Template()函数是实现高斯平滑的主要函数,其核心代码是:
for(m=i-((tem_h-1)/2);m<=i+((tem_h-1)/2);m++)
{ for(n=j-((tem_w-1)/2);n<=j+((tem_w-1)/2);n++)
注: 将以点(i,j)为中心,与模板大小相同的范围内的象素与模板对用位置的系数进行相乘并线形叠加
sum+=Gray[m][n]* tem[(m-i+((tem_h-1)/2))*tem_w+n-j+((tem_w-1)/2)];
}
将结果乘上总的模板系数
sum=(int)sum*xishu;
计算绝对值
sum = fabs(sum);
如果小于0,强制赋值为0
if(sum<0) sum=0;
如果大于255,强制赋值为255
if(sum>255)
sum=255;
HeightTemplate[i][j] = sum;
③ 高斯平滑效果图:见下图 4-4
图4-4 高斯平滑效果图
4、灰度均衡
(1)算法思想
灰度均衡也称直方图均衡,目的是通过点运算使输入转换为在每一灰度级上都有相同的像素点数的输出图像(即输出的直方图是平的)。这对于在进行图像比较或分割之前将图像转化为一级的格式是十分有效的。
按照图像的概率密度函数(PDF,归一化带单位面积的直方图)的定义:
P(x) = * H(x)(式5)
其中H(x)为直方图,A0为图像的面积,设转换前图像的概率密度函数为
Pr(r),转换后图像的概率密度函数为Ps(S),转换函数为s = f(r),由概率论知识,我们可以得到:
Ps(S) = Pr(r)* (式6)
这样,如果想使转换后图像的概率密度函数为1(即直方图是平的)则必须满足:
Pr(r)= (式4-5)
等式两边积分,得:
S = f(r)= ∫0 rP2(u)du = ∫0 r H(u)du (式7)
该转换式被称为图像的累积分布函数
上面的式是被归一化后推导的对于没有归一化的情况,只要求以最大的灰度值(DMax,对于灰度图就是255)即可,灰度均衡的转换式为:
DB = f (DA)= H(u)du (式1)
对于离散图像转换式为:
DB = f(DA)= (式8)
式中Hi为第i级灰度的像素个数。
(2)编程实现
在灰度均衡操作同样不需要改变DIB的调色板和文件夹,只要把指向DIB像素起始位置的指针和DIB高度、宽度信息传递给子函数就可以完成灰度均衡变换工作,其核心代码如下:
*(lpData + lOffset)=state ; //显示灰度均衡
<< 上一页 [11] [12] [13] [14] [15] 下一页