如何用python实现图像的一维高斯滤波如何用python实现图像的一维高斯滤波
建议你不要使用高斯滤波 。
推荐你使用一维中值滤波
matlab的函数为
y = medfilt1(x,n);
x为数组,是你要处理原始波形 , n是中值滤波器的参数(大于零的整数) 。y是滤波以后的结果(是数组)
后面再
plot(y);
就能看到滤波以后的结果
经过medfilt1过滤以后 , y里储存的是低频的波形 , 如果你需要高频波形,x-y就是高频波形
顺便再说一点,n是偶数的话 , 滤波效果比较好 。
N越小 , y里包含的高频成分就越多,y越大,y里包含的高频成分就越少 。
记住,无论如何y里保存的都是整体的低频波 。(如果你看不懂的话 , 滤一下 , 看y波形,你马上就懂了)
2021-02-08 Python OpenCV GaussianBlur()函数borderType= None)函数
此函数利用高斯滤波器平滑一张图像 。该函数将源图像与指定python图像滤波函数的高斯核进行卷积 。
src:输入图像
ksize:(核python图像滤波函数的宽度,核的高度)python图像滤波函数,输入高斯核的尺寸python图像滤波函数 , 核的宽高都必须是正奇数 。否则,将会从参数sigma中计算得到 。
dst:输出图像,尺寸与输入图像一致 。
sigmaX:高斯核在X方向上的标准差 。
sigmaY:高斯核在Y方向上的标准差 。默认为None,如果sigmaY=0 , 则它将被设置为与sigmaX相等的值 。如果这两者都为0,则它们的值会从ksize中计算得到 。计算公式为python图像滤波函数:
borderType:像素外推法,默认为None(参考官方文档 BorderTypes
)
在图像处理中,高斯滤波主要有两种方式:
1.窗口滑动卷积
2.傅里叶变换
在此主要利用窗口滑动卷积 。其中二维高斯函数公式为:
根据上述公式,生成一个3x3的高斯核,其中最重要的参数就是标准差,标准差越大,核中心的值与周围的值差距越小 , 曲线越平滑 。标准差越?。?核中心的值与周围的值差距越大,曲线越陡峭 。
从图像的角度来说,高斯核的标准差越大 , 平滑效果越不明显 。高斯核的标准差越?。?平滑效果越明显 。
可见,标准差越大,图像平滑程度越大
参考博客1:关于GaussianBlur函数
参考博客2:关于高斯核运算
OpenCV-Python系列六:图像滤波 图像滤波是一种十分常见的图像处理手段 。通常 , 你可以认为相邻位置像素是紧密联系的,它们共同来显示对某个物体,图像滤波则通过运算来排除图像中和周围相差大的像素 。当然,这并不是绝对的,有时候你为了评估图像的质量,也会将这些“特立独行”的像素作为选取的目标。无论你采用什么方法,记住你要的目标就行,有时候你的目标可能是别人的背景 。
滤波常常会使得图像变得模糊(非绝对),那么,为什么你需要将一幅清晰的图像变得模糊呢?下面的例子应该可以解释 。
高斯滤波采用满足正态分布的核模板 , 其参数的主要参数是标准差σ , 代表核的离散程度,σ值越小,模板中心系数与边缘系数差越大,平滑的程度越小 。
高斯滤波对图像采集过程中由于不良照明/高温引起的传感器噪声信号有较好的效果,消除了图像中的高频信号 。
由于得到的是一维的Gaussian Kernel , 你可以采用下面的方式转为二维的
为了便于直观感受高斯滤波的效果 , 使用Canny算子来提取轮廓对比,你可以试试在特征提取前加高斯滤波对比 。
补充说明:对于均值滤波,你也可以使用cv2.boxFilter(src, ddepth, ksize[, dst[, anchor[, normalize[, borderType]]]])来实现,需要将normalize设置为True,当设置normalize为False时,实现的是将kernel内像素相加,官方文档做出的描述为:
中值滤波对图像中的脉冲型(椒盐等)噪声信号处理效果好 , 当 你的应用场景存在这种颗粒感的噪声信号时,中值滤波会是一种很好的选择。它,选取kernel区域内像素点集的中值最为锚点的像素值,对类似投票机制中的最高分(高灰阶点)和最低分(过低灰阶点)影响有很好的抑制作用 。
如果你的应用涉及到图像美化,双边滤波可以初步达到你的期望,关于双边滤波,这里不做展开,由你来探索,其函数参数信息如下 。
对于opencv-python的图像滤波部分有问题欢迎留言,Have Fun With OpenCV-Python, 下期见 。
数字图像处理Python实现图像灰度变换、直方图均衡、均值滤波import CV2
import copy
import numpy as np
import random
使用的是pycharm
因为最近看了《银翼杀手2049》,里面Joi实在是太好看了所以原图像就用Joi了
要求是灰度图像,所以第一步先把图像转化成灰度图像
# 读入原始图像
img = CV2.imread('joi.jpg')
# 灰度化处理
gray = CV2.cvtColor(img, CV2.COLOR_BGR2GRAY)
CV2.imwrite('img.png', gray)
第一个任务是利用分段函数增强灰度对比,我自己随便写了个函数大致是这样的
def chng(a):
if a255/3:
b = a/2
elif a255/3*2:
b = (a-255/3)*2255/6
else:
b = (a-255/3*2)/2255/6255/3*2
return b
rows = img.shape[0]
cols = img.shape[1]
cover = copy.deepcopy(gray)
for i in range(rows):
for j in range(cols):
cover[i][j] = chng(cover[i][j])
CV2.imwrite('cover.png', cover)
下一步是直方图均衡化
# histogram equalization
def hist_equal(img, z_max=255):
H, W = img.shape
# S is the total of pixels
S = H * W * 1.
out = img.copy()
sum_h = 0.
for i in range(1, 255):
ind = np.where(img == i)
【python图像滤波函数 python图片滤波】 sum_h= len(img[ind])
z_prime = z_max / S * sum_h
out[ind] = z_prime
out = out.astype(np.uint8)
return out
covereq = hist_equal(cover)
CV2.imwrite('covereq.png', covereq)
在实现滤波之前先添加高斯噪声和椒盐噪声(代码来源于网络)
不知道这个椒盐噪声的名字是谁起的感觉隔壁小孩都馋哭了
用到了random.gauss()
percentage是噪声占比
def GaussianNoise(src,means,sigma,percetage):
NoiseImg=src
NoiseNum=int(percetage*src.shape[0]*src.shape[1])
for i in range(NoiseNum):
randX=random.randint(0,src.shape[0]-1)
randY=random.randint(0,src.shape[1]-1)
NoiseImg[randX, randY]=NoiseImg[randX,randY] random.gauss(means,sigma)
if NoiseImg[randX, randY] 0:
NoiseImg[randX, randY]=0
elif NoiseImg[randX, randY]255:
NoiseImg[randX, randY]=255
return NoiseImg
def PepperandSalt(src,percetage):
NoiseImg=src
NoiseNum=int(percetage*src.shape[0]*src.shape[1])
for i in range(NoiseNum):
randX=random.randint(0,src.shape[0]-1)
randY=random.randint(0,src.shape[1]-1)
if random.randint(0,1)=0.5:
NoiseImg[randX,randY]=0
else:
NoiseImg[randX,randY]=255
return NoiseImg
covereqg = GaussianNoise(covereq, 2, 4, 0.8)
CV2.imwrite('covereqg.png', covereqg)
covereqps = PepperandSalt(covereq, 0.05)
CV2.imwrite('covereqps.png', covereqps)
下面开始均值滤波和中值滤波了
就以n x n为例,均值滤波就是用这n x n个像素点灰度值的平均值代替中心点 , 而中值就是中位数代替中心点,边界点周围补0;前两个函数的作用是算出这个点的灰度值,后两个是对整张图片进行
#均值滤波模板
def mean_filter(x, y, step, img):
sum_s = 0
for k in range(x-int(step/2), x int(step/2) 1):
for m in range(y-int(step/2), y int(step/2) 1):
if k-int(step/2)0 or k int(step/2) 1img.shape[0]
or m-int(step/2)0 or m int(step/2) 1img.shape[1]:
sum_s= 0
else:
sum_s= img[k][m] / (step*step)
return sum_s
#中值滤波模板
def median_filter(x, y, step, img):
sum_s=[]
for k in range(x-int(step/2), x int(step/2) 1):
for m in range(y-int(step/2), y int(step/2) 1):
if k-int(step/2)0 or k int(step/2) 1img.shape[0]
or m-int(step/2)0 or m int(step/2) 1img.shape[1]:
sum_s.append(0)
else:
sum_s.append(img[k][m])
sum_s.sort()
return sum_s[(int(step*step/2) 1)]
def median_filter_go(img, n):
img1 = copy.deepcopy(img)
for i in range(img.shape[0]):
for j in range(img.shape[1]):
img1[i][j] = median_filter(i, j, n, img)
return img1
def mean_filter_go(img, n):
img1 = copy.deepcopy(img)
for i in range(img.shape[0]):
for j in range(img.shape[1]):
img1[i][j] = mean_filter(i, j, n, img)
return img1
完整main代码如下:
if __name__ == "__main__":
# 读入原始图像
img = CV2.imread('joi.jpg')
# 灰度化处理
gray = CV2.cvtColor(img, CV2.COLOR_BGR2GRAY)
CV2.imwrite('img.png', gray)
rows = img.shape[0]
cols = img.shape[1]
cover = copy.deepcopy(gray)
for i in range(rows):
for j in range(cols):
cover[i][j] = chng(cover[i][j])
CV2.imwrite('cover.png', cover)
covereq = hist_equal(cover)
CV2.imwrite('covereq.png', covereq)
covereqg = GaussianNoise(covereq, 2, 4, 0.8)
CV2.imwrite('covereqg.png', covereqg)
covereqps = PepperandSalt(covereq, 0.05)
CV2.imwrite('covereqps.png', covereqps)
meanimg3 = mean_filter_go(covereqps, 3)
CV2.imwrite('medimg3.png', meanimg3)
meanimg5 = mean_filter_go(covereqps, 5)
CV2.imwrite('meanimg5.png', meanimg5)
meanimg7 = mean_filter_go(covereqps, 7)
CV2.imwrite('meanimg7.png', meanimg7)
medimg3 = median_filter_go(covereqg, 3)
CV2.imwrite('medimg3.png', medimg3)
medimg5 = median_filter_go(covereqg, 5)
CV2.imwrite('medimg5.png', medimg5)
medimg7 = median_filter_go(covereqg, 7)
CV2.imwrite('medimg7.png', medimg7)
medimg4 = median_filter_go(covereqps, 7)
CV2.imwrite('medimg4.png', medimg4)
python图像滤波函数的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于python图片滤波、python图像滤波函数的信息别忘了在本站进行查找喔 。
推荐阅读
- 公众号年审忘了怎么办,公众号年审失败钱会退回来吗
- 刀剑神域哪个游戏能飞行,刀剑神域那种游戏现实可能会出现吗?
- 浏览器不支持html5的视频的简单介绍
- at指令c语言函数 c语言中的atoi
- ios15需要更新多久,ios15更新时间要多久
- 民兵模拟射击游戏下载,民兵 下载
- oracle存储过程同步表数据,oracle存储过程怎么备份
- 关于同济vb.net实验五的信息
- 鸿蒙手机有限公司招聘信息,鸿蒙手机有限公司招聘信息最新