图像相似判断算法
来源:互联网 发布:百诚网络 编辑:程序博客网 时间:2024/05/22 14:11
思路:
1、原图,缩到,10*10大小;
2、去色(灰化),重置每个点的颜色,算法为:(color=(red*30+green*59+blue*11)/100;color=(color<<16)+(color<<8)+color;)
3、取图片所有像素颜色的非透明值的平均值,算法为:
(
w=h=10;
total=0;
for(i<w){
for(j<h){
total+=bmd.getPixel(i,j)&0x00ffffff;
}
}
return total/(w*h);
)
4、再对10*10的缩小图的每个点,的每个像素颜色值,相与:0x00ffffff;(ARGB,非A部份的所有值);
如果结果值大于第3点所求的平均值,则为1,否则为0;
这样就得出一组数组:我就暂时叫:Hash-SN
这样,同一张图,经过两次该算法的结果肯定是一样的;
即使两张不一样的图,但相似度很高的,这时,就要给Hash-SN设置容差个数的比较;
以上是自己简单总结:
原文链接:http://www.limbo-nova.com/blog/similar-image-searching-algorithm-as3/
原文主要代码:
package{import flash.display.Bitmap;import flash.display.BitmapData;import flash.events.Event;import flash.events.MouseEvent;import flash.geom.Matrix; import mx.controls.Alert; public class PHAImage{public function PHAImage(){} public static function process(bmpData:BitmapData):String{//processing the imagetrace("Start processing...\n");//scaling and convertingvar resizedData:BitmapData = reduceSize(bmpData,8,8);//转换为灰度var greyBmp:BitmapData = reduceColor(resizedData);//计算灰度平均值var avgGrey:uint = calcAvgGrey(greyBmp);trace("Average GreyScale:0x"+avgGrey.toString(16)+"\n");//比较灰度值与平均值,建立哈希指纹var hashArr:Array = calcAvgHash(greyBmp, avgGrey);trace("hashArr: ",hashArr.join(""));return hashArr.join("");} private static function reduceSize(source:BitmapData,width:Number = 8, height:Number=8):BitmapData{var newData:BitmapData = new BitmapData(width,height);var matrix:Matrix = new Matrix();//缩小至 8x8matrix.scale(newData.width/source.width, newData.height/source.height);newData.draw(source,matrix); return newData;} private static function reduceColor(source:BitmapData):BitmapData{var result:BitmapData = new BitmapData(source.width,source.height);for(var i:int = 0; i < source.height; i++){for(var j:uint = 0; j < source.width; j++){var color:uint = source.getPixel(i, j);var red:uint = (color & 0xFF0000) >> 16;var green:uint = (color & 0x00FF00) >> 8;var blue:uint = (color & 0x0000FF) >> 0;//var bwColor:uint = (red + green + blue) / 3;var bwColor:uint = (red * 30 + green * 59 + blue * 11) / 100;// puts the average in each channelbwColor = (bwColor << 16) + (bwColor << 8) + bwColor; result.setPixel(i, j, bwColor);}}return result;} private static function calcAvgGrey(bmpData:BitmapData):uint{var vecGrey:Vector.<uint> = bmpData.getVector(bmpData.rect);var total:uint = 0;var length:uint = vecGrey.length;for(var i:int = 0; i< length;i++){total += (vecGrey[i] & 0x00FFFFFF);} return uint(total/vecGrey.length);} //计算哈希private static function calcAvgHash(bmpData:BitmapData, avgValue:uint):Array{var vecGrey:Vector.<uint> = bmpData.getVector(bmpData.rect);var length:uint = vecGrey.length;var hashArr:Array = [];for(var i:int = 0; i< length;i++){//ARGB 32位数据,只取RGBvar pxColor:uint = vecGrey[i] & 0x00FFFFFF;//是否小于灰度均值,小于记0,否则记0var value:uint = pxColor < avgValue ? 0:1;hashArr.push(value);}return hashArr;}}}
- 图像相似判断算法
- 图像相似度检测算法
- 图像相似度算法--SIFT算法详解
- 图像相似度算法--SIFT算法详解
- 图像相似度算法--SIFT算法详解
- 图像相似度算法--SIFT算法详解
- 关于识别相似图像的算法探讨
- Vlad 寻找相似图像,算法matlab实现
- javascript判断图片相似度算法
- 自己琢磨的 图像相似度算法 JAVA版实现
- 图像相似度算法的C#实现及测评
- 图像相似度算法的C#实现及测评
- 图像相似度算法的C#实现及测评
- 新手从零开始学,相似图像匹配SIFT算法(一)
- 新手从零开始,相似图像匹配SIFT算法(二)
- 数字图像处理4--图像相似度SIFT算法
- OpenCV 图像相似度匹配之感知哈希算法
- 哈希算法实现图像相似度比较(Python&OpenCV)
- 杭电1042
- 《STL源码剖析》读书笔记------第3 章 迭代器概念与traits编程技法
- [面试题] 判断一个单链表是否有环
- 杭电1048
- 杭电1049
- 图像相似判断算法
- 杭电1051
- 很爽
- Struts1+Hibernate+Spring整合(二)
- redhat 5.4下执行mysql的sql文件
- Liferay social bookmarks
- iOS 序列化与反序列化
- 黑马程序员---张老师高新技术之类加载器.代理与AOP
- 将Grub2安装到其他硬盘分区