例如,假设我有一个2D像素数组(换句话说,一个图像),我想将它们排列成组,这样组的数量就会完全合计到一定数量(例如,总项目数)在另一个2D像素阵列中)。目前,我尝试的是使用比率和像素的组合,但除了完美的整数比率(因此1:2,1:3,1:4等)之外的任何事情都会失败。当它失败时,它只是将它缩放到小于它的整数,因此,例如,1:2.93比例的比例将使用1:2比例,其中部分图像被截断。我宁愿不这样做,所以我可以使用哪些算法不进入Matrix Multipication?我记得看过类似于我刚才提到的内容,但我找不到它。这是NP型问题吗?
例如,假设我有一个12×12像素的图像,我想将其分成64个n-by-m尺寸的子图像。通过分析,我可以看到我可以将其分解为8个2×2子图像和56个2×1子图像,以便获得精确数量的子图像。所以,换句话说,我会得到8 + 56 = 64个子图像使用全部4(8)+56(2)= 144像素。
同样地,如果我有一个13乘13像素的图像,并且我想要81个n×m大小的子图像,我需要将其分解为4个2×2子图像,76 2 1个子图像和1个1×1子图像,以获得所需的子图像的确切数量。换句话说,4(4)+76(2)+ 1 = 169和4 + 76 + 1 = 81。
又一个例子,如果我想将相同的13乘13图像分成36个n×m大小的子图像,我需要14个4乘2的子图像,7个2乘2子图像,14个2×1子图像和1个1×1子图像。换句话说,8(13)+4(10)+2(12)+ 1 = 169和13 + 10 + 12 + 1 = 36.
当然,图像不需要是正方形,既不是子图像的数量,也不应该是素数。另外,子图像的数量应该小于图像中的像素数量。为了便于将一个较大的子图像转换成多个子图像,我可能希望坚持子图像的宽度和高度为2的幂,但是如果我能找到一个不这样做的算法,那么会更好。这基本上就是我想要找到的算法。
答案 0 :(得分:1)
据我所知,您希望将给定大小的矩形图像分割为n
矩形子图像。假设你有:
w * h
n
x * y
子图像
我认为你想要的是
R = { (x, y) | x in [1..w], y in [1..h], x * y == (w * h) / n }
这是(x, y)
对的集合,x * y
等于(w * h) / n
,其中/
是整数除法。此外,您可能希望采用周长最小的x * y
矩形,即x + y
的最小值。
对于问题中的三个例子:
将12 x 12
图片拆分为64个子图像,得到R = {(1,2),(2,1)}
,因此您有64个1 x 2
子图像或64个2 x 1
子图像
将13 x 13
图片拆分为81个子图像,您需要R = {(1,2),(2,1)}
,因此您有64个1 x 2
子图像或64个2 x 1
子图像
将13 x 13
图片拆分为36个子图像,您需要R = {(1,4),(2,2),(4,1)}
,因此您可以使用36个2 x 2
子图像(最小周长)
对于每个例子,你当然可以组合不同大小的矩形。
如果您想要做其他事情,可能平铺原始图片,您可能需要查看rectangle tiling algorithms
答案 1 :(得分:0)
如果您不关心尺寸不同的子图像,一种简单的方法是重复将子图像分成两部分。每次新分割都会将子图像的数量增加一个。