数字图像处理
图像滤波
作用:
1.消除图像中混入的噪声
2.为图像识别抽取出图像特征
图像滤波分为线性和非线性,用算子实现。算子就是小的矩阵,比如可以从左上角开始卷积运算,每次运算都算出来一个数,新矩阵就是滤波后的结果。
一、平滑滤波
用于降噪
1、简单平均法
取一个九宫格取平均值,滤波后的结果为50,在一定范围内滤除噪音
(90+0+90+0+90+0+90+0+90)/9=50
2、高斯滤波
一维
二维
离中心值距离越远则发生概率越小
用二维高斯分布的公式:
第一个:
中间:
与100为中心的矩阵相乘:4.54+0+0+0+7.07+0+4.54=16.15
算子之和:0.0454+0.0566+0.0454+0.0566+0.0707+0.0566+0.0454+0.0566+0.0454=0.4787
16.15/0.4787=33.73
处理边界时用padding
边缘滤波
常见的又Roberts算子、Prewitt算子、Sobel算子
Roberts算子
在图像增强锐化中作为一阶算子来使用,计算量小,对细节敏感
Prewitt算子
Sobel算子
Canny算子
-
用高斯滤波平滑图像 -
用sobel等梯度算子计算梯度幅值和方向 -
对梯度幅值进行非极大值抑制
用sobel算子计算出梯度幅值和方向后,梯度方向一定是垂直与潜在边界的方向。遍历图像上所有检测后的像素,判断每个像素,例如:B是否是A、B、C三个点中的最大值,如果是则保留,不是则抑制(梯度设为0)。
-
用双阈值算法检测和连接边缘
对于梯度设定两个域置T-max和T-min ① 若某一像素位置的幅值超过了高阈值,该像素被保留为边缘像素。 ② 若某一像素位置的幅值小于低阈值,该像素被排除。 ③ 若某一像素位置的幅值在两个阈值之间,该像素仅仅在连接到一个高于高阈值的像素时被保留。
from skimage import filters
from skimage import feature
filters.roberts(img)
filters.prewitt(img)
? filters.prewitt_h(img)
? filters.prewitt_v(img)
filters.sobel(img)
? filters.sobel_h(img)
? filters.sobel_v(img)
features.canny(img,sigma=0.1)
图像域置分割
基于Otsu算法(大津算法)的阈值分割方法,又称最大类间方差法
灰度分布图,x轴代表一个像素的亮度从0—1(灰度图范围),y轴是像素为某个灰度值的发生频率。
from skimage import feature
theta = filters.threshold_otsu(img_gray,nbins=256)
img_seg=np.zeros(img_gray.shape)
img_seg[img_gray>theta]=1
基本形态学滤波
膨胀与腐蚀
膨胀:例如把1附近的0设为1 腐蚀:例如把0附近的1设为0
膨胀可以扩充边缘,腐蚀可以提取骨干信息
开运算与闭运算
from skimage import morphology
img_d=morphology.dilation(img,morphology.square(2))
img_d=morphology.erosion(img,morphology.square(2))
img_d=morphology.opening(img_gray,morphology.square(5))
img_d=morphology.closing(img_gray,morphology.square(15))
本期内容与深度学习/计算视觉的关联
? 边缘检测—深度学习神经网络卷积层的数学原理
? 阈值图片分割—计算视觉分割任务的经典应用
? 平滑滤波与基本形态学滤波—图像的降噪与数据清洗
|