图像平滑(滤波)
滤波理论
图像滤波,即在尽量保留图像细节特征的条件下 对目标图像的噪声 进行抑制。
是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到 后续图像处理 和 分析的有效性和可靠性。
消除图像中的噪声成分叫作图像的平滑化或滤波操作。信号或图像的能量大部分集中在幅度谱的低频和中频段是很常见的,而在较高频段,感兴趣的信息经常被噪声淹没。因此一个能降低高频成分幅度的滤波器就能够减弱噪声的影响。
目的
- 消除图像中混入的噪声;
- 为图像识别抽取出图像特征。
要求
- 不能损坏图像轮廓及边缘;
- 图像视觉效果应当更好。
一、均值滤波
均值滤波是平均卷积操作
比如九个格子,将中间的格子(第五个)的值,作为原来的平均数;
blur = cv2.blur(img, (3,3)) # 每 3x3 做一个操作;即 核 为 3x3
cv_show(blur)
二、方框滤波
基本和均值一样,可以选择归一化,容易越界
中间参数基本都是用 -1;
如果不使用 normalize,可能会越界;所有越界值,如果大于 255,就取 255;
normalize 指定为 True,代表做归一化,和均值滤波一样;
box = cv2.boxFilter(img, -1, (3,3), normalize=False)
# cv_show(box)
plt.imshow(box)
box2 = cv2.boxFilter(img, -1, (3,3), normalize=False)
# cv_show(box2)
plt.imshow(box2)
三、高斯滤波
高斯模糊的卷积核里的数值,是满足高斯分布的,相当于更重视中心的(距离近的)。
离得近的权重高,远的权重低。
aussian = cv2.GaussianBlur(img, (3,3), 1)
# cv_show(aussian)
plt.imshow(aussian)
# 噪音点没有前面的严重
四、中值滤波
相当于用中值代替
median = cv2.medianBlur(img, 5)
# cv_show(median)
plt.imshow(median)
# 展示所有
res = np.hstack((blur, aussian, median))
cv_show(res)