指对图像进行特定的滤波操作。它通过一个称为卷积核(kernel)的小矩阵在图像上滑动,逐像素地对图像进行加权求和。这个过程可以看作是卷积核与图像局部区域的一种
“融合”。
该篇文章的源码都在此处.
卷积的作用
卷积操作在计算机视觉中主要有以下作用:
- 图像处理:
通过卷积对图像进行模糊处理、锐化边缘、去除噪声等操作。
- 特征提取:卷积操作可以提取图像中的局部特征,如边缘、角点、纹理等。通过使用不同的卷积核,可以提取不同类型的特征。
- 降维:卷积操作可以降低图像的维度,减少计算量。通过使用不同的卷积核,可以提取不同尺度的特征,从而降低图像的维度。
- 升维: 卷积也可以提升图片的维度,
一般目的是为了提取更多的特征, 比如使用多个卷积层,
每个卷积层提取不同尺度的特征, 最后将多个卷积层的特征进行融合,
提取更丰富的特征。
- 多模态数据融合: 卷积操作可以用于多模态数据融合,
比如将图像和文本数据进行融合,
提取更丰富的特征。通过适当的卷积升维操作,可以将不同模态的特征映射到一个共同的高维空间中,以便进行更有效的融合和分析。
- 平滑:卷积操作可以平滑图像,减少图像中的噪声。通过使用不同的卷积核,可以控制平滑的程度。
- 增强鲁棒性:卷积操作对图像的局部变化具有一定的鲁棒性。由于它是基于局部区域的加权求和,即使图像中存在一些局部的变形、噪声或遮挡,卷积操作仍然可以提取出相对稳定的特征。
例子
高斯模糊
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import cv2 import numpy as np
img = cv2.imread('image.jpg')
kernel = np.array([[1/16, 1/8, 1/16], [1/8, 1/4, 1/8], [1/16, 1/8, 1/16]])
blurred_img = cv2.filter2D(img, -1, kernel)
cv2.imshow('Original Image', img) cv2.imshow('Blurred Image', blurred_img) cv2.waitKey(0) cv2.destroyAllWindows()
|
边缘检测
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import cv2 import numpy as np
img = cv2.imread('image.jpg', 0)
kernel = np.array([[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]])
edge_img = cv2.filter2D(img, -1, kernel)
cv2.imshow('Original Image', img) cv2.imshow('Edge Image', edge_img) cv2.waitKey(0) cv2.destroyAllWindows()
|
滤波器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import cv2 import numpy as np
img = cv2.imread('image.jpg', 0)
kernel = np.array([[0, 1, 0], [1, -4, 1], [0, 1, 0]])
filtered_img = cv2.filter2D(img, -1, kernel)
cv2.imshow('Original Image', img) cv2.imshow('Filtered Image', filtered_img) cv2.waitKey(0) cv2.destroyAllWindows()
|
图片锐化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import cv2 import numpy as np
img = cv2.imread('image.jpg', 0)
kernel = np.array([[-1, -1, -1], [-1, 9, -1], [-1, -1, -1]])
sharpened_img = cv2.filter2D(img, -1, kernel)
cv2.imshow('Original Image', img) cv2.imshow('Sharpened Image', sharpened_img) cv2.waitKey(0) cv2.destroyAllWindows()
|
图片平滑
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import cv2 import numpy as np
img = cv2.imread('image.jpg', 0)
kernel = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]])
smoothed_img = cv2.filter2D(img, -1, kernel)/ 9
cv2.imshow('Original Image', img) cv2.imshow('Smoothed Image', smoothed_img) cv2.waitKey(0) cv2.destroyAllWindows()
|