图像相似度算法的c#代码

上传人:j****9 文档编号:45460912 上传时间:2018-06-16 格式:DOC 页数:14 大小:273KB
返回 下载 相关 举报
图像相似度算法的c#代码_第1页
第1页 / 共14页
图像相似度算法的c#代码_第2页
第2页 / 共14页
图像相似度算法的c#代码_第3页
第3页 / 共14页
图像相似度算法的c#代码_第4页
第4页 / 共14页
图像相似度算法的c#代码_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《图像相似度算法的c#代码》由会员分享,可在线阅读,更多相关《图像相似度算法的c#代码(14页珍藏版)》请在金锄头文库上搜索。

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

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

3、休怪笔者囫囵吞枣,浅尝辄止的学习态度。额毕竟是因兴趣而来,于此方面并无半点基础(当然,除了知道 RGB 是啥玩意儿这还幸亏当年计算机图形学的老师是个 Super 美女,因此多上了几节课的缘故),更谈不上半点造诣,看官莫怪莫怪,且忍住怒气,是走是留,小生不敢有半点阻拦大致步骤如下:1, 将图像转换成相同大小,以有利于计算出相像的直方图来2, 计算转化后的灰度直方图3, 利用 XX 公式,得到直方图相似度的定量度量4, 输出这些不知道有用没用的相似度结果数据代码实现代码实现步骤 1, 将图像转化成相同大小,我们暂且转化成 256 X 256 吧。public Bitmap Resize(strin

4、g imageFile, string newImageFile)img = Image.FromFile(imageFile);Bitmap imgOutput = new Bitmap(img, 256, 256);imgOutput.Save(newImageFile, System.Drawing.Imaging.ImageFormat.Jpeg);imgOutput.Dispose();return (Bitmap)Image.FromFile(newImageFile);这部分代码很好懂,imageFile 为原始图片的完整路径,newImageFile 为强转大小后的 256 X

5、 256 图片的路径,为了“赛”后可以看到我们转化出来的图片长啥样,所以我就把它保存到了本地了,以至于有了上面略显丑陋的代码。步骤 2,计算图像的直方图public int GetHisogram(Bitmap img)BitmapData data = img.LockBits( new System.Drawing.Rectangle( 0 , 0 , img.Width , img.Height ), ImageLockMode.ReadWrite , PixelFormat.Format24bppRgb );int histogram = new int 256 ;unsafebyte

6、* ptr = ( byte* )data.Scan0;int remain = data.Stride - data.Width * 3;for( int i = 0 ; i histogram.Length ; i + )histogram i = 0;for( int i = 0 ; i data.Height ; i + )for( int j = 0 ; j data.Width ; j + )int mean = ptr 0 + ptr 1 + ptr 2 ;mean /= 3;histogram mean +;ptr += 3;ptr += remain;img.UnlockBi

7、ts( data ); return histogram;这段就是惊天地泣鬼神的灰度直方图计算方法,里面的弯弯绕还是留给诸位自己去掺和。步骤 3,计算直方图相似度度量这一步骤的法宝在于这个:Sim(G,S)= 其中 G,S 为直方图,N 为颜色空间样点数为了大家少敲两行字儿,也给出一堆乱七八糟的代码:/计算相减后的绝对值private float GetAbs(int firstNum, int secondNum)float abs = Math.Abs(float)firstNum - (float)secondNum);float result = Math.Max(firstNum,

8、secondNum);if (result = 0)result = 1;return abs / result;/最终计算结果public float GetResult(int firstNum, int scondNum)if (firstNum.Length != scondNum.Length)return 0;elsefloat result = 0;int j = firstNum.Length;for (int i = 0; i j; i+)result += 1 - GetAbs(firstNumi, scondNumi);Console.WriteLine(i + “-“

9、+ result);return result/j;步骤 4,输出这个诸位爱怎么输出就怎么输出吧。直接 Console 也好,七彩命令行输出也罢,亦或者保存到文本文件中留作纪念啦啦,诸位“好自为之”算法测评算法测评真对不住大家,忘了跟大家说,我也不是一个专业的算法测评人员,但是作为一个半拉子测试人员免不了手痒痒想要看看这个算法到底有多大能耐,就拿出几张图片出来验验货吧。以下是算法测评结果。以下部分内容话带调侃,绝无恶意,开开玩笑,娱乐大众路人甲路人乙图像恶搞相似度点评100%里面什么都没有!?恭喜你,如果你看不出来这是两张白底图片,那么你还真是小白,因为你连自家人都认不出来啊100%天下乌鸦一

10、般黑,这个算法在这一点上立场还算坚定,表现不错100%碰到Win7也不动心,意志坚定地给出了100%的正确答案。这算法比我意志坚定多了,我可是win7刚出来个7000就装了,还一直用到现在,不过确实好用88.84%明明很不一样的“我”跟“你”摆在那里,怎么就相似度这么高咧?难道,“我”,“你”都认不出来?哦,我忘了,这两张图片的大背景是一样的,难怪16.08%MS 跟Apple这么水火不相容?【均使用默认桌面】50.64%终于了解了Jack跟Rose不能在一起的真正原因:不是爱的不够深,也不是泰坦尼克号沉了,用老妈的话说“没有夫妻相” 还是老妈这个过来人老道99.21%哇,太不可思议了,竟然是

11、这样。这算法这样“黑”“白”不分?我得向Jack跟Rose的忠实Fans道歉了,上面的话是一时失言祝他们俩白头偕老,下辈子千万别做船了,坐船也不出海,出海也不去北极,经过我略显玩世不恭的测评活动,说实话,我对这个算法是相当的失望,尤其是最后一次对比中的结果,目前情绪低落中。这倒不是说这算法的一无是处,应该是我或者某些前辈用错了地方,个人觉得算法使用的局限性太大,也或许是我的期望值太高了吧。后记后记开始看到这玩意儿的时候觉得这玩意儿很简单啊,可是一想不对劲,没有这么容易的事情,要不 Google,MS 这些大牛们做了这么久还没有像样的玩意儿出来。果不其然,为了多了解一点相关的内容,我不得不 Google 了一下,觉得那些术语完全不知所云,看不懂啊;看来我得祭出我一般不使用的大杀器了百度一搜。嘿,还真找出来了一堆东西,比 Google 上面的看起来容易多了,可是打开链接进去瞅瞅,发现还是非我当前能力之所及。没学到东西,但是好歹还是了解了一点皮毛上的皮毛。全文完全文完诸位看官若觉得讲得没有意义,浪费了你的时间,那就权当作冷笑话听听缓解一下紧张的神经

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 初中教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号