【OpenCV】(六)滤波器

卷积核(又称滤波器) 0. 前言 虽然卷积核或者滤波器所指的是同一个东西,但是在传统图像处理一般叫滤波器,而在深度学习中叫卷积核。 1. 卷积(滤波) 卷积实际上是一种运算方式,可以理解为和加减乘除一样的运算方式,只不过更加复杂一点而已。一言以蔽之就是:两个矩阵对应位相乘,然后所有积求和 step1:对应位相乘 对应位相乘 求积 1*-1 -1 0*0 0 2*1 1 5*-1 -5 4*0 0 … … step2:然后所有积求和 sum=-1+0+1+5+0+…=0 我们将中间3 阅读详情

系列内容:OpenCV概述与环境配置,OpenCV基础知识和绘制图形,图像的算数与位运算,图像视频的加载和显示,图像基本变换,滤波器,形态学,图像轮廓,图像直方图,车辆统计项目,特征检测和匹配,图像查找和拼接,虚拟计算器项目,信用卡识别项目,图像的分割与修复,人脸检测与车牌识别,目标追踪,答题卡识别判卷与文档ocr扫描识别,光流估计

(一)卷积

1.图像卷积

图像卷积就是卷积核在图像上按行滑动遍历像素时不断相乘求和的过程.

如图6.1所示:

6.1-图片卷积

2.步长

步长就是卷积核在图像上移动的步幅,上面的例子中卷积核每次移动一个像素步长的结果,如果步长为2,结果如何?

为了充分扫描图片,步长一般设为1

如图6.2所示:

6.2-步长

3.padding

上面的例子中我们发现,卷积之后图片的长宽会变小,如果要保持图片大小不变,我们需要在图片周围填充0,padding指的值就是填充的0的圈数.如图6.3所示:

6.3-padding

我们可以通过公式计算出所需要填充0的圈数.

输入体积大小$H_{1}*W_{1}*D_{1}$

四个超参数:

(1)Filter数量K;

(2)Filter大小F;

(3)步长S;

(4)零填充大小P;

输出体积大小为$H_{2}*W_{2}*D_{2}$


H_{2}=\dfrac{(H_{1}-F+2P)}{S}+1

W_{2}=\dfrac{(W_{1}-F+2P)}{S}+1

D_{2}=k

如果要保持卷积之后图片大小不变,可以得出等式$(N+2P-F+1)=N$,从而可以推导出$P=\frac{F-1}{2}$

卷积核的大小:

图片卷积中,卷积核一般为奇数,比如$3*3,5*5,7*7$,原因:

  • 1.根据上面padding的计算公式,如果要保持图片大小不变,采用偶数卷积核的话,比如$4*4$,将会出现填充1.5圈0的情况;
  • 2.奇数维度的过滤器有中心,便于指出过滤器的位置,即OpenCV卷积中的锚点

4.卷积案例

filter2D(src,ddepth,kernel[,dst[,anchor[,delta[,borderType]]]])

其中:

  • ddepth是卷积之后图片的位深,即卷积之后图片的数据类型,一般设为-1,表示和原图类型一致;
  • kernel是卷积核大小,用元组或者ndarray表示,要求数据类型必须是float型;
  • anchor锚点,即卷积核的中心点,是可选参数,默认是(-1,-1)
  • delta可选参数,表示卷积后额外加的一个值,相当于线性方程中的偏差,默认是0;
  • borderType边界类型,一般不设.

5.示例代码

(1)正常操作(奇数卷积核)

#OpenCV图像卷积操作
import cv2
import numpy as np

#导入图片

img=cv2.imread('dog1.jpg')

#相当于原始图片中每个点都被平均了一下,所以图片变模糊了
kernel=np.ones((5,5),np.float32)/25
#ddepth=-1,表示图片的数据类型不变
dst=cv2.filter2D(img,-1,kernel)

#很明显是卷积之后的图片变模糊了
cv2.imshow('img',np.hstack((img,dst)))

cv2.waitKey(0)
cv2.destroyAllWindows()

正常结果如图6.4所示:

6.4-正常卷积结果

(2)尝试其他卷积核:

#OpenCV图像卷积操作
import cv2
import numpy as np

#导入图片

img=cv2.imread('dog1.jpg')

# #相当于原始图片中每个点都被平均了一下,所以图片变模糊了
# kernel=np.ones((5,5),np.float32)/25

#尝试其他卷积核

#突出轮廓
kernel=np.array([[-1,-1,-1],[-1,8,-1],[-1,-1,-1]])

# #浮雕效果
# kernel=np.array([[-2,1,0],[-1,1,1],[0,1,2]])

# #锐化
# kernel=np.array([[0,-1,0],[-1,5,-1],[0,-1,0]])

#ddepth=-1,表示图片的数据类型不变
dst=cv2.filter2D(img,-1,kernel)

#很明显是卷积之后的图片变模糊了
cv2.imshow('img',np.hstack((img,dst)))

cv2.waitKey(0)
cv2.destroyAllWindows()

非正常结果如图6.5图6.6图6.7所示:

6.5-正常卷积结果:突出轮廓
6.6-非正常卷积结果:浮雕
6.7-非正常卷积结果:锐化

(二)方盒滤波与均值滤波

1.方盒滤波等价于均值滤波

boxFilter(src,ddepth,ksize[,dst[,anchor[,normalize[,borderType]]]])方盒滤波

  • normalize=True时,$a=1/(W*H)$滤波器的宽度
  • normalize=False,a=1

一般情况我们取True,这时,方盒滤波等价于均值滤波

blur(src,ksize[,dst[,anchor[,borderType]]])均值滤波(模糊化)

卷积核表示:

K = a\left[ \begin{array} { c c c c c } 1 & 1 & 1 & \cdots & 1 \\ 1 & 1 & 1 & \cdots & 1 \\ \cdots \cdots \cdots \cdots \cdots \cdots \cdots \cdots \\ 1 & 1 & 1 & \cdots & 1 \end{array} \right]

方盒滤波等价于均值滤波。

2.方盒滤波实例

#方盒滤波
import cv2
import numpy as np

#导入图片
img=cv2.imread('dog1.jpg')

#不用手动创建卷积核,只需要告诉方盒滤波,卷积核的大小是多少

dst=cv2.boxFilter(img,-1,(5,5),normalize=True)

cv2.imshow('img',np.hstack((img,dst)))

cv2.waitKey(0)
cv2.destroyAllWindows()

方盒滤波如图6.8所示:

6.8-方盒滤波

3.均值滤波实例

#均值滤波
import cv2
import numpy as np

#导入图片
img=cv2.imread('dog1.jpg')

dst=cv2.blur(img,(5,5))

cv2.imshow('img',np.hstack((img,dst)))

cv2.waitKey(0)
cv2.destroyAllWindows()

均值滤波,如图6.9所示:

6.9-均值滤波

(三)高斯滤波

要理解高斯滤波,前置知识是高斯函数,高斯函数是符合高斯分布(正态分布)的概率密度函数,其图像如如图6.10所示:

6.10-高斯函数

1.一维正态分布(高斯分布)

若连续型随机变量X的概率密度为

f(x)=\frac{1}{\sqrt{2\pi\sigma^{2}}}e^{-\frac{(x - \mu)^{2}}{2\sigma^{2}}}

其中$\mu$,$\sigma$($\sigma>0$)为常数,则称X服从参数为$\mu$,$\sigma$的正太分布或高斯分布(Gauss),记为

$X \backsim N(\mu,\sigma^{2})$

如图6.11(1)所示:

6.11(1)-正态分布(高斯分布)

2.二维高斯分布

二维随机变量(X,Y)的概率密度为:

f(x,y) = \frac{1}{2\pi \sigma_X \sigma_Y \sqrt{1-\rho^2}} \exp\left( -\frac{1}{2(1-\rho^2)} \left[ \frac{(x-\mu_X)^2}{\sigma_X^2} + \frac{(y-\mu_Y)^2}{\sigma_Y^2} - \frac{2\rho(x-\mu_X)(y-\mu_Y)}{\sigma_X \sigma_Y} \right] \right)

其中$\mu_x,\mu_y,\sigma_x,\sigma_y,\rho$都是常数,且$\sigma_x >0,\sigma_y>0,-1<\rho<1$,我们称(X,Y)为服从参数为$\mu_x,\mu_y,\sigma_x,\sigma_y,\rho$的二维正态分布,如图6.11(2)所示

6.11(2)-二维高斯分布

3.高斯滤波

高斯滤波就是使用符合高斯分布的卷积核对图片进行1卷积操作,所以高斯滤波的重点就是如何计算符合高斯分布的卷积核,即高斯模板.

假定中心点的坐标为(0,0),那么取距离它最近的8个点坐标,为了计算,假定$\sigma=1.5$,则模糊半径为1的高斯模板计算如图6.12所示

6.12-模糊半径为1的高斯模板计算

我们可以观察到越靠近中心,数值越大,越边缘的数值越小,符合高斯分布.

通过高斯分布计算出来的是概论密度函数,所以我们还要确保这几个点加起来的和为1,这九个点的权重总和等于0.4787147,因此上面九个值还要分别除以0.4787147,得到最终的高斯模板

注意,有些整数高斯模板是在归一化后的高斯模板的基础上每个数除以左上角的值,然后取整.如图6.13所示

6.13-取整高斯模板计算

有了卷积核,计算高斯滤波就简单了,假设有9个像素点,灰度值(0-255)的高斯滤波计算如如图6.14所示

6.14-9个像素点高斯滤波计算

将这九个值加起来,就是中心点的高斯滤波的值,对于所有点重复这个过程,就得到了高斯模糊后的图像.

4.高斯模糊函数

GaussianBlur(src,ksize,sigmaX[,dst[,sigmaY[,borderType]]])

  • kernel,高斯核的大小
  • sigmaX,x轴的标准差
  • sigmaY,Y轴的标准差,默认为0,这时sigmaY=sigmaX

如果没有指定的sigma的值,会分别从ksize的宽度和高度中计算sigma

选择不同的sigma值会对应不同的平滑效果,sigma越大,平滑效果越强,如图6.15所示

6.15-sigma越大,平滑效果越强

没有指定sigma时,ksize越大,平滑效果越明显,如图6.16所示

6.16-没有指定sigma时

5.示例代码

#高斯函数
import cv2
import numpy as np

#导入图片
img=cv2.imread('lena.jpg')

dst=cv2.GaussianBlur(img,(5,5),sigmaX=1)

cv2.imshow('img',np.hstack((img,dst)))

cv2.waitKey(0)
cv2.destroyAllWindows()

处理结果对比图,lena处理结果对比图(指定sigmaX)如图6.17所示

6.17-lena处理结果对比图(指定sigmaX)

不指定sigmaX时,

#高斯函数
import cv2
import numpy as np

#导入图片
img=cv2.imread('lena.jpg')

# dst=cv2.GaussianBlur(img,(5,5),sigmaX=1)
#不指定sigmaX会使用ksize计算sigma
dst=cv2.GaussianBlur(img,(5,5),sigmaX=0)
cv2.imshow('img',np.hstack((img,dst)))

cv2.waitKey(0)
cv2.destroyAllWindows()

lena处理结果对比图(不指定sigmaX),如图6.18所示

6.18-lena处理结果对比图(不指定sigmaX)

(四)中值滤波

中值滤波原理非常简单,假设有一个数组(1556789),取其中间值(即中位数)作为卷积后的结果值即可,中值滤波对胡椒噪音(椒盐噪音)效果明显。

#中值滤波
import cv2
import numpy as np

#导入图片
img=cv2.imread('lena.jpg')

#注意这里ksize就是一个常数
dst=cv2.medianBlur(img,5)
cv2.imshow('img',np.hstack((img,dst)))

cv2.waitKey(0)
cv2.destroyAllWindows()

中值滤波处理ikun,效果好,如图6.19所示:

6.19-中值滤波处理ikun

高斯滤波处理ikun,效果不好,如图6.20所示:

#中值滤波
import cv2
import numpy as np

#导入图片
img=cv2.imread('ikun.jpg')

# #注意这里ksize就是一个常数
# dst=cv2.medianBlur(img,5)

#椒盐噪声使用高斯滤波,效果不好,
dst=cv2.GaussianBlur(img,(5,5),sigmaX=1)

cv2.imshow('img',np.hstack((img,dst)))

cv2.waitKey(0)
cv2.destroyAllWindows()
6.20-高斯滤波处理ikun

 

(五)双边滤波

双边滤波对于图像的边缘信息能够更好地保存,其原理为一个与空间距离相关的高斯函数与一个与灰度相关的高斯函数相乘.

1.图像距离

  • 空间距离:指的是当前点与中心点的欧氏距离.空间域高斯函数其数学形式为:

d=exp^{-\dfrac{(x_{i}-x_{c})^{2}+(y_{i}-y_{c})^{2}}{2 \sigma^{2)}}}

其中,$(x_{i},y_{i})$为当前点位置,$(x_{c},y_{c})$为中心点的位置,$\sigma$为空间域标准差.

  • 灰度距离:指的是当前点灰度值与中心点灰度差的绝对值.值域高斯函数的数学表达式为:

d=exp^{-\dfrac{(gray(x_{i},y_{i})-gray(x_{c},y_{c}))^{2}}{2 \sigma^{2}}}

其中$gray(x_{i},y_{i})$为当前点灰度值,$gray(x_{c},y_{c})$为中心点灰度值,$\sigma$为值域标准差

2.双边滤波与高斯滤波的关系

双边滤波本质上是高斯滤波,双边滤波和高斯滤波不同的就是:双边滤波既利用了位置信息又利用了像素信息来定义滤波窗口的权重。而高斯滤波只用了位置信息。

对于高斯滤波,仅用空间距离的权值系数核与图像卷积后,确定中心点的灰度值。即认为离中心点越近的点,其权重系数越大。

双边滤波中加入了对灰度信息的权重,即在邻域内,灰度值越接近中心点灰度值的点的权重更大,灰度值相差大的点权重越小。此权重大小,则由值域高斯函数确定。

两者权重系数相乘,得到最终的卷积模板。由于双边滤波需要每个中心点邻域的灰度信息来确定其系数,所以其速度与一般的滤波慢很多,而且计算量增长速度为核大小的平方。

高斯滤波与双边滤波对比,如图6.21所示:

6.21-高斯滤波与双边滤波对比

双边滤波可以保留边缘,同时可以对边缘内的区域进行平滑处理

双边滤波的作用就相当于做了美颜.

3.双边滤波

bilateralFilter(src,d,sigmaColor,sigmaSpace[,dst[,borderType]])

  • sigmaColor计算像素信息使用的sigma
  • sigmaSpace计算空间信息使用的sigma

4.示例

双边滤波对椒盐噪声处理

#双边滤波
#中值滤波
import cv2
import numpy as np

#导入图片
img=cv2.imread('ikun.jpg')
#双边滤波对椒盐噪声几乎没有效果

dst=cv2.bilateralFilter(img,7,50,50)

cv2.imshow('img',np.hstack((img,dst)))

cv2.waitKey(0)
cv2.destroyAllWindows()

双边滤波对椒盐噪声处理,如图6.22所示:

6.22-双边滤波对椒盐噪声几乎没有效果

美颜效果

#双边滤波
#中值滤波
import cv2
import numpy as np

#导入图片
img=cv2.imread('face1.jpg')

dst=cv2.bilateralFilter(img,7,50,50)

cv2.imshow('img',np.hstack((img,dst)))

cv2.waitKey(0)
cv2.destroyAllWindows()

美颜效果,如图6.23所示:

6.23-对照片进行美颜

(六)sobel算子

1.原理

边缘是像素值发生跃迁的位置,是图像的显著特征之一,在图像特征提取,对象检测,模式识别等方面都有重要的作用。

人眼如何识别图像边缘?

比如有一幅图,图里面有一条线,左边很亮,右边很暗,那人眼就很容易识别这条线作为边缘.也就是像素的灰度值快速变化的地方.

sobel算子对图像求一阶导数。一阶导数越大,说明像素在该方向的变化越大,边缘信号越强。

因为图像的灰度值都是离散的数字, sobel算子采用离散差分算子计算图像像素点亮度值的近似梯度.

图像是二维的,即沿着宽度/高度两个方向.

我们使用两个卷积核对原图像进行处理:

  • 水平方向

G_x = \begin{bmatrix} -1 & 0 & +1 \\ -2 & 0 & +2 \\ -1 & 0 & +1 \end{bmatrix} * I

  • 垂直方向

G_y = \begin{bmatrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ +1 & +2 & +1 \end{bmatrix} * I

这样的话,我们就得到了两个新的矩阵,分别反映了每一点像素在水平方向上的亮度变化情况和在垂直方向上的亮度变化情况.

综合考虑这两个方向的变化,我们使用以下公式反映某个像素的梯度变化情况:

G=\sqrt{G^{2}_{x}+G^{2}_{y}}

有时为了简单起见,也直接使用绝对值相加来代替$G=|G_{x}|+|G_{y}|$

2.示例

用方格为例,如图6.24所示:

6.24-对方格进行计算
#sobel算子
import cv2
import numpy as np

#导入图片
img=cv2.imread('table.jpg')
#x轴方向获取垂直边缘
dx=cv2.Sobel(img,cv2.CV_64F,1,0,ksize=1)
#y轴方向获取水平边缘
dy=cv2.Sobel(img,cv2.CV_64F,0,1,ksize=1)

#可利用numpy的加法,直接整合两张图片
#dst=dx+dy
#也可利用opencv的加法
dst=cv2.add(dx,dy)
cv2.imshow('dx',np.hstack((dx,dy,dst)))

cv2.waitKey(0)
cv2.destroyAllWindows()

以ikun为例,如图6.25所示:

6.25-对ikun进行计算

(七)scharr算子

1.原理

Scharr(src, ddepth, dx, dy[, dst[, scale[, delta[, borderType]]]])

当内核大小为 3 时,以上Sobel内核可能产生比较明显的误差(毕竟,Sobel算子只是求了导数的近似值)。

为解决这一问题,OpenCV提供了 Scharr 函数,但该函数仅作用于大小为3的内核。该函数的运算与Sobel函数一样快,但结果却更加精确。

2.Scharr和Sobel对比

Scharr算子和Sobel很类似,只不过使用不同的kernel值,放大了像素变换的情况:

G_x = \begin{bmatrix} -3 & 0 & +3 \\ -10 & 0 & +10 \\ -3 & 0 & +3 \end{bmatrix}

G_y = \begin{bmatrix} -3 & -10 & -3 \\ 0 & 0 & 0 \\ +3 & +10 & +3 \end{bmatrix}

说明:

  • Scharr算子只支持3 * 3的kernel所以没有kernel参数了.
  • Scharr算子只能求x方向或y方向的边缘.
  • Sobel算子的ksize设为-1就是Scharr算子.
  • Scharr擅长寻找细小的边缘,一般用的较少.

3.示例

以lena为例,对lena进行scharr算子计算

#scharr算子
import cv2
import numpy as np

#导入图片
img=cv2.imread('lena.jpg')

#x轴方向获取垂直边缘
dx=cv2.Scharr(img,cv2.CV_64F,dx=1,dy=0)
#y轴方向获取水平边缘
dy=cv2.Scharr(img,cv2.CV_64F,dx=0,dy=1)

dst=cv2.addWeighted(dx,0.5,dy,0.5,gamma=0)

cv2.imshow('img',np.hstack((dx,dy,dst)))

cv2.waitKey(0)
cv2.destroyAllWindows()

对lena进行scharr算子计算,如图6.26所示:

6.26-对lena进行scharr算子计算

(八)拉普拉斯算子

1.原理

sobel算子是模拟一阶求导,导数越大的地方说明变换越剧烈,越有可能是边缘.

如图6.27所示:

6.27-sobel算子模拟一阶求导

那如果继续对$f^{'}(t)$求导呢,如图6.28所示:

6.28-sobel算子模拟二阶求导

可以发现"边缘处"的二阶导数等于0,我们可以利用这一特性去寻找图像的边缘。注意有一个问题,二阶导求导为0的位置也可能是无意义的位置.

以 \( x \) 方向求解为例:

一阶差分: \( f'(x)=f(x)-f(x - 1) \)

二阶差分: \( f''(x)=f'(x + 1)-f'(x)=(f(x + 1)-f(x))-(f(x)-f(x - 1)) \)

化简后: \( f''(x)=f(x - 1)-2f(x)+f(x + 1) \)

同理可得: \( f''(y)=f(y - 1)-2f(y)+f(y + 1) \)

把 \( x,y \) 方向的梯度叠加在一起.

\( f''(x,y)=f_{x}'(x,y)+f_{y}'(x,y) \)

\( f''(x,y)=f(x - 1,y)-2f(x,y)+f(x + 1,y)+f(x,y - 1)-2f(x,y)+f(x,y + 1) \)

\( f''(x,y)=f(x - 1,y)+f(x + 1,y)+f(x,y - 1)+f(x,y + 1)-4f(x,y) \)

这个等式可以用矩阵写成:

f''(x,y)=\begin{bmatrix} 0 & 1 & 0 \\ 1 & -4 & 1 \\ 0 & 1 & 0 \end{bmatrix} \odot \begin{bmatrix} f(x - 1,y - 1) & f(x,y - 1) & f(x + 1,y - 1) \\ f(x - 1,y) & f(x,y) & f(x + 1,y) \\ f(x - 1,y + 1) & f(x,y + 1) & f(x + 1,y + 1) \end{bmatrix}

这样就得到了拉普拉斯算子的卷积核即卷积模板

2.拉普拉斯算子的卷积核(卷积模板)

Laplacian(src, ddepth[, dst[, ksize[, scale[, delta[, borderType]]]]])

可以同时求两个方向的边缘

对图像敏感,一般需要先进行去噪再调用拉普拉斯

3.示例

#拉普拉斯
import cv2
import numpy as np

#导入图片
img=cv2.imread('table.jpg')
dst=cv2.Laplacian(img,-1,ksize=3)

cv2.imshow('img',np.hstack((img,dst)))

cv2.waitKey(0)
cv2.destroyAllWindows()

拉普拉斯算子示例,如图6.29所示:

6.29-拉普拉斯算子示例

(九)Canny边缘检测算法

1.原理

Canny边缘检测算法是 John F. Canny 于 1986 年开发出来的一个多级边缘检测算法,也被很多人认为是边缘检测的最优算法,最优边缘检测的三个主要评价标准是:

  1. 低错误率:标识出尽可能多的实际边缘,同时尽可能的减少噪声产生的误报。
  2. 准确性:标识出的边缘要与图像中的实际边缘尽可能接近。
  3. 最小响应:图像中的边缘只能标识一次。

2.Canny边缘检测的一般步骤

(1).去噪:边缘检测算法容易受到噪声影响,在进行边缘检测前通常需要先进行去噪,一般用高斯滤波去除噪声。

(2).计算梯度:对平滑后的图像采用sobel算子计算梯度和方向。

  • $G = \sqrt{G_{x}^{2} + G_{y}^{2}}$ 为了方便一般可以改用绝对值
  • $\theta = \arctan\left(\frac{G_{y}}{G_{x}}\right)$
  • 梯度的方向被归为四类:垂直,水平和两个对角线。
  • 计算出来的梯度和方向大概如下图6.30所示:
6.30-梯度和方向

(3).非极大值抑制

  • 在获取了梯度和方向后, 遍历图像, 去除所有不是边界的点.
  • 实现方法: 逐个遍历像素点, 判断当前像素点是否是周围像素点中具有相同方向梯度的最大值.
  • 下图中, 点A,B,C具有相同的方向, 梯度方向垂直于边缘如下图6.31所示.
  • 判断点A是否为A,B,C中的局部最大值, 如果是, 保留该点;否则,它被抑制(归零)
  • 更形象的例子如下图6.32所示
  • 滞后阈值,如下图6.33所示
6.31-梯度和方向梯度方向垂直于边缘
6.32-更形象的例子
6.33-滞后阈值

(4).Canny(img,minVal,maxVal,$\dots$)

3.示例

#Canny
import cv2
import numpy as np

#导入图片
img=cv2.imread('lena1.png')
lena1=cv2.Canny(img,100,200)
lena2=cv2.Canny(img,64,120)

cv2.imshow('lena',np.hstack((lena1,lena2)))

cv2.waitKey(0)
cv2.destroyAllWindows()

码运行结果如下图6.34所示:

6.34-对lena进行边缘检测
OpenCV滤波器内核Kernel     在图像处理中许多滤波器(滤波函数)都会使用核(Kernel),那么什么是核呢?    核其实是一组权重,决定了如何利用某一个点周围的像素点来计算新的像素点,核也被称为卷积矩阵,对一个区域的像素做调和或者卷积运算,通常基于核的滤波器被称为卷积滤波器。OpenCV中的filter2D()函数,可以运用由用户指定的任意核来计算。    核是什么样的格式?    通常核是一个二位数组,特征是奇数行... 阅读详情

相关推荐

opencv几种滤波器介绍

前言: 因为平时能用到各种滤波器,但是对各种滤波器效果并不清楚,现在准备把逐渐能用到的滤波器写下来,方便自己以后查阅。 1.中值滤波 中值滤波器是一种非线性滤波器,常用于消除图像中的椒盐噪声。与低通滤波不同的是,中值滤波有利于保留边缘的尖锐度,但它会洗去均匀介质区域中的纹理。 适用于椒盐噪声       椒盐噪声是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。椒盐噪声

五仁月饼哭了的博客 2157

opencv------卷积操作

opencv------卷积操作

LYSSLQ2015的博客 3201

OpenCV(4)--HPF高通滤波器

目录1. HPF高通滤波器2. 低通滤波器 1. HPF高通滤波器 高通滤波器(HPF)是检测图像的某个区域,然后根据像素与周围像素的亮度差值来提升像素的亮度。通过高通滤波器进行滤波后,再和原图像叠加,可以增强图像中灰度级变化较快的部分,即锐化。 用于:边缘提取与增强。 高通滤波:高频信号可以通过,而低频信号不能通过。 低通滤波:低频信号可以通过,而高频信号不能通过。 安装scipy模块: 其他...

ShaneHolmes 4652

OpenCV图像处理----图片卷积

图片卷积 图像滤波是尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。 线性滤波是图像处理最基本的方法,它允许我们对图像进行处理,产生很多不同的效果。首先,我们需要一个二维的滤波器矩阵(卷积核)和一个要处理的二维图像。然后,对于图像的每一个像素点,计算它的邻域像素和滤波器矩阵的对应元素的乘积,然后加起来,作为该像素位置的值。这样就完成了滤波过程。 对图像和滤波矩阵进行逐个元素相乘再求和的操作就相当

bjsyc123456的博客 3366

OpenCV实现图像卷积操作

【代码】OpenCV实现图像卷积操作。

weixin_44119674的博客 500

OpenCV之图像滤波篇

本文主要介绍opencv中图像前处理工具中的图像滤波处理,详细介绍其原理和功能,并附上相关功能代码

qq_42857680的博客 1190

OpenCV学习笔记(六) 滤波器 形态学操作(腐蚀、膨胀等)

OpenCV学习笔记(六) 滤波器 形态学操作(腐蚀、膨胀等) 转自:OpenCV 教程 另附:计算机视觉:算法与应用(2012),Learning OpenCV(2009) 平滑图像:滤波器 平滑 也称 模糊, 是一项简单且使用频率很高的图像处理方法。平滑处理的用途有很多, 但是在本教程中我们仅仅关注它减少噪声的功用 (其他用途在以后的教程中会接触到)。平滑处理时需要用到一个 滤波器 。最常用的...

springslx的专栏 460

OpenCV实战(13)——高通滤波器及其应用

在频域分析中,滤波器是一种放大图像某些频带同时减少其他频带的操作,低通滤波器 (low-pass filters) 是消除图像高频成分的滤波器,而高通滤波器 (high-pass filters) 消除图像的低频成分。在本节中,我们介绍高通滤波器,并利用高通滤波器执行边缘检测。

盼小辉丶的博客 2万+

OpenCV学习笔记(六) 滤波器 形态学操作(腐蚀、膨胀等)

转自:OpenCV 教程 另附:计算机视觉:算法与应用(2012),Learning OpenCV(2009) 平滑图像:滤波器 平滑也称模糊, 是一项简单且使用频率很高的图像处理方法。平滑处理的用途有很多, 但是在本教程中我们仅仅关注它减少噪声的功用 (其他用途在以后的教程中会接触到)。平滑处理时需要用到一个滤波器。最常用的滤波器是线性滤波器。不妨把滤波器想象成一个包含加...

weixin_30480651的博客 334

OpenCV基础知识(6)— 滤波器(均值滤波器、中值滤波器、高斯滤波器和双边滤波器)

在尽量保留原图像信息的情况下,去除图像内噪声、降低细节层次信息等一系列过程,被叫做图像的平滑处理(或者叫图像的模糊处理),本节将介绍均值滤波器、中值滤波器、高斯滤波器和双边滤波器的使用方法!

小哥谈 3339

openCV实现高通滤波器

import cv2 import numpy as np from scipy import ndimage #高通滤波器,这些滤波器中所有的值加起来为0 kernel_3x3 = np.array([[-1,-1,-1], [-1, 8,-1], [-1,-1,-1]]) kernel_5x5 = ...

lxiao428的博客 3631

OpenCV第七章——滤波器

滤波器通常是一个矩形的区域(比如3x3、5x5的矩阵),其大小决定了计算均值时考虑的邻域范围。

2301_80166849的博客 3609

大模型系统构建的“三驾马车”——Prompt、Context与Harness工程

在LLM应用开发的早期阶段,我们热衷于比拼“提示词”的精妙程度。那时,一个精心构造的思维链CoT就能让模型的表现提升10%以上。随着大模型从“玩具”走向“生产系统”,我们逐渐意识到:单一的 Prompt 只是起点,而非终点。 真正的工业级应用,需要构建一套三层递进的工程体系——Prompt Engineering、Context Engineering 和 Harness Engineering。

西木风落 604

OpenCV滤波器

中值滤波器 函数:void medianBlur( InputArray src, OutputArray dst, int ksize ); 参数: src:输入图像 dst:输出结果 ksize:尺寸 说明:中值滤波一般不会用的最大值与最小值,在处理salt点图像时可以体现其效果 方框滤波器 函数:blur( InputArray src, OutputArray ds

知行且执行 1467

BrainVision Recorder 和 BrainVision Analyzer 2.2 安装

本篇为《EEG处理》系列博客的第二篇,该系列博客主要记录EEG信号处理的学习过程中的软件安装和学习过程,方便以后查阅。本篇为BrainVision Recorder 和 BrainVision Analyzer 2.2 的安装过程。 BrainVision Recorder 和 BrainVision Analyzer 2.2 安装安装前奏Brain Vision Analyzer分析软件 安装Brain Vision Recorder记录软件 安装推荐几款个人使用的科研软件 安装前奏 Brain V

梁小憨憨的博客 5063

C#读取CAD文件(dwg/dxf)并处理

项目要求识别CAD图纸(图纸内容与现实事物比例是1:1)中的内容,并提取出一些关键信息。这里的CAD图纸是指CAD文件,包含多种格式,dwg/dxf/dwf/stl/pdf等等。识别其中内容,主要指文件中的图元信息(也叫实体Entity),指线段、圆弧、矩形等图形元素。得到图元基础信息(比如长度、坐标、粗细)后,进一步做处理(如得到交点、得到线段间间隔、圆弧与线段切点等)。听起来有点难,因为作为软件工程师,对CAD相关事物并不了解,它是未知的;

三千幻想乡 1万+

计算机视觉(六):频率域滤波器

一、滤波器1. 基本滤波公式2. 滤波步骤3. 低通滤波器与高通滤波器二、低通滤波器(平滑图像)1. 理想低通滤波器2. 布特沃斯低通滤波器3. 高斯低通滤波器三、高通滤波器(锐化图像)1. 理想高通滤波器2. 布特沃斯高通滤波器3. 高斯高通滤波器四、代码实现(Python+OpenCV) 一、滤波器 1. 基本滤波公式 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...

tb店铺搜:FUN STORE玩物社,专业买手挑选送礼好物 6006

告别OFDM卡顿:用MATLAB手把手仿真AFDM波形,搞定高铁、无人机通信的时变信道难题

本文详细介绍了如何使用MATLAB仿真AFDM波形,解决高铁和无人机通信中的时变信道难题。通过仿射变换技术,AFDM在多普勒频移严重的场景下表现优异,显著提升通信质量。文章包含参数配置、波形生成、性能对比等实战内容,适合通信工程师和研究人员参考。

weixin_27014595的博客 318

opencv中的各种滤波器简介

在 OpenCV 中,滤波器是图像处理中的重要工具,用于对图像进行平滑、去噪、边缘检测等操作。以下是几种常见滤波器的简单介绍。

游客520 1240

Comfy UI实战:如何用Checkpoint和Lora打造超写实人像(附完整工作流)

本文详细介绍了如何利用Comfy UI结合Checkpoint基础模型和Lora微调模型,打造超写实人像生成系统。从核心模型选择、工作流架构设计到提示词工程和参数优化,提供了一套完整的实战指南,帮助创作者提升AI绘画的专业水准和效率。

weixin_29032489的博客 461

基于Simulink的鲸鱼优化算法(WOA)MPPT仿真

摘要:本文介绍了基于Simulink的鲸鱼优化算法(WOA)在光伏MPPT控制中的应用。WOA模拟座头鲸的"气泡网捕食策略",通过包围猎物、螺旋收缩和随机搜索三阶段动态平衡全局探索与局部开发能力,有效解决局部阴影导致的多峰P-V曲线问题。文章详细讲解了WOA-MPPT的Simulink建模过程,包括多峰光伏阵列建模、WOA控制器实现和Boost变换器控制。仿真结果显示,在三种典型工况下,WOA-MPPT的追踪效率>99.3%,动态响应时间<0.15s,性能优于传统算法。最后提出了混合WO

amy_mhd的博客 72

opencv实战项目十八:Gabor滤波器提取布料纹理

在计算机视觉和图像处理领域,纹理分析一直是一个热门且富有挑战性的话题。纹理,作为图像中的一种重要视觉特征,不仅承载着丰富的视觉信息,而且在许多实际应用中扮演着关键角色,如物体识别、场景分类、图像检索等。为了有效地提取和描述图像中的纹理信息,研究者们提出了多种算法和工具,其中Gabor滤波器因其独特的优势而备受关注。Gabor滤波器,一种基于正弦和余弦函数的线性滤波器,以其在空域和频域中同时具有局部化的特性而著称。它能够模拟人类视觉系统中的简单细胞感受野,因此在纹理分析和特征提取方面表现出色。

HanWenKing的博客 2467

【AI产品与商业航图】Flux.1 完全开源 AI 绘图模型:本地部署与 ComfyUI 实战指南

Flux.1是一个开源项目,用户可以自由使用和修改,完全免除使用费用。🖥️本地部署支持:与一些依赖云端计算的工具不同,Flux.1支持本地部署,确保用户可以离线使用并自主控制数据隐私。🔄兼容ComfyUI框架:Flux.1可以无缝集成到ComfyUI中,用户可以享受更加简便和直观的操作界面。🎨卓越的图像生成能力:Flux.1能够生成高质量、细腻的图像,支持多种风格与创作主题的切换。💾低硬件要求。

高校图书馆高级系统架构师/研究馆员,推动高校AI从概念演示到可评审、可交付、可运维:路线图与立项评审、PoC交付、评测回归与上线运维(Baseline/Eval/Ops)。 1737
上一篇: 【OpenCV】(五)图像基本变换
下一篇: 【OpenCV】(七)形态学
Cccp.123
博客等级 码龄3年 5粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值