文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

图像相似度Hash算法的示例分析

2024-04-02 19:55

关注

这篇文章主要介绍图像相似度Hash算法的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

图像的相似度Hash算法

Hash算法有三种,分别为平均哈希算法(aHash)、感知哈希算法你(pHash)和差异哈哈希算法(dHash)。

本文实现针对平均哈希算法;

1 平均哈希算法(aHash)

1.1 算法步骤

       平均哈希算法是三种Hash算法中最简单的一种,它通过下面几个步骤来获得图片的Hash值,这几个步骤分别是(1) 缩放图片;(2)转灰度图; (3) 算像素均值;(4)根据相似均值计算指纹。具体算法如下所示:

  表1 aHash得到图片Hash值地算法

缩放图片

输入图片大小尺寸各异,为了统一图片的输入,统一将图片尺寸缩放为8*8,一共得到了64个像素点。

转灰度图

输入图片有些为单通道灰度图,有些RGB三通道彩色图,有些为RGBA四通道彩色图。也为了统一下一步输入标准,将非单通道图片都转为单通道灰度图。 其中RGB三通道转单通道算法有下面几种:

1.浮点算法:Gray=R0.3+G0.59+B0.11

2.整数方法:Gray=(R30+G59+B11)/100

3.移位方法:Gray =(R76+G151+B*28)>>8; 

4.平均值法:Gray=(R+G+B)/3; 

5.仅取绿色:Gray=G;

算像素均值

通过上一步可得一个8x8的整数矩阵G,计算这个矩阵中所有元素的平均值,假设其值为a

据像素均值计算指纹

初始化输入图片的ahash = "" 

从左到右一行一行地遍历矩阵G每一个像素如果第i行j列元素G(i,j) >= a,则ahash += "1"如果第i行j列元素G(i,j) <a, 则ahash += "0"


得到图片的ahash值后,比较两张图片ahash值的汉明距离,通常认为汉明距离小于10的一组图片为相似图片。

  Demo 界面/  

 图像相似度Hash算法的示例分析

   图像相似度Hash算法的示例分析

图像相似度Hash算法的示例分析

  获取aHash函数如下:

function TForm1.GetHash(src: TBitmap; iType: Integer): Int64;
var
  p: PByteArray;
  bmp: TBitmap;
  x, y: Integer;
  gray, sum: Integer;
  ct: array[0..7, 0..7] of Byte;
  avg: Single;
  ret: Int64;
begin
  ret := 0;
  case iType of
    0:  // aHash  平均哈希算法
    begin
      bmp := TBitmap.Create;
      try
        bmp.Assign(src);
        bmp.Width := 8;
        bmp.Height := 8;
        bmp.PixelFormat := pf24bit;
        sum := 0;
        for y := 0 to 7 do
        begin
          p := bmp.ScanLine[y];
          for x := 0 to 7 do
          begin
            //转灰度图 平均值法
            gray := (p[3 * x + 2] + p[3 * x + 1] + p[3 * x]) div 3;
            ct[y, x] := gray;
            sum := sum + gray;
          end;
        end;
        avg := sum/64;
        for y := 0 to 7 do
          for x := 0 to 7 do
            ret := ret shl 1 or Ord(ct[y, x] > avg);
      finally
        bmp.Free;
      end;
    end;
    1:  // pHash  感知哈希算法
    begin

    end;
    2:  // dHash  差异哈希算法
    begin

    end;
  end;
  Result := ret;
end;

计算汉明距离函数:

function TForm1.Hamming(Hash2, Hash3: Int64): Integer;
var
  A: Int64;
begin
  Result := 0;
  A := Hash2 xor Hash3;
  while A<>0 do
  begin
    A := A and (A-1);
    Inc(Result);
  end;
end;

以上是“图像相似度Hash算法的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯