高通滤波器与低通滤波器
高通滤波器
以检测边缘的高通过滤器为例
这是个三乘三的核 其元素总和为 0,边缘检测时 所有元素总和为 0 是很重要的,因为这类过滤器要计算的是相邻像素的差异 或者说变化,要计算差异 就需要将像素值相减,如果这些核值加起来不等于 0,那就意味着计算出来的差,权重会有正负结果就是滤波后的图像亮度会相应地提高或降低,这就是卷积核元素相加为零的原因。
import numpy as np import matplotlib.pyplot as plt import cv2 %matplotlib inline image = cv2.imread('1.png') image_copy = np.copy(image) image_copy = cv2.cvtColor(image_copy,cv2.COLOR_BGR2RGB) plt.imshow(image_copy)
gray = cv2.cvtColor(image_copy,cv2.COLOR_RGB2GRAY) plt.imshow(gray,cmap='gray')
sobel_x = np.array([[-1,0,1], [-2,0,2], [-1,0,1]]) #sobel filter filtered = cv2.filter2D(gray,-1,sobel_x) #-1表示输入和输出类型一致 plt.imshow(filtered,cmap='gray')
retval,binary_image = cv2.threshold(filtered,100,255,cv2.THRESH_BINARY) plt.imshow(binary_image,cmap='gray') print(retval) #不知道这个retval有什么用,输出看一下
低通滤波器
高通滤波器检测边缘时不仅会检测到噪声,而且还会强化它们,所以在高通滤波之前,需要先降噪。
低通滤器通常会取均值 不像高通过滤器取的是差值,因此低通过滤器的元素加起来应该为 1,这就能保留图像的亮度,确保图像不会变亮或变暗,但我们可以看到 这个核的元素加起来等于 9,所以我们需要进行归一化处理 也就是将核值总和除以 9
有时我们会想要个既能模糊图像 又能更好地保存图像边缘的过滤器,为此 我们可用高斯模糊,这或许是计算机视觉应用中最常用的低通过滤器了。高斯低通过滤器其实就是加权平均法 赋予中心像素最大的权重,但也会考虑到周围的像素 权重多少主要取决于周围像素有多接近中心像素
import numpy as np import cv2 import matplotlib.pyplot as plt %matplotlib inline image = cv2.imread('2.png') image_copy = np.copy(image) image_copy = cv2.cvtColor(image_copy,cv2.COLOR_BGR2RGB) plt.imshow(image_copy)
对图像进行高斯滤波,比较两者
gray = cv2.cvtColor(image_copy,cv2.COLOR_RGB2GRAY) gray_blur = cv2.GaussianBlur(gray,(5,5),0) f,(ax1,ax2) = plt.subplots(1,2,figsize=(20,10)) ax1.set_title('original gray') ax1.imshow(gray,cmap='gray') ax2.set_title('blurred image') ax2.imshow(gray_blur,cmap='gray')
对未模糊处理的灰度图像和经过模糊处理的图像分别进行高通滤波操作 比较两者的效果
sobel_y = np.array([[2,1,2], [0,0,0], [-2,-1,-2]]) filtered = cv2.filter2D(gray,-1,sobel_y) filtered_blurred = cv2.filter2D(gray_blur,-1,sobel_y) f,(ax1,ax2) = plt.subplots(1,2,figsize=(20,10)) ax1.set_title('original gray') ax1.imshow(filtered,cmap='gray') ax2.set_title('blurred image') ax2.imshow(filtered_blurred,cmap='gray')
可以看到未模糊处理的图像,噪声更多 而模糊处理后的图像边缘检测效果更准确
通常来讲 对于这个图像以及其它诸多图像,我们都会先对图像进行小型低通滤波处理,比如应用高斯模糊 从而去除噪声,然后再用高通过滤器来检测边缘,所以在对图像进行滤波处理时 要牢牢记住这个顺序
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】