图像卷积操作
图像卷积可以看成是一个窗口区域在另外一个大的图像上移动,对每个窗口覆盖的区域都进行点乘得到的值作为中心像素点的输出值。窗口的移动是从左到右,从上到下。窗口可以理解成一个指定大小的二维矩阵,里面有预先指定的值。
dst=cv.blur(src,(15,15))
图像均值与高斯模糊
本质上是不同的卷积核对图像进行图像卷积
-
均值模糊是卷积核的系数完全一致,
-
高斯模糊考虑了中心像素距离的影响,对距离中心像素使用高斯分布公式生成不同的权重系数给卷积核,然后用此卷积核完成图像卷积得到输出结果就是图像高斯模糊之后的输出。
OpenCV高斯模糊 API函数
void GaussianBlur(
InputArray src, //输入图像
OutputArray dst, //输出图像
Size ksize, // Ksize为高斯滤波器窗口大小
double sigmaX, // X方向滤波系数
double sigmaY=0, // Y方向滤波系数
int borderType=BORDER_DEFAULT // 默认边缘插值方法
)
当Size(0, 0)就会从sigmax开始计算生成高斯卷积核系数,当时size不为零是优先从size开始计算高斯卷积核系数
一般来说,sigmaX和sigmaY越大,图像越模糊;ksize越大,图像越模糊
高斯模糊相比均值模糊保留了更多的信息
dst1=cv.blur(src,(5,5))
dst2=cv.GaussianBlur(src,(5,5),sigmaX=15)
dst3=cv.GaussianBlur(src,(0,0),sigmaX=15)
中值模糊
中值滤波本质上是统计排序滤波器的一种,中值滤波对图像特定噪声类型(椒盐噪声)会取得比较好的去噪效果,也是常见的图像去噪声与增强的方法之一。中值滤波也是窗口在图像上移动,其覆盖的对应ROI区域下,所有像素值排序,取中值作为中心像素点的输出值
OpenCV中值滤波API函数如下:
medianBlur (
InputArray src,
OutputArray dst,
int ksize // 必须是奇数,而且必须大于1
)
Python:
dst = cv.medianBlur( src, ksize[, dst] )
dst = cv.medianBlur( src, 5)
图像噪声
图像噪声产生的原因很复杂,有的可能是数字信号在传输过程中发生了丢失或者受到干扰,有的是成像设备或者环境本身导致成像质量不稳定,反应到图像上就是图像的亮度与颜色呈现某种程度的不一致性。
从噪声的类型上,常见的图像噪声可以分为如下几种:
-
椒盐噪声
一种随机在图像中出现的稀疏分布的黑白像素点, 对椒盐噪声一种有效的去噪手段就是图像中值滤波
-
高斯噪声/符合高斯分布
一般会在数码相机的图像采集(acquisition)阶段发生,这个时候它的物理/电/光等各种信号都可能导致产生高斯分布噪声。
-
均匀分布噪声
均匀/规则噪声一般都是因为某些规律性的错误导致的
添加噪声
图像去噪声
图像去噪声在OCR、机器人视觉与机器视觉领域应用开发中是重要的图像预处理手段之一,对图像二值化与二值分析很有帮助。
OpenCV中常见的图像去噪声的方法有
-
均值去噪声
-
高斯模糊去噪声
-
非局部均值去噪声
-
双边滤波去噪声
-
形态学去噪声