图像模糊有什么用

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/saltriver/article/details/78883989

我们前面提到,使用平均操作或加权平均操作可以降低图像的噪声,并由此引出了空间滤波器的概念。

这种平均操作或加权平均操作的空间滤波器,根据平均操作的特点,可以叫做均值滤波器;其主要应用就是降低噪声,根据应用的特点,也可以叫做平滑滤波器

我们再次感受下这种均值滤波器或平滑滤波器的作用。下面是一张哈勃望远镜拍摄的星空原始图像(来自冈萨雷斯的《数字图像处理),我们将这张图像和使用平滑滤波器后生成的图像进行一下对比。

import cv2
import numpy as np
hubble = cv2.imread("hubble.tif", 0)
filter = 1 / 25 * np.ones((5, 5))
hubble_filter = cv2.filter2D(hubble, -1, filter)
cv2.imshow("hubble", hubble)
cv2.imshow("hubble_filter", hubble_filter)
cv2.waitKey()

这里写图片描述

可以清楚的感受到,使用均值滤波器或叫平滑滤波器后的图像变得模糊了,这就是平滑滤波器能够降低噪声所带来的副作用。道理其实很简单,因为平滑后,图像中的物体对象内部和边缘也都变得平滑了。物体对象边缘的平滑,使得物体不再具有非常清晰的边界,而物体对象内部的平滑使得对象失去了层次感。这都造成图像变得模糊起来。

从主观意愿上说,我们希望看到清晰的图像,而不是模糊的图像。所以很多时候我们听说还有一种专门进行模糊图像的操作时,感觉不可思议,这有什么用呢。要知道模糊图像只是处理噪声带来的副作用,并不是我们的目的。图像没有噪声的时候,我们用平滑滤波器去模糊图像干什么呢?

还真有一个重要的应用。我们试着把上面的图像使用更大尺寸的滤波器看看。

filter = 1 / 225 * np.ones((15, 15))
hubble_filter = cv2.filter2D(hubble, -1, filter)
cv2.imshow("hubble", hubble)
cv2.imshow("hubble_filter", hubble_filter)
cv2.waitKey()

这里写图片描述

我们可以看到,相对于原始图像,一些较小的物体已经融入背景,看不到了,有些物体即使能看到,亮度也明显降低。这样,我们用图像模糊将图像中较大的较亮的物体保留了下来,而其它的物体则消除了。我们进一步通过阈值处理对模糊后的图像进行操作,将最高亮度的25%作为阈值,低于此阈值的赋为0,高于此阈值的赋为255。

threshhold = 0.25 * 255
hubble_filter_th = np.where(hubble_filter < threshhold, 0, 255)
cv2.imshow("hubble", hubble)
cv2.imshow("hubble_filter", hubble_filter_th.astype("uint8"))
cv2.waitKey()

这里写图片描述

像这样利用阈值函数处理并基于物体亮度来消除某些物体的操作时很典型的。当我们只想得到感兴趣的物体时,通过图像模糊,可以将那些尺寸和亮度较小的物体过滤掉,较大的物体则易于检测。除了降低噪声,这就是图像平滑(模糊)的另一个重要应用:目标提取

展开阅读全文

没有更多推荐了,返回首页