卷积增强法

    卷积运算通过对图像区域像素集合进行处理得到增强效果。例如,我们将在图像上尝试平均滤波器。一个3x3平均滤波器内核如下所示:

增量学习卷积python 卷积增强_Big

增量学习卷积python 卷积增强_数字图像处理_02

不同的卷积核可以实现不同的增强效果:

  • 平滑:线性、非线性
  • 锐化:线性、非线性
线性平滑(均值滤波)
import cv2 as cv
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
img = cv.imread('./images/xxx.png')
img_noise = img +  np.random.normal(0, 128, img.shape)
img =cv.cvtColor(img, cv.COLOR_BGR2RGB)
kernel = np.ones((5,5),np.float32)/25
filted_img = cv.filter2D(img,-1,kernel)

测试用例:

增量学习卷积python 卷积增强_数字图像处理_03

非线性平滑(中值滤波)
median = cv.medianBlur(img, 5)

增量学习卷积python 卷积增强_图像增强_04

线性锐化滤波

    实现线性锐化滤波的卷积核中心系数应为正值,而周围的系数应为负值,计算相邻像素间灰度的差值。当使用3×3核时,中间为8,而其余系数为-1,这样所有系数之和为0。当图像中灰度值是常数或变化很小时,其卷积输出为0或很小,也就是输出图像的平均灰度值变为0,这样输出图像中就会有一部分像素的灰度值小于0。在图像处理中一般只考虑正的灰度值,所以还需要将输出图像的灰度值范围通过变换控制在[0, Gmax]中。

    锐化滤波的效果可用原始图像f(x, y)减去平滑图像L(x, y)得到。更进一步,如果将原始图像乘以一个放大系数A再减去平滑图像就能实现高频提升滤波。

kernel = np.ones((3,3),np.float32)*-1
kernel[1, 1] = 8.0
sharpen_img = cv.filter2D(img,-1,kernel)

增量学习卷积python 卷积增强_数字图像处理_05

非线性锐化滤波

    线性锐化滤波计算了中间像素和相邻像素间灰度的差值,相当于进行了一个微分运算。在图像处理中,最常用的微分方法是利用梯度的方法。对于一个连续函数f(x, y),其梯度是一个矢量,由分别沿x和y方向计算微分得到:

增量学习卷积python 卷积增强_数字图像处理_06

常用的微分方法:

1.直接微分
增量学习卷积python 卷积增强_Big_07

增量学习卷积python 卷积增强_数字图像处理_08
2.交叉微分

增量学习卷积python 卷积增强_Big_09

增量学习卷积python 卷积增强_锐化滤波_10

常用梯度幅度计算方法

  1. L2范数(欧氏距离)
    增量学习卷积python 卷积增强_数字图像处理_11
  2. L1范数(城区距离)
    增量学习卷积python 卷积增强_Big_12
  3. 棋盘距离
    增量学习卷积python 卷积增强_锐化滤波_13
img_gray = cv.cvtColor(img, cv.COLOR_RGB2GRAY)
# 直接微分
kernel_x = np.array([[-1, 1],[0, 0]])
kernel_y = np.array([[1, 0], [-1, 0]])
gradient_x = cv.filter2D(img_gray, -1, kernel_x)
gradient_y = cv.filter2D(img_gray, -1, kernel_y)
# L2范数
gradient = np.clip(np.sqrt(np.power(gradient_x, 2) + np.power(gradient_y, 2)), 0, 255)

增量学习卷积python 卷积增强_图像增强_14