摘要:卷积与一维信号一样,图像也可以使用各种低通滤波器,高通滤波器等进行滤波有助于消除噪声,模糊图像等滤波器有助于找到边缘图片将内核与图像进行卷积应用对图像进行平均过滤。它只取内核区域下所有像素的平均值并替换中心元素。
Smoothing Images
1 2D卷积与一维信号一样,图像也可以使用各种低通滤波器(LPF),高通滤波器(HPF)等进行滤波.LPF有助于消除噪声,模糊图像等.HPF滤波器有助于找到边缘图片.
cv.filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]]):将内核与图像进行卷积
应用对图像进行平均过滤。 一个5x5的平均滤波器内核可以定义如下:
$$ K=frac{1}{25} left[ egin{matrix} 1 & 1 & 1 & 1 & 1 1 & 1 & 1 & 1 & 1 1 & 1 & 1 & 1 & 1 1 & 1 & 1 & 1 & 1 1 & 1 & 1 & 1 & 1 end{matrix} ight] $$
将此内核保持在像素上方,添加该内核下方的所有25个像素,取其平均值并用新的平均值替换中心像素.
代码:
import cv2 import numpy as np import matplotlib.pylab as plt img = cv2.imread("img.jpg") kernel = np.ones((5,5),np.float32)/25 dst = cv2.filter2D(img,-1,kernel) plt.subplot(121),plt.imshow(img),plt.title("Original") plt.xticks([]), plt.yticks([]) plt.subplot(122),plt.imshow(dst),plt.title("Averaging") plt.xticks([]), plt.yticks([]) plt.show()2图像模糊(图像平滑)
通过将图像与低通滤波器内核卷积来实现图像模糊.它有助于消除噪音.它实际上从图像中去除了高频内容(例如:噪声,边缘).因此在此操作中边缘会模糊一点.(有模糊的技术,也不会模糊边缘).OpenCV主要提供四种模糊技术.
1平均法过将图像与标准化的盒式过滤器进行卷积来完成的。它只取内核区域下所有像素的平均值并替换中心元素。这是由函数cv2.blur()或cv2.boxFilter()完成的,3x3标准化的盒式过滤器如下所示:
$$ K=frac{1}{9} left[ egin{matrix} 1 & 1 & 1 1 & 1 & 1 1 & 1 & 1 end{matrix} ight] $$
NOTE:
如果不想使用规范化的框过滤器,请使用cv2.boxFilter().将参数normalize = False传递给函数.
使用5x5大小的内核进行图像平滑:
代码:
import cv2 import numpy as np import matplotlib.pylab as plt img = cv2.imread("img.jpg") blur = cv2.blur(img,(5,5)) plt.subplot(121),plt.imshow(img),plt.title("Original") plt.xticks([]), plt.yticks([]) plt.subplot(122),plt.imshow(blur),plt.title("Blurred") plt.xticks([]), plt.yticks([]) plt.show()2高斯模糊
cv2.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]])
应该指定内核的宽度和高度,它应该是正数和奇数.
还应该分别指定X和Y方向的标准偏差sigmaX和sigmaY.如果仅指定了sigmaX,则sigmaY与sigmaX相同.如果两者都为零,则根据内核大小计算它们.
高斯模糊在从图像中去除高斯噪声方面非常有效
可以使用函数cv2.getGaussianKernel()创建高斯内核
代码:
import cv2 import numpy as np import matplotlib.pylab as plt img = cv2.imread("img.jpg") blur = cv2.GaussianBlur(img,(5,5),0) plt.subplot(121),plt.imshow(img),plt.title("Original") plt.xticks([]), plt.yticks([]) plt.subplot(122),plt.imshow(blur),plt.title("Blurred") plt.xticks([]), plt.yticks([]) plt.show()3 中值模糊
cv2.medianBlur(src, ksize[, dst]):内核区域下所有像素的中值,并用该中值替换中心元素.对图像中的椒盐噪声非常有效.其内核大小应为正整数
代码
import cv2 import numpy as np import matplotlib.pylab as plt img = cv2.imread("img7.png") blur = cv2.medianBlur(img,5) plt.subplot(121),plt.imshow(img),plt.title("Original") plt.xticks([]), plt.yticks([]) plt.subplot(122),plt.imshow(blur),plt.title("Blurred") plt.xticks([]), plt.yticks([]) plt.show()4 双边滤波
cv2.bilateralFilter()在降低噪音方面非常有效,同时保持边缘清晰,但与其他过滤器相比,操作速度较慢.
NOTE:
高斯滤波器采用像素周围的邻域并找到其高斯加权平均值. 该高斯滤波器仅是空间的函数,即在滤波时考虑附近的像素, 没有考虑像素是否具有几乎相同的强度,不考虑像素是否是边缘像素,所以它也模糊了边缘.
双边滤波器在空间中也采用高斯滤波器,但是还有一个高斯滤波器是像素差的函数.空间的高斯函数确保仅考虑附近的像素用于模糊,而强度差的高斯函数确保仅考虑具有与中心像素相似的强度的像素用于模糊,因此它保留了边缘,因为边缘处的像素将具有较大的强度变化.
代码:
import cv2 import numpy as np import matplotlib.pylab as plt img = cv2.imread("img.jpg") blur = cv2.bilateralFilter(img,9,75,75) plt.subplot(121),plt.imshow(img),plt.title("Original") plt.xticks([]), plt.yticks([]) plt.subplot(122),plt.imshow(blur),plt.title("Blurred") plt.xticks([]), plt.yticks([]) plt.show()
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/41989.html
摘要:下面是二维空间的高斯分布函数公式这个公式被称作高斯核。高斯模糊使用高斯平均算子来实现的图像模糊叫高斯模糊,也叫高斯平滑被认为是一种最优的图像平滑处理。 SciPy库 SciPy库,与之前我们使用的NumPy和Matplotlib,都是scipy.org提供的用于科学计算方面的核心库。相对NumPy,SciPy库提供了面向更高层应用的算法和函数(其实也是基于NumPy实现的),并以子模块...
摘要:由所有边缘增强像素组成的新图像,称为边缘增强图像。交叉算子上述使用差分方法得出亮度变化梯度其实就是一阶微分的近似值。 边缘检测(edge detection)是最重要的图像处理技术之一,图像边缘检测大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性,为后续图像理解方法提供了基础。 边缘检测方法 从视觉上看,图像中的边缘处亮度较周围强,比如对一垂直方向的边缘,...
阅读 1629·2021-10-12 10:11
阅读 3752·2021-09-03 10:35
阅读 1440·2019-08-30 15:55
阅读 2123·2019-08-30 15:54
阅读 994·2019-08-30 13:07
阅读 1006·2019-08-30 11:09
阅读 571·2019-08-29 13:21
阅读 2647·2019-08-29 11:32