一、图像卷积的原理
图像卷积:就是图像f(x),模板g(x),然后将模块g(x)在模板中移动,每到一个位置就把f(x)与g(x)的定义域相交的元素进行乘积并求和,并将这个结果放在与输入图像参考所相对应的位置。
二、图像卷积的作用
一副数字图像可以看作一个二维空间的离散函数可以表示为f(x, y), 假设有对于二维卷积操作函数C(u, v) ,则会产生输出图像g(x, y) = f(x, y) *C(u,v), 利用卷积可以实现对图像模糊处理,边缘检测,产生轧花效果的图像。一个简单的数字图像卷积处理流程可以如下:
1.读取源图像像素
2.应用卷积操作数矩阵产生目标图像
3.对目标图像进行归一化处理
4.处理边界像素
三、图像线性卷积函数
void cvFilter2D( const CvArr* src, CvArr* dst, const CvMat* kernel, CvPoint anchor=cvPoint(-1,-1));
参数说明:
src 输入图像.
dst 输出图像.
kernel 卷积核, 单通道浮点矩阵. 如果想要应用不同的核于不同的通道,先用cvSplit 函数分解图像到单个色彩通上,然后单独处理。
anchor 核的锚点表示一个被滤波的点在核内的位置。锚点应该处于核内部。缺省值 (-1,-1) 表示锚点在核中心。
函数cvFilter2D 对图像进行线性滤波,支持 In-place 操作。当核运算部分超出输入图像时,函数从最近邻的图像内部象素插值得到边界外面的象素值。
四、卷积边界的处理
使用cvCopyMakeBorder( )函数,可以将特定的图像轻微变大,然后以各种方式自动填充图像边界。
void cvCopyMakeBorder( const CvArr* src, CvArr* dst, CvPoint offset,
int bordertype, CvScalar value=cvScalarAl(0) );
src 输入图像。
dst 输出图像。
offset 输入图像(或者其ROI)欲拷贝到的输出图像长方形的左上角坐标(或者左下角坐标,如果以左下角为点)。长方形的尺寸要和原图像的尺寸的ROI分之一匹配。
bordertype 已拷贝的原图像长方形的边界的类型:
IPL_BORDER_CONSTANT - 填充边界为固定值,值由函数最后一个参数指定。
IPL_BORDER_REPLICATE -边界用上下行或者左右列来复制填充。(其他两种IPL边界类型, IPL_BORDER_REFLECT 和IPL_BORDER_WRAP现已不支持)。
value 如果边界类型为IPL_BORDER_CONSTANT的话,那么此为边界像素的值。
函数cvCopyMakeBorder拷贝输入2维阵列到输出阵列的内部并且在拷贝区域的周围制作一个指定类型的边界。函数可以用来模拟和嵌入在指定算法实现中的边界不同的类型。例如:和opencv中大多数其他滤波函数一样,一些形态学函数内部使用复制边界类型,但是用户可能需要零边界或者填充为1或255的边界。