0

我做了一个照片马赛克脚本(PHP)。该脚本有一张图片,并将其更改为小图片的照片组合。远看像实物,走近一看全是小图。我取一个固定像素数的正方形并确定该正方形的平均颜色。然后我将它与包含数千张图片的平均颜色的数据库进行比较。我用所有可用图像确定颜色距离。但是要完全运行这个脚本需要几分钟。

瓶颈是将最佳图片与主要图片的一部分进行匹配。我一直在网上搜索如何减少这种情况,结果出现了一个交叉“Antipole Clustering”。当然,我试图自己找到一些有关如何使用此方法的信息,但我似乎无法弄清楚该怎么做。

有两个步骤。1. 数据库获取和 2. Photomosaic 创建。让我们从第一步开始,一切都清楚了。也许我自己理解第 2 步。

步骤1:

  • 将数据库的每个图像划分为 9 个相等的矩形,以 3x3 网格排列

  • 计算每个矩形的 RGB 平均值

  • 构造一个由 27 个分量组成的向量 x(每个矩形三个 RGB 分量)

  • x 是数据结构中图像的特征向量

好吧,第 1 点和第 2 点很简单,但在第 3 点我应该怎么做。如何从 27 个分量(9 * R 均值,G 均值,B 均值)中组成向量 X。

当我成功组成向量时,下一步我应该如何处理这个向量。

彼得

4

3 回答 3

1

以下是我认为特征向量的计算方式:

你有 3 x 3 = 9 个矩形。

每个像素本质上是 3 个数字,红色、绿色和蓝色通道各 1 个。

对于每个矩形,您计算该矩形中所有像素的红色、绿色和蓝色的平均值。这为每个矩形提供了 3 个数字。

总共有 9(矩形)x 3(R、G、B 的平均值)= 27 个数字。

只需将这 27 个数字连接成一个 27 x 1(通常写为 27 x 1)向量。即 27 个数字组合在一起。这个由 27 个数字组成的向量就是特征向量 X,它代表照片的颜色统计量。在代码中,如果您使用 C++,这可能是一个 27 个数字的数组,甚至可能是(恰当命名的)向量类的一个实例。您可以将此特征向量视为照片中颜色的某种形式的“摘要”。大致如下: [R1, G1, B1, R2, G2, B2, ..., R9, G9, B9] 其中 R1 是第一个矩形中红色像素的平均值/平均值,依此类推。

我相信第 2 步涉及比较这些特征向量的某种形式,以便将具有相似特征向量(因此具有相似颜色)的那些放在一起。比较可能会涉及使用欧几里德距离(参见此处)或其他一些度量标准,以比较特征向量(以及因此照片的颜色)彼此之间的相似程度。

最后,正如 Anony-Mousse 建议的那样,将像素从 RGB 转换为 HSB/HSV 颜色会更好。如果您使用 OpenCV 或可以访问它,这只是一个单行代码。否则 wiki HSV 等将为您提供执行转换的数学公式。

希望这可以帮助。

于 2013-01-03T07:01:45.243 回答
0

您可能希望使用 HSB 空间,而不是使用 RGB。它为各种用例提供​​了更好的结果。将更多权重放在色相上以获得更好的照片色彩匹配,或在合成高对比度图像(徽标等)时提高亮度

我从未听说过反极聚类。但显而易见的下一步是将您拥有的所有图像放入一个大索引中。比如说,R-Tree。也许通过 STR 批量加载它。然后您可以快速找到匹配项。

于 2012-11-08T19:24:03.717 回答
0

Maybe it means vector quantization (vq). In vq the image isn't subdivide in rectangles but in density areas. Then you can take a mean point of this cluster. First off you need to take all colors and pixels separate and transfer it to a vector with XY coordinate. Then you can use a density clustering like voronoi cells and get the mean point. This point can you compare with other pictures in the database. Read here about VQ: http://www.gamasutra.com/view/feature/3090/image_compression_with_vector_.php.

How to plot vector from adjacent pixel:

d(x) = I(x+1,y) - I(x,y)
d(y) = I(x,y+1) - I(x,y)

Here's another link: http://www.leptonica.com/color-quantization.html.

Update: When you have already computed the mean color of your thumbnail you can proceed and sort all the means color in a rgb map and using the formula I give to you to compute the vector x. Now that you have a vector of all your thumbnails you can use the antipole tree to search for a thumbnail. This is possbile because the antipole tree is something like a kd-tree and subdivide the 2d space. Read here about antipole tree: http://matt.eifelle.com/2012/01/17/qtmosaic-0-2-faster-mosaics/. Maybe you can ask the author and download the sourcecode?

于 2012-11-08T19:55:03.127 回答