调整 2D 矩阵大小的基本算法

Basic algorithm to resize a 2D-matrix

提问人:Max 提问时间:3/20/2022 更新时间:3/21/2022 访问量:397

问:

假设我有一个“J”的黑白图像,表示为二进制矩阵,如下所示(白色 = 0,黑色 = 1)。如果我们让矩阵中的每个单元格都是一个像素,它的大小将是 6 x 10。

0 0 0 0 1 0
0 0 0 0 1 0
0 0 0 0 1 0
0 0 0 0 1 0
0 0 0 0 1 0
0 0 0 0 1 0
1 0 0 0 1 0
0 1 1 1 0 0
0 0 0 0 0 0
0 0 0 0 0 0

我想做的是拍摄这张图片并将其大小调整 10 倍,即将其调整为当前大小的 10 倍,达到 60 x 100。(当然,需要进行一些插值,但不需要过于复杂。

我还不明白这在实践中是如何做到的。有没有可以处理这个问题的转换矩阵?我找到了一篇关于使用调整大小矩阵的文章(在我的情况下,我猜是 2 x 2)。那我需要应用它吗?对矩阵中的每个向量(每个条目)?然后,我该如何处理插值以放大黑色像素?

我想知道是否有人可以提供一个简单的示例,说明如何使用缩放矩阵工作,或者为我提供一些要搜索的线索。为了找到一个简单/精简的示例,我的搜索没有成功。

算法 数学 矩阵 语言不可知线性 代数

答:

5赞 Beta 3/21/2022 #1

我将使用示例的较小 (5x4) 版本:

. . T .
. . I .
. . I .
L . I .
. V . .

并将其放大 3 倍,乘以左侧的 15x5 矩阵进行垂直缩放,乘以右侧的 4x12 矩阵进行水平缩放:

1 0 0 0 0     . . T .     1 1 1 0 0 0 0 0 0 0 0 0     . . . . . . T T T . . .
1 0 0 0 0  X  . . I .  X  0 0 0 1 1 1 0 0 0 0 0 0  =  . . . . . . T T T . . .
1 0 0 0 0     . . I .     0 0 0 0 0 0 1 1 1 0 0 0     . . . . . . T T T . . .
0 1 0 0 0     L . I .     0 0 0 0 0 0 0 0 0 1 1 1     . . . . . . I I I . . .
0 1 0 0 0     . V . .                                 . . . . . . I I I . . .
0 1 0 0 0                                             . . . . . . I I I . . .
0 0 1 0 0                                             . . . . . . I I I . . .
0 0 1 0 0                                             . . . . . . I I I . . .
0 0 1 0 0                                             . . . . . . I I I . . .
0 0 0 1 0                                             L L L . . . I I I . . .
0 0 0 1 0                                             L L L . . . I I I . . .
0 0 0 1 0                                             L L L . . . I I I . . .
0 0 0 0 1                                             . . . V V V . . . . . .
0 0 0 0 1                                             . . . V V V . . . . . .
0 0 0 0 1                                             . . . V V V . . . . . .

我相信模式是明确的。

评论

0赞 Max 3/21/2022
啊,太酷了,这确实是有道理的。我还没有使用 2 个矩阵。一个半问题:1.你为什么选择1在缩放矩阵中的位置?2. 假设矩阵可以将分数作为值,那么知道如何进行插值吗?
1赞 Beta 3/21/2022
1. 我看到一个缩放矩阵不行,我需要两个,一个用于垂直,一个用于水平。要将 mxn 矩阵扩展到 km 行,我需要一个 kmxm 左矩阵。它必须生成原始矩阵第一行的 k 个副本,因此左矩阵的前 k 行必须是 。在那之后,一切都很容易。2.有很多方法可以做到。例如,在我的示例中,原始像素中的每个像素都映射到一个 3x3 的像素块;您可以保持中心像素固定,并改变其他八个像素,以平滑过渡到相邻的固定中心。1 0 0 ...0