我从一个图像中得到了25个样本, 得到了它们的平均 rgb 值, 并保存在 5x5 颜色阵列中。 这些是我的“ 签名 ” 。 签名中的值如下 :
Color signature[5][5];
-21233 -1 -323211 ... ...
-123 -12323 ...
...
我可以从签名索引中达到红色、蓝色和绿色的值。 我用这些值来比较两个图像签名, 并获得“ 差异” 值 。
signature[1][1].getBlue() = 123, Color[1][1].getRed() = 200 ..
for (int x = 0; x < 5; x++) {
for (int y = 0;y < 5; y++) {
int r1 = signature[x][y].getRed();
int g1 = signature[x][y].getGreen();
int b1 = signature[x][y].getBlue();
int r2 = signature2[x][y].getRed();
int g2 = signature2[x][y].getGreen();
int b2 = signature2[x][y].getBlue();
double tempDiff = Math.sqrt((r1 - r2) * (r1 - r2)
+ (g1 - g2) * (g1 - g2)
+ (b1 - b2) * (b1 - b2));
difference += tempDiff;
}
}
我还得到了图像的第二个签名, 显示其边缘发现的版本的签名。 比较两个图像, 我将正常的签名差异与边缘的签名差异乘以最终的差异值 。
在比较两个图像时,一切都很好。不过,我有很多图像, 所以我在数据库中保存了签名,比如:
Table images:
-COLUMN name- -COLUMN signature- -COLUMN edge signature-
myimg.jpg |-12312 -132 -2 ... (25 of them) |-123 -1 -1234 -6921 .. (25 of them)|
我只是将签名索引与它们之间的空格连接起来 另存为字符串
这里我的问题是: 我需要找到一个图像的相似之处。 如果我从数据库中选择了所有图像, 情况会变得非常缓慢, 并且我失去了内存。 我可以从数据库中选择1000秒的图像, 比较并获得下一个1000秒, 但这个速度甚至更慢 。
我需要一种方法来比较查询中的图像签名, 我准备改变我的表格列, 甚至准备尝试用100列的疯狂表格来显示签名的所有 RGB 值。 我需要减少或散列签名。 您可以建议任何方法/ 方法、 链接或图书馆? 任何帮助都会受到欢迎 。
如果需要,我在网 Beans使用爪哇,与MySQL合作。