经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《OpenCV 4开发详解》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。 |
前面介绍的滤波函数使用的滤波器都是固定形式的滤波器,有时我们需要根据实际需求调整滤波模板,例如在滤波计算过程中滤波器中心位置的像素值不参与计算,滤波器中参与计算的像素值不是一个矩形区域等。OpenCV 4无法根据每种需求单独编写滤波函数,因此OpenCV 4提供了根据自定义滤波器实现图像滤波的函数,就是我们本章最开始介绍的卷积函数filter2D(),不过根据函数的名称,这里称呼为滤波函数更为准确一些,输入的卷积模板也应该称为滤波器或者滤波模板。该函数的使用方式我们在一开始已经介绍,只需要根据需求定义一个卷积模板或者滤波器,便可以实现自定义滤波。
无论是图像卷积还是滤波,在原图像上移动滤波器的过程中每一次的计算结果都不会影响到后面过程的计算结果,因此图像滤波是一个并行的算法,在可以提供并行计算的处理器中可以极大的加快图像滤波的处理速度。除此之外,图像滤波还具有可分离行,这个性质我们在高斯滤波中有简单的接触,可分离性指的是先对X(Y)方向滤波,再对Y(X)方向滤波的结果与将两个方向的滤波器联合后整体滤波的结果相同。两个方向的滤波器的联合就是将两个方向的滤波器相乘,得到一个矩形的滤波器,例如X方向的滤波器为 x = [ x 1 x 2 x 3 ] x={\begin{bmatrix}{
{x_1}}&{
{x_2}}&{
{x_3}} \end{bmatrix}} x=[x1x2x3] ,Y方向的滤波器为 y = [ y 1 y 2 y 3 ] T y = {\begin{bmatrix}{
{y_1}} &{
{y_2}}&{
{y_3}}\end{bmatrix}}^T y=[y1y2y3]T,两个方向联合滤波器可以用式(5.7)计算,无论先进行X方向滤波还是Y方向滤波,两个方向联合滤波器都是相同的。
x y = [ y 1 y 2 y 3 ] ∗ [ x 1 x 2 x 3 ] = [