如何在保持图像中块的方向不变的情况下,反映图像的中点位置?

2024-09-30 16:25:53 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个高度H和宽度W的图像。图像的原点位于左上角,以传统方式递增(y向下递增,x向右递增)。我们选择一个大小为b的块,并将图像划分为b x b块,在右边缘和下边缘可能有剩余,大小为rx x ryrx x bb x ryrxry是映像模b的余数,因此rx = W % bry = H % b

以下是设置的描述:

http://i.imgur.com/maOqpT9.png

如果图像高度和/或宽度是b的整数倍,则rxry也可以是0。绿色斑点位于(block_upper_left_x, block_upper_left_y),并对块在图像上出现的位置进行编码

我想通过在x轴和y轴的中线上平移各个块来变换这个图像。生成的图像如下所示:

enter image description here

这不同于简单地在水平和垂直方向上翻转,这会产生以下图像:

enter image description here

我得到了一个数据结构中的图像,它表示这些块,块的高度和宽度以及底层的位图。它看起来像这样:

(block_width, block_height, block_upper_left_x, block_upper_left_y, bitmap[])

给定块中的位图不会改变,只是块之间的相对位置

因此,理想情况下,我希望找到一些简单地改变block_upper_left_xblock_upper_left_y的映射,但尝试使用铅笔和纸张却没有多少可供借鉴的地方。这是我做的一张桌子,可能有助于引导人们思考这个问题:

block_id  | (block_ul_x_0, block_ul_y_0) |  (block_ul_x_f, block_ul_y_f) | (d_ul_x, d_ul_y)
==============================================================================================
0         | (0,   0)                     | (rx + b, 2b)                  | (rx + b,  2b)
1         | (b,   0)                     | (rx,     2b)                  | (rx - b,  2b)
2         | (2b,  0)                     | (0,      2b)                  | (-2b,     2b)
3         | (0,   b)                     | (rx + b,  b)                  | (rx + b,   0)
4         | (b,   b)                     | (rx,      b)                  | (rx - b,   0)
5         | (2b,  b)                     | (0,       b)                  | (-2b,      0)
6         | (0,  2b)                     | (rx + b,  0)                  | (rx + b, -2b)
7         | (b,  2b)                     | (rx,      0)                  | (rx - b, -2b)
8         | (2b, 2b)                     | (0,       0)                  | (-2b,    -2b)

Tags: 图像宽度高度方式传统rxulblock