图像相似度算法的C代码_第1页
图像相似度算法的C代码_第2页
图像相似度算法的C代码_第3页
图像相似度算法的C代码_第4页
图像相似度算法的C代码_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、图像相似度算法的C#实现及测评近日逛博客的时候偶然发现了一个有关图片相似度的 PythonPython 算法实现。想着很有意思便搬到 C#C#上来了,给大家看看。闲言碎语才疏学浅,只把计算图像相似度的一个基本算法的基本实现方式给罗列了出来,以至于在最后自己测评的时候也大发感慨,这个算法有点不靠谱。不管怎么样,这个算法有时候还是有用的,所以还是列出来跟大家伙一起分享分享PS图像处理这一块博大精深,个人偶尔发现了点东西拿来分享。说的不好的地方,写得太糟的地方,诸位准备扔砖头还望淡定,淡定基本知识介绍颜色直方图颜色直方图是在许多图像检索系统中被广泛采用的颜色特征,它所描述的是不同色彩在整幅图像中所占

2、的比例,而并不关心每种色彩所处的空间位置,即无法描述图像中的对象或物体。颜色直方图特别适用于描述那些难以进行自动分割的图像。灰度直方图灰度直方图是灰度级的函数,它表示图像中具有每种灰度级的像素的个数,反映图像中每种灰度出现的频率。灰度直方图的横坐标是灰度级,纵坐标是该灰度级出现的频率,是图像的最基本的统计特征。本文中即是使用灰度直方图来计算图片相似度,关于算法那一块也不赘言了,毕竟图像学图形学,直方图我是门儿都不懂,我也不准备打月中脸充胖子,只想实现一个最基本的算法,然后从最直观的角度看看这个算法的有效性,仅此而已。算法实现诸位看官休怪笔者囱囹吞枣,浅尝辄止的学习态度。额毕竟是因兴趣而来,于此

3、方面并无半点基础(当然,除了知道RGB是啥玩意儿一一这还幸亏当年计算机图形学的老师是个Super美女,因此多上了几节课的缘故),更谈不上半点造诣,看官莫怪莫怪,且忍住怒气,是走是留,小生不敢有半点阻拦大致步骤如下:1,1,将图像转换成相同大小,以有利于计算出相像的直方图来2,2,计算转化后的灰度直方图3,3,利用 XXXX 公式,得到直方图相似度的定量度量4,4,输出这些不知道有用没用的相似度结果数据代码实现步骤1,将图像转化成相同大小,我们暂且转化成256X256吧。publicBitmapResize(stringimageFile,stringnewImageFile)(img=Imag

4、e.FromFile(imageFile);BitmapimgOutput=newBitmap(img,256,256);imgOutput.Save(newImageFile,System.Drawing.Imaging.ImageFormat.Jpeg);imgOutput.Dispose();return(Bitmap)Image.FromFile(newImageFile);这部分代码很好懂,imageFile为原始图片的完整路径,newImageFile为强转大小后的256X256图片的路径,为了“赛”后可以看到我们转化出来的图片长啥样,所以我就把它保存到了本地了,以至于有了上面略显

5、丑陋的代码。步骤2,计算图像的直方图publicintGetHisogram(Bitmapimg)(BitmapDatadata=img.LockBits(newSystem.Drawing.Rectangle(0,0,img.Width,img.Height),ImageLockMode.ReadWrite,PixelFormat.Format24bppRgb);inthistogram=newint256;unsafe(byte*ptr=(byte*)data.Scan0;intremain=data.Stride-data.Width*3;for(inti=0;ihistogram.Le

6、ngth;i+)histogrami=0;for(inti=0;idata.Height;i+)(for(intj=0;jdata.Width;j+)intmean=ptr0+ptr1+ptr2;mean/=3;histogrammean+;ptr+=3;ptr+=remain;img.UnlockBits(data);returnhistogram;这段就是惊天地泣鬼神的灰度直方图计算方法, 里面的弯弯绕还是留给诸位自己去掺和0步骤3,计算直方图相似度度量这一步骤的法宝在于这个:为了大家少敲两行字儿,也给出一堆乱七八糟的代码:/计算相减后的绝对值privatefloatGetAbs(intf

7、irstNum,intsecondNum)(floatabs=Math.Abs(float)firstNum-(float)secondNum);Sim(G,S)其中G,S为直方图,N为颜色空间样点数floatresult=Math.Max(firstNum,secondNum);if(result=0)result=1;returnabs/result;/最终计算结果publicfloatGetResult(intfirstNum,intscondNum)(if(firstNum.Length!=scondNum.Length)(return0;else(floatresult=0;intj

8、=firstNum.Length;for(inti=0;ij;i+)(result+=1-GetAbs(firstNumi,scondNumi);Console.WriteLine(i+-+result);returnresult/j;步骤4,输出这个,,诸位爱怎么输出就怎么输出吧。直接Console也好,七彩命令行输出也罢,亦或者保存到文本文件中留作纪念啦啦,诸位“好自为之”算法测评真对不住大家,忘了跟大家说,我也不是一个专业的算法测评人员,但是作为一个半拉子测试人员免不了手痒痒想要看看这个算法到底有多大能耐,就拿出几张图片出来验验货吧。以下是算法测评结果。以下部分内容话带调侃,绝无恶意,开

9、开玩笑,娱乐大众路人甲路人乙图像相似度恶搞点评100里面%什么都没有!?恭喜你,如果你看不出来这是两张白底图片,那么你还真是小白,因为你连自家人都认不出来啊100大卜%乌鸦黑,这个算法在这一点上立场还算坚定,表现不错k k!1!1r r刊-1fA1fAJJ 健I I-ma-ma一a a4 44 4- 1 1 HIHI!-!-r rF-F-4 4叼/hBftJJhBftJJ *1IW*1IWu u-d-d酸100%碰到Win7也不动心,坚定地给出了r1r1 r r.-.-11111111HrfHrf*,p p。B-TB-TX-IW-B- 1 11l1lr r*rai-*rai-B B- -Ill

10、iIlli1vri1vriv vtyi*utyi*uR-BTJnn-BTJnn-r,一 1 11r1r100%的正确答案。这算法比我意志坚定多了,我可是win7刚出来个7000就装了,还一直用到现在,不过确实好用那里,怎么就相似度这么高咧??难道,“我“你”都认不出来??哦,我息J,这两 张 图片 的 大背 景 是一样的,难怪,*,小三M.%;:JFMiDeneb16.0MS跟8%Apple这么水火不相容?【均使用默认桌间】50.6终于4%了解了Jack跟Rose不能在一起的真正原因:不是爱的不够深, 也不是99.21%尼克号沉了 , 用老 妈 的话说“ 没 有夫妻,相”还是老妈这个过来人老道

11、哇,太/、可思议了, 竟然是这样。这算法这样“黑”“白”不分??我得向Jack跟Rose的忠实Fans道歉了, 上面的话是一时失言祝他们俩白头偕老, 下辈子千万别做船了,坐船也不出海,出海也不去北极,经过我略显玩世不恭的测评活动,说实话,我对这个算法是相当的失望,尤其是最后一次对比中的结果,目前情绪低落中。这倒不是说这算法的一无是处,应该是我或者某些前辈用错了地方,个人觉得算法使用的局限性太大,也或许是我的期望值太高了吧。后记开始看到这玩意儿的时候觉得这玩意儿很简单啊,可是一想不对劲,没有这么容易的事情,要不Google,MS这些大牛们做了这么久还没有像样的玩意儿出来。果不其然,为了多了解一点相关的内容,我不得不Go

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论