图像增强
图像增强是对图像进行处理,使其比原始图像更适合于特定的应用,它需要与实际应用相结合。对于图像的某些特征如边缘、轮廓、对比度等,图像增强是进行强调或锐化,以便于显示、观察或进一步分析与处理。图像增强的方法是因应用不同而不同的,研究内容包括:
高斯平滑
为了解决局部平均平滑图像的方法而导致图像模糊的弊端,目前已提出许多保持边缘、细节的局部平均算法。它们的出发点都集中在如何选择邻域的大小、形状和方向、参数平均及邻域各点的权重系数等。
图像高斯平滑也是邻域平均的图像平滑方法,不同点在于,对图像进行平滑时,不同位置的像素被赋予了不同的权重。
在图像简单平滑中,算法利用卷积模板逐一处理图像中每个像素,这一过程可以形象地比作对原始图像的像素–进行滤波整理,在图像处理中把邻域像素逐一处理的算法过程称为滤波器。平滑线性滤波器的工作原理是利用模板对邻域内像素灰度进行加权平均,也被称为均值滤波器。
高斯滤波模板在边缘位置的权重会向中心位置的权重递增,这样可以更多的保留图像总体的灰度分布特征。下图是常用的四个模板:
代码实现:
高斯滤波:采用的滤波核如下所示
算法实现如下:
//高斯模糊
void GaussianFilter(BYTE *SrcImage ,BYTE *DstImage, int nwidth, int nheight)
{
int HWS = 3; //模板维数3
float H[3][3]={{1.0/16,2.0/16,1.0/16}, //高斯模板,系数1/16
{2.0/16,4.0/16,2.0/16},
{1.0/16,2.0/16,1.0/16}};
float red,green,blue;
int x,y; //一维坐标转换为二维坐标
int TR, TG, TB;//记录红绿蓝坐标位置
//图像增强:平滑
for (int i=0;i<nwidth*nheight;i=i+3)
{
x=(i/3)%nwidth;
y=(i/3)/nwidth;
red=green=blue=0;
//对图像进行像素求和并取平均值HWS维数
for (int j=y-HWS/2; j<y+HWS/2+1; j++)
{
for (int k=x-HWS/2; k<x+HWS/2+1; k++)
{
if (j>=0 && k>=0 && k<nwidth && j<nheight)
{
TR = j*nwidth*3+k*3;
red+=H[(j-y+HWS/2)][(k-x+HWS/2)]*(float)(SrcImage[TR]);
TG=j*nwidth*3+k*3+1;
green+=H[(j-y+HWS/2)][(k-x+HWS/2)]*(float)(SrcImage[TG]);
TB=j*nwidth*3+k*3+2;
blue+=H[(j-y+HWS/2)][(k-x+HWS/2)]*(float)(SrcImage[TB]);
}
}
}
//对新图像进行赋值
DstImage[i] =(unsigned char)(red);
DstImage[i+1]=(unsigned char)(green);
DstImage[i+2]=(unsigned char)(blue);
}
}
结果如下: