0

我试图创建一个程序来查找彼此相似的图像,并且我找到了一个站点(http://www.hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html)给出了创建图像指纹的功能的步骤,第一步是将图像的大小减小到 8 x 8(64 像素)图像,但我不知道如何将一组像素转换为一个像素,例如

[(R,G,B)][(R,G,B)][(R,G,B)]
[(R,G,B)][(R,G,B)][(R,G,B)]
[(R,G,B)][(R,G,B)][(R,G,B)]

取这组像素,每个像素都有不同的 R、G 和 B 值,我怎样才能把它们全部取走并将它们变成一组值,例如

[(R,G,B)]

我想也许可以将所有 R、G 和 B 值相加,然后对它们进行平均,但这似乎很简单,有人知道该怎么做吗?我正在用java编写这个程序。

4

1 回答 1

1

有许多不同的插值/重新采样技术可以进行缩小 - 您可以根据期望的结果选择一种。一个简单的,即最近邻插值:但是由于简单,这不会导致非常详细的结果。

如果图片实际上是照片(而不是像素艺术) ,更先进的技术,即线性插值双线性插值双三次插值更适合。但是链接中的缩小图像也没有留下太多细节 - 所以最近的邻居似乎已经足够了(至少开始时)。

public int[] resizePixels(int[] pixels,int w1,int h1,int w2,int h2) {
    int[] temp = new int[w2*h2] ;
    double x_ratio = w1/(double)w2 ;
    double y_ratio = h1/(double)h2 ;
    double px, py ; 
    for (int i=0;i<h2;i++) {
        for (int j=0;j<w2;j++) {
            px = Math.floor(j*x_ratio) ;
            py = Math.floor(i*y_ratio) ;
            temp[(i*w2)+j] = pixels[(int)((py*w1)+px)] ;
        }
    }
    return temp ;
}

此 java 函数采用像素值数组(原始大小 - w1 和 h1)并返回最近邻(上/下)缩放的像素数组,尺寸为 w2 x h2。另见:这里

于 2012-12-12T12:28:05.597 回答