卷积入门——图像卷积的其他操作

本文最后更新于 2024年7月12日 中午

引入

上一篇文章我们已经探讨了关于卷积在图像模糊上的运用,但是除了图像模糊的均值卷积和高斯卷积以外,还有其他不同的卷积核应用在计算机视觉领域中。

首先,要给出我们上一篇文章已经讲到的自己的图像卷积函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
def mine_convolution(image, kernel):
# 图像矩阵化
pixels = np.array(image)
pixels_height, pixels_width, pixels_channel = pixels.shape
kernel_height, kernel_width = kernel.shape

# 卷积核的中心点
pad_height = kernel_height // 2
pad_width = kernel_width // 2

# 图像填充
padded_pixels = np.pad(
pixels,
((pad_height, pad_height), (pad_width, pad_width), (0, 0)),
mode="edge",
)

# 初始化新图像数组
new_pixels = np.zeros_like(pixels, dtype=np.float32)

# 卷积操作
for i in range(pixels_height):
for j in range(pixels_width):
for k in range(pixels_channel):
# 提取卷积核覆盖的部分
temp = padded_pixels[i : i + kernel_height, j : j + kernel_width, k]
# 计算卷积结果
new_pixels[i, j, k] = np.sum(temp * kernel)

# 确保像素值在合理范围内
new_pixels = np.clip(new_pixels, 0, 255)

# 像素数组转换回图像
new_image = Image.fromarray(np.uint8(new_pixels), mode=image.mode)
return new_image

函数接受图像和卷积核矩阵两个参数,返回处理后的图像

首先我们要处理的原图像是

图像锐化

图像锐化是一种图像增强技术,旨在增强图像中的边缘和细节,使图像看起来更清晰和更具视觉效果。运用在图像锐化的卷积核主要有以下几类。

基本锐化核

最简单的一类锐化卷积核,强调中心像素并减去周围像素的平均值来增强图像的细节。
$$
\begin{bmatrix}0&-1&0\-1&5&-1\0&-1&0\end{bmatrix}
$$
处理后的图像为

可以看见,图像的边缘细节得到了明显的加强,图像整体也变得更加明亮

增强的基本锐化核

使用更大的负值来强调边缘。
$$
\begin{bmatrix}0&-1&0\-1&9&-1\0&-1&0\end{bmatrix}
$$
处理后的图像为

轮廓锐化核

用于提取图像的轮廓,通常与边缘检测相结合。
$$
\begin{bmatrix}1&-2&1\-2&5&-2\1&-2&1\end{bmatrix}
$$
处理后的图像为

可以看到这个图像相比于基本锐化核要暗一些,但是轮廓细节依然得到了突出

拉普拉斯锐化核

拉普拉斯算子也可以用于锐化,通过增加图像的二阶导数信息来增强细节。

卷积核的矩阵表示一般为
$$
\begin{bmatrix}0&-1&0\-1&4&-1\0&-1&0\end{bmatrix}
$$
或者为
$$
\begin{bmatrix}-1&-1&-1\-1&8&-1\-1&-1&-1\end{bmatrix}
$$
第二种拉普拉斯锐化核处理后的图像为

第一种拉普拉斯锐化核处理后的图像为

边缘探测卷积

边缘检测卷积核是一种用于检测图像中边缘(即图像中明显变化的位置)的特殊卷积核。这些卷积核能够突出图像中像素值快速变化的区域。它也主要有以下几类

Sobel 卷积核

水平方向 Sobel 核:

$$
\begin{bmatrix}-1&0&1\-2&0&2\-1&0&1\end{bmatrix}
$$

处理后的图像为

垂直方向 Sobel 核:

$$
\begin{bmatrix}-1&-2&-1\0&0&0\1&2&1\end{bmatrix}
$$

处理后的图像为

在实际应用中,水平和垂直 Sobel 核可以分别应用于图像,然后将它们的结果合并,以获得更全面的边缘信息

Prewitt 卷积核

Prewitt 卷积核类似于 Sobel 卷积核,也用于边缘检测,但其核的权重分布略有不同

水平方向 Prewitt 卷积核:

$$
\begin{bmatrix}-1&0&1\-1&0&1\-1&0&1\end{bmatrix}
$$

处理后的图像为

垂直方向 Prewitt 卷积核:

$$
\begin{bmatrix}-1&-1&-1\0&0&0\1&1&1\end{bmatrix}
$$

处理后的图像为

Roberts 卷积核

相比于前两种,这种卷积核为 2 * 2 的,简单有效

1 型

$$
\begin{bmatrix}1&0\0&-1\end{bmatrix}
$$

处理后的图像为

2 型

$$
\begin{bmatrix}0&1\-1&0\end{bmatrix}
$$

处理后的图像为

这两幅图你可能大致一看没什么差别,但是但你仔细观察两个人物的轮廓亮的那一部分是正好相反的,一个朝右,一个朝左

自定义卷积核

在这里我自己也尝试了一些有意思的卷积核进行试验
$$
\frac{1}{3}\times\begin{bmatrix}0&0&1\0&1&0\1&0&0\end{bmatrix}
$$
100 次卷积处理后的图像为

可能你已经忘记了原图像,这里我再次把它放出

可以看到,处理后的照片具有一种动态模糊的感觉,感觉可以用来模仿正在运动的物体状态。

值得一提的时,这 100 次卷积操作使用我自己的函数时,程序一共大概运行了一个小时左右(


卷积入门——图像卷积的其他操作
http://example.com/2024/07/11/ruihua/
作者
Coder7
发布于
2024年7月11日
许可协议