OpenCV学习笔记(七) 图像金字塔 阈值 边界
转自: OpenCV 教程
使用 图像金字塔 进行缩放
图像金字塔是视觉运用中广泛采用的一项技术。一个图像金字塔是一系列图像的集合 - 所有图像来源于同一张原始图像 - 通过梯次向下采样获得,直到达到某个终止条件才停止采样。有两种类型的图像金字塔常常出现在文献和应用中:
- 高斯金字塔(Gaussian pyramid): 用来向下采样
- 拉普拉斯金字塔(Laplacian pyramid): 用来从金字塔低层图像重建上层未采样图像
高斯金字塔
每一层都按从下到上的次序编号, 层级 (表示为 ,尺寸小于层级 ())。
缩小图像的过程:获取层级为 的金字塔图像步骤为
- 将 与高斯内核卷积:
- 将所有偶数行和列去除。
结果图像只有原图的四分之一。
放大图像的过程:
- 首先,将图像在每个方向扩大为原来的两倍,新增的行和列以0填充()
- 使用先前同样的内核(乘以4)与放大后的图像卷积,获得 “新增像素” 的近似值。
这两个步骤(向下和向上采样) 分别通过OpenCV函数 pyrUp 和 pyrDown 实现。
pyrUp( tmp, dst, Size( tmp.cols*2, tmp.rows*2 );
- tmp: 当前图像, 初始化为原图像 src 。
- dst: 目的图像( 显示图像,为输入图像的两倍)
- Size( tmp.cols*2, tmp.rows*2 ) : 目的图像大小, 既然我们是向上采样, pyrUp 期待一个两倍于输入图像( tmp )的大小。
基本阈值操作
阈值是最简单的图像分割的方法。这样的图像分割方法是基于图像中物体与背景之间的灰度差异,而且此分割属于像素级的分割。
分为五种阈值化类型:二进制阈值化、反二进制阈值化、截断阈值化、阈值化为0、反阈值化为0。(都比较简单,详细介绍见教程)
threshold( src_gray, dst, threshold_value, max_BINARY_value,threshold_type );
- src_gray: 输入的灰度图像的地址。
- dst: 输出图像的地址。
- threshold_value: 进行阈值操作时阈值的大小。
- max_BINARY_value: 设定的最大灰度值(该参数运用在二进制与反二进制阈值操作中)。
- threshold_type: 阈值的类型。从上面提到的5种中选择出的结果。
添加边界
大多数用到卷积操作的OpenCV函数都是将给定图像拷贝到另一个轻微变大的图像中,然后自动填充图像边界,这样卷积操作就可以在边界像素安全执行了(填充边界在操作完成后会自动删除)。
copyMakeBorder( src, dst, top, bottom, left, right, borderType, value );
- src: 原图像
- dst: 目标图像
- top, bottom, left, right: 各边界的宽度。e.g. top = (int) (0.05*src.rows);
- borderType: 边界类型,此处可以选择常数边界或者复制边界。
- BORDER_CONSTANT: 使用常数填充边界
- BORDER_REPLICATE: 复制原图中最临近的行或者列。
- value: 如果 borderType 类型是 BORDER_CONSTANT, 该值用来填充边界像素。