Goinggogogo 2018-01-09
图像作为一个一维信号,也可以通过多种低通过滤器(low-pass filters, LPF)和高通过滤器(high-pass filters, HPF)来过滤。
低通过滤器可以去除噪声,或者模糊图像。高通过滤器可以帮助在一个图像中找出边界。
OpenCV提供了一个函数,cv2.filter2D(),对一个图像进行内核卷积。
比方说使用一个5x5的滤波内核,即表示针对每一个像素,它的色值为:它周边5x5区域内所有像素色值累加,然后除25(等于计算这个区域内素有像素色值的均值)。
对一个图像里的所有像素都进行上述处理之后,等到一个过滤后的图像。
cv2.filter2D(src, ddepth, kernel)
a)src:源图像
b)ddepth:目标图像深度(图像深度:存储每个像素所用的位数)
c)kernel:卷积核,一个单通道浮点型矩阵
结果例子:
一个5x5的核,和一个50x50的核
图像模式是使用一个低通滤波内核对一个图像进行卷积操作。可以去除噪声。
OpenCV提供了主要的4种模糊技术:
1)均值模糊
通过一个标准的箱式滤波器对一个图像进行卷积。取得核范围内所有像素色值的平均值然后赋给中心的像素。
cv2.blur(img, (5,5))
2)高斯模糊
使用一个高斯内核,需要制定核的大小是一个正奇整数。需要制定X和Y方向的标准偏差。
对于去除图像里的高斯噪声非常高效。
(高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声)
cv2.GaussianBlur(src, ksize, sigmaX)
a)src:源图像
b)ksize:卷积核大小
c)X方向定向偏差
3)中值模糊
求卷积核内像素的中值,并赋值给中心像素。对去除椒盐噪声非常高效。
相对于高斯内核和标准箱式内核,可能会给像素赋在源图像里不存在的色值。中值平滑肯定会给中心像素设定一个在源图像存在的像素色值。这也非常有效地减少噪声。
cv2.medianBlur(src, ksize)
a)src:源图像
b)ksize:卷积核大小
4)双边模糊
相对于以上3种模糊方法是模糊边界,双边平滑保留边界,但是处理速度相对3种方法要慢。
cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace)
a)src:源图像
b)d:参与模糊的邻居像素个数
c)sigmaColor:值越大表示在像素邻域内更远的颜色会被混合在一起,会生成一个更大的颜色近相等的区域
d)sigmaSpace:值越大表示颜色足够相似的更远的像素互相影响
结果例子:
-- End --