图像空域增强:卷积运算法

卷积增强

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

K%20%3D%20%5Cfrac%7B1%7D%7B9%7D%20%5Cbegin%7Bbmatrix%7D%201%20%26%201%20%26%201%20%5C%5C%201%20%26%201%20%26%201%20%5C%5C%201%20%26%201%20%26%201%20%5Cend%7Bbmatrix%7D

Z%20%3D%20%5Cfrac%7B1%7D%7B9%7D%20%5Csum_%7Bi%3D1%7D%5E9%20Z_i

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

  • 平滑:线性、非线性
  • 锐化:线性、非线性

线性平滑(均值滤波器)

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)

测试用例:
图像空域增强:卷积运算法

非线性平滑(中值滤波)

median = cv.medianBlur(img, 5)

图像空域增强:卷积运算法

线性锐化滤镜

实现线性锐化滤波的卷积核中心系数应为正值,而周围的系数应为负值,计算相邻像素间灰度的差值。当使用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)

图像空域增强:卷积运算法

非线性锐化滤波器

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

%5Cnabla%20f%28x%2Cy%29%20%3D%20%5CBig%5B%5Cfrac%7B%5Cpartial%20f%7D%7B%5Cpartial%20x%7D%20%5Cfrac%7B%5Cpartial%20f%7D%7B%5Cpartial%20y%7D%5CBig%5D%20%3D%20%5BG_x%2C%20G_y%5D

常用的差分方法:

1.直接微分
G_x%20%3D%20f%28x%2B1%2C%20y%29%20-%20f%28x%2C%20y%29

G_y%20%3D%20f%28x%2C%20y%2B1%29%20-%20f%28x%2C%20y%29
2.交叉微分

G_x%20%3D%20f%28x%2B1%2C%20y%2B1%29%20-%20f%28x%2Cy%29

G_y%20%3D%20f%28x%2B1%2C%20y%29%20-%20f%28x%2Cy%2B1%29

常用梯度幅值计算方法:

    %5CBig%7C%5Cnabla%20f_%7B%282%29%7D%5CBig%7C%20%3D%20mag%28%5Cnabla%20f%29%20%3D%20%5Csqrt%7BG_x%5E2%20%2B%20G_y%5E2%7D

  1. L2范数(欧氏距离)
  2. %5CBig%7C%5Cnabla%20f_%7B%281%29%7D%20%5CBig%7C%20%3D%20%7CG_x%7C%20%2B%20%7CG_y%7C

  3. L1范数(城区距离)
  4. %5CBig%7C%5Cnabla%20f%20%5CBig%7C%20%3D%20max%5C%7BG_x%2C%20G_y%5C%7D

  5. 棋盘距离
 
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)

图像空域增强:卷积运算法

版权声明:本文为博主今晚打佬虎原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/u014281392/article/details/122973404

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2022年2月18日 下午4:57
下一篇 2022年2月18日 下午5:17

相关推荐