提问人:Max 提问时间:3/20/2022 更新时间:3/21/2022 访问量:397
调整 2D 矩阵大小的基本算法
Basic algorithm to resize a 2D-matrix
问:
假设我有一个“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
上一个:了解无处可去的贝塞尔派生代码
下一个:删除值后重新计算总体方差的公式
评论