图像的掩码操作是指通过掩码核算子重新计算图像中各个像素的值,掩码核算子刻画邻域像素点对新像素值的影响程度,同时根据掩码算子中权重因子对原像素点进行加权平均。图像掩码操作常用于图像平滑、边缘检测及特征分析等领域,opencv中常用的计算图像掩码的操作有下面两种。
<1>基于像素邻域遍历
对于源图像数据f(x,y),卷积核算子为3x3,计算源图像数据4邻域均值掩码可通过下式来完成。
对于图像矩阵而言,上式可变换成下面的矩阵操作:
基于像素邻域遍历就是通过对源数据矩阵进行操作,利用上面的公式以当前像素点为计算像素点为计算中心目标点,逐像素移动掩码核算子模板,对源图像数据进行遍历,进而更新新图像每个像素点。
<2>基于filter2D函数
opencv中提供了filter2D函数专门应用于计算图像卷积的操作:
void filter2D(InputArray src.OutputArray dst,int depth,InputArray kernel,Point anchor=Point(-1,-1),double delta=0,int borderType = BORDER_DEFAULT)
其中参数src代表源图像,dst代表输出图像,depth代表输出深度,如果设置为负值,其深度与输入源数据深度一样,否则就需要根据输入源图像的深度进行相关设置,若src.depth()=CV_8U,则depth=-1/CV_16S/CV_32F/CV_64F;参数kernel是卷积核算子,为单通道浮点矩阵,如果对多通道应用不同卷积核算子计算,需要分离通道然后对其进行单个操作。参数anchor是卷积核描点,默认是(-1,-1),表示卷积核中心。参数delta是平滑系数,目标图像生成前可设定值用于平滑操作。
filter2D函数常应用于线性滤波技术中,当使用卷积核算子计算的图像目标点在图像外部时,需要对指定边界进行插值运算。该函数实际计算的是图像相关性,而不是卷积操作,filter2D的计算公式是:
其中