赞
踩
图像处理是用计算机对图像进行分析,以获取所需结果的过程,又称为影像处理。图像处理一般是指数字图像的处理。数字图像是用工业相机、摄像机、扫描仪等设备经过拍摄得到的一个大的二维数组,该数组的元素称为像素,其值称为灰度值。
均值滤波是指任意一点的像素值,都是周围 NxM 个像素值的均值。
指通过将图像与低通滤波器内核进行卷积来实现图像模糊,这对于消除噪声很有用。
OpenCv里可以用cv2.blur(img,(3,3)) 函数实现图像的均值滤波。
第二个参数(3,3)称为滤波核。
在使用邻域平均法去噪的同时也使得边界变得模糊。而中值滤波是非线性的图像处理方法,在去噪的同时可以兼顾到边界信息的保留。选一个含有奇数点的窗口W,将这个窗口在图像上扫描,把窗口中所含的像素点按灰度级的升或降序排列,取位于中间的灰度值来代替该点的灰度值。
OpenCV里可以使用cv2.medianBlur(img,3)函数来实现
3为简写方式 ,与(3,3)是一样的。
为了克服简单局部平均法的弊端(图像模糊),目前已提出许多保持边缘、细节的局部平滑算法。它们的出发点都集中在如何选择邻域的大小、形状和方向、参数加平均及邻域各店的权重系数等。
图像高斯平滑也是邻域平均的思想对图像进行平滑的一种方法,在图像高斯平滑中,对图像进行平均时,不同位置的像素被赋予了不同的权重。高斯平滑与简单平滑不同,它在对邻域内像素进行平均时,给予不同位置的像素不同的权值
cv2.GaussianBlur(source,(3,3),0)
第一个参数为图像对象
第二个参数为滤波核
第三个参数0为高斯核标准差
import cv2 import matplotlib.pyplot as plt import matplotlib as mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体为黑体 mpl.rcParams['axes.unicode_minus'] = False # 正常显示负号 # 均值滤波 img = cv2.imread('./dog.jpg', 0) # 第二个参数0 是设置为灰度图用的 blur = cv2.blur(img, (5, 5)) # 显示图像 plt.subplot(1, 2, 1) plt.imshow(img, 'gray') plt.title("zaosheng") plt.subplot(1, 2, 2) plt.imshow(blur, 'gray') plt.title("blur") plt.show() # 中值滤波 img = cv2.imread("./dog.jpg", 0) dst = cv2.medianBlur(img, (5)) # 卷积核大小为5 # 显示图像 plt.subplot(1, 2, 1) plt.imshow(img, "gray") plt.title("zaosheng") plt.subplot(1, 2, 2) plt.imshow(dst, 'gray') plt.title("medianBlur") plt.show() # 高斯滤波 img = cv2.imread("./dog.jpg", 0) m_dst = cv2.medianBlur(img, (5)) g_dst = cv2.GaussianBlur(img, (5, 5), 0) # 高斯核为5*5 # 显示图像 plt.subplot(1, 3, 1), plt.imshow(img, 'gray') plt.title("zaosheng") plt.subplot(1, 3, 2), plt.imshow(g_dst, 'gray') plt.title('高斯') plt.subplot(1, 3, 3), plt.imshow(m_dst, 'gray') plt.title('medianBlur') plt.show()
均值滤波
中值滤波
高斯滤波:
图像锐化是补偿图像的轮廓,以及增强图像的边缘和灰度跳变的部分,使图像变得清晰的操作,分为空间域处理和频处理两类。
图像锐化的目的是突出图像地物的边缘、轮廓,或者某些线性目标要素的特征。这邪恶滤波方法增强了地物边缘与周围像元之间的反差,因此也称为边缘增强。
import cv2 as cv import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] dog = cv.imread("./dog.jpg", 0) # plt.imshow(dog, 'gray') # plt.title("灰度图") # plt.show() dog_f = np.copy(dog) dog_f = dog_f.astype("float") # plt.imshow(dog_f, "gray") # plt.title('灰度图2') # plt.show() row, column = dog.shape gradient = np.zeros((row, column)) for x in range(row-1): for y in range(column-1): gx = abs(dog_f[x+1, y]-dog_f[x, y]) # 通过相邻像素相减计算图像梯度 gy = abs(dog_f[x, y+1]-dog_f[x, y]) gradient[x, y] = gx + gy # plt.imshow(gradient, 'gray') # plt.title("梯度图") # plt.show() # 叠加原图和梯度图 就能够实现图像锐化 # 将小于0 的像素设置为0 将大于255的像素设置为255 sharp = dog_f + gradient sharp = np.where(sharp < 0, 0, np.where(sharp > 255, 255, sharp)) # 显示图像 gradient = gradient.astype("uint8") sharp = sharp.astype("uint8") plt.subplot(2, 2, 1), plt.imshow(dog), plt.title("原图") plt.subplot(2, 2, 2), plt.imshow(dog_f, "gray"), plt.title("灰度图") plt.subplot(2, 2, 3), plt.imshow(gradient, "gray"), plt.title("梯度图") plt.subplot(2, 2, 4), plt.imshow(sharp, "gray"), plt.title("锐化图") plt.show()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。