传统图像处理算法总结

传统图像处理算法总结
1. 图像滤波目的保证图像细节特征的条件下抑制图像噪声。1.1 线性滤波1.11 方框滤波原图像与内核的系数加权求和方框滤波的核normalize true 时方框滤波就变成了均值滤波。也就是说均值滤波是方框滤波归一化normalized后的特殊情况。方框滤波的缺点丢失了图像的边缘信息。opencv 函数 boxFilter(src, dst, -1, Size(10, 10));效果图1.12 均值滤波内核中心点的像素值为内核中所有点像素的平均值均值滤波的核均值滤波的缺点在图像去噪的同时也破坏了图像的细节部分,使图像模糊。opencv 函数 blur(src, dst, Size(10, 10));效果图1.13 高斯滤波原图像与满足正态分布的内核做卷积由于正态分布也被称为高斯分布因此这项技术被称为高斯模糊。高斯滤波的核高斯滤波的优点对于 抑制服从正态分布的高斯噪声非常有效。**opencv 函数 GaussianBlur(src, dst, Size(5, 5), 0, 0); **// sigmaX 和 sigmaY 都是0就由 ksize.width 和 ksize.height 计算出来// Size w,h 必须为奇数效果图1.2 非线性滤波1.2.1 中值滤波内核中心点的像素值为内核中所有点像素的中值。均值滤波的核中值滤波的特点对椒盐噪声表现较好对高斯噪声表现较差。椒盐噪声又称脉冲噪声它随机改变一些像素值在二值图像上表现为使一些像素点变白一些像素点变黑。而中值滤波则不受极大极小值影响。opencv 函数 medianBlur ( image, out, 7)。1.2.2 双边滤波滤波器由两个函数构成一个由几何空间距离决定滤波器系数另一个由像素差值决定滤波器系数。双边滤波的优点保留边界的同时去除噪声。opencv 函数bilateralFilter (image, out, 100, 0, 0 );参数3每个像素领域的直径d参数4、5颜色空间和坐标空间的sigma。1.3 形态学滤波1.3.1 腐蚀操作过程构建一个核并指定核的锚点用该核与图像卷积计算核覆盖区域的像素点最小值将其作为图像在锚点位置的像素值效果使暗的更暗1.3.2 膨胀操作过程构建一个核并指定核的锚点用该核与图像卷积计算核覆盖区域的像素点最大值将其作为图像在锚点位置的像素值效果使亮的更亮1.3.3 开运算操作过程:先腐蚀再膨胀效果消除小物体。1.3.4 闭运算操作过程:先膨胀再腐蚀效果排除小型黑洞。1.3.5 形态学梯度操作过程:膨胀 - 腐蚀效果保留物体边缘轮廓。1.3.6 顶帽操作过程:原图 - 开运算效果背景提取。1.3.7 黑帽操作过程:闭运算 - 原图效果轮廓提取。2. 阈值化2.1 阈值化的目的对图像像素进行取舍直接剔除一些低于或高于一定值的像素。2.2 固定阈值函数double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type)thresh: 决策阈值的大小maxval: 将大于thresh的值置为maxval值type二值化方法常用THRESH_BINARY二值化示例threshold(img, result, 170, 255, CV_THRESH_BINARY);3. 图像金字塔3.1 高斯金字塔3.1.1 向下采样操作步骤①. 用高斯核对图像进行卷积操作。②. 删除偶数行和列。效果①. 图像缩小为原来的1/4。②. 图像部分信息丢失变模糊。3.1.2 向上采样操作步骤①. 将图像在每个方向上扩大为原来的二倍新增的行和列用0填充。②. 用高斯核进行卷积模糊操作。效果①. 图像缩小为原来的4倍。②. 图像部分信息丢失比原图模糊。3.2 拉普拉斯金字塔3.2.1 求解方式第 i 层 拉普拉斯金字塔 第 i 层高斯金字塔 - 其先下采样再上采样。拉普拉斯金字塔是通过源图像减去先缩小后再放大的图像的一系列图像构成的。3.2.2 拉普拉斯金字塔作用可以获得高斯金字塔下采样再上采样中间丢失的图像信息。3.3 resize函数作用完成图像缩放函数参数void resize(InputArray src, OutputArray dst, Size dsize, double fx0, double fy0, int interpolationINTER_LINEAR )fx、fy为缩放系数interpolation: 插值方法缩小图像一般用INTER_AREA - 区域插值利用像素区域关系的重采样插值放大图像一般用INTER_LINEAR - 线性插值4. 边缘检测4.1 Sobel 算子4.1.1 Sobel 计算流程Gx用于检测横向灰度值Gy用于检测纵向灰度值。4.1.2 Sobel 函数Sobel ( const cvArr* src, CvArr* dst, int xorder, int yorder, int aperture_size 3 )xorder 1则计算图像x方向导数yorder 1则计算图像y方向导数。aperture_size: sobel 核大小只能为1, 3, 5, 7。cvSobel( src, dstx, 1, 0, 7 ); //sobelcvSobel( src, dsty, 0, 1, 7 );cvAddWeighted(dstx, 0.5, dsty, 0.5, 0, dst);4.1.3 Sobel的改进——Scharr 滤波器Scharr( src_gray, grad_x, ddepth, 1, 0, scale, delta, BORDER_DEFAULT );Scharr( src_gray, grad_x, ddepth, 0, 1, scale, delta, BORDER_DEFAULT );Sobel 滤波器只支持 size 3的核。4.2 Laplacian算子二阶微分算子4.2.1 Laplacian算子4.2.1 Laplacian函数Laplacian( src_gray, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT );src_gray 输入图像须为单通道图像。Laplacian(src,dst,CV_16S, 3);4.3 Canny 算子4.3.1 Canny 计算流程①. 高斯滤波减少噪声②. 利用sobel算子计算梯度幅值和方向③. 非极大值抑制④. 设置高低阈值2:1 3:1case 1. 若像素值 高阈值 该像素为边缘case2. 若像素值 低阈值 该像素不是边缘case3. 若像素值在两者之间该像素仅仅在连接到一个高于高阈值的像素时被保留。4.3.2 非极大值抑制 》 保留局部像素最大值点步骤①. 确定像素点C的灰度值在其8值邻域内是最大的。②. 判断C在其梯度方向是否最大即与dTmp1和dTmp2比较。(如果C点灰度值小于这两个点中的任一个那就说明C点不是局部极大值那么则可以排除C点为边缘。)③. 采用插值求解梯度方向与g1和g2对dTmp1进行插值根据g3和g4对dTmp2进行插值(以得到dTmp1、dTmp2两个位置处的像素值)这要用到其梯度方向这也是Canny算法中要求解梯度方向矩阵Thita的原因(算法的第二步)。**4.4 直方图均衡化4.4.1 直方图均衡化目的对图像进行非线性拉伸使图像直方图分布均匀,常用于图像增强处理中。4.4.2 直方图均衡化函数equalizeHist(image, image);输入图像须为单通道