当前位置: 首页 > news >正文

太原制作公司网站手机网站用什么软件做的好

太原制作公司网站,手机网站用什么软件做的好,wordpress显示网站在线人数,wordpress主页访客记录1. 介绍 差值哈希算法#xff08;Difference Hash Algorithm#xff0c;简称dHash#xff09; 是哈希算法的一种#xff0c;主要可以用来做以图搜索/相似图片的搜索工作。 2. 原理 差值哈希算法通过计算相邻像素的差异来生成哈希#xff0c;即通过缩小图像的每个像素与平…1. 介绍 差值哈希算法Difference Hash Algorithm简称dHash 是哈希算法的一种主要可以用来做以图搜索/相似图片的搜索工作。 2. 原理 差值哈希算法通过计算相邻像素的差异来生成哈希即通过缩小图像的每个像素与平均灰度值的比较生成一组哈希值。最后利用两组图像的哈希值的汉明距离来评估图像的相似度。 3. 魔法 概括地讲差值哈希算法一共可细分五步 缩小图像 调整输入图像的大小为 (hash_size 1) 宽度和 hash_size 高度通常为 9x8 像素总共72个像素。图像灰度化 将彩色图像转换为灰度图像以便进行灰度差值计算。计算差异值 差值算法工作在相邻像素之间如果左边的像素比右边的更亮则记录为1否则为0这样每行9个像素通过左右像素的两两比较会产生8个不同的差异值一共8行则会产生64个差异值。生成哈希值 由于64位的二进制值差异值太长所以按每4个字符为1组由2进制转成16进制。这样就转为一个长度为16的字符串。这个字符串也就是这个图像可识别的哈希值也叫图像指纹即这个图像所包含的特征。哈希值比较 通过比较两个图像的哈希值的汉明距离Hamming Distance就可以评估图像的相似度距离越小表示图像越相似。 4. 实验 4.1 魔法 第一步缩小图像 调整输入图像的大小为 (hash_size 1) 宽度和 hash_size 高度通常为 9x8 像素总共72个像素以便进行后续的差值计算。 1读取原图 # 测试图片路径 img_path img_test/apple-01.jpg# 通过OpenCV加载图像 img cv2.imread(img_path) plt.imshow(img, cmapgray) plt.show()# 通道重排从BGR转换为RGB img_rgb cv2.cvtColor(img, cv2.COLOR_BGR2RGB) plt.imshow(img_rgb, cmapgray) plt.show()2缩小原图 # 缩小图像使用OpenCV的resize函数将图像缩放为9x8像素采用Cubic插值方法进行图像重采样 img_resize cv2.resize(img_rgb, (9, 8), cv2.INTER_CUBIC)# 打印 img.shape 可以获取图像的形状信息即 (行数, 列数, 通道数) # 通道数灰度图像通道数为 1彩色图像通道数为 3 print(img_resize.shape) plt.imshow(img_resize, cmapgray) plt.show()输出打印 (8, 9, 3)将图像 img 调整大小为 (9, 8) 的尺寸并使用 cv2.INTER_CUBIC 插值方法进行图像的缩放。在这里原始图像 img 将被调整为 9 像素宽和 8 像素高。 打印 img.shape 可以获取图像的形状信息即行数, 列数, 通道数。通道数取决于原始图像的通道数如灰度图像通道数为 1彩色图像通道数为 3。 第二步图像灰度化 将彩色图像转换为灰度图像以便进行灰度差值计算。 # 图像灰度化将彩色图像转换为灰度图像。 img_gray cv2.cvtColor(img_resize, cv2.COLOR_BGR2GRAY)# 打印出了灰度图像的行数和列数因为灰度图像只有一个通道所以不会显示通道数 print(img_gray.shape) plt.imshow(img_gray, cmapgray) plt.show()输出打印 (8, 9)使用 OpenCV 的 cvtColor 函数将彩色图像 img 转换为灰度图像。cv2.COLOR_BGR2GRAY 是颜色空间转换标志它指示将图像从 BGR彩色颜色空间转换为灰度颜色空间。 打印 img_gray.shape 包含图像的维度信息通常是行数, 列数或行数, 列数, 通道数。这里只有灰度图像的行数和列数因为灰度图像只有一个通道所以不会显示通道数。 第三步计算差异值 差值算法工作在相邻像素之间如果左边的像素比右边的更亮则记录为1否则为0这样每行9个像素通过左右像素的两两比较会产生8个不同的差异值一共8行则会产生64个差异值。 # 计算差异值获得图像二进制字符串 img_hash_str # img_hash_arr [] # 遍历图像的像素比较相邻像素之间的灰度值根据强弱增减差异情况生成一个二进制哈希值 # 外层循环遍历图像的行垂直方向范围是从0到7 for i in range(8):# 内层循环遍历图像的列水平方向范围也是从0到7for j in range(8):# 比较当前像素 img[i, j] 与下一个像素 img[i, j 1] 的灰度值if img_gray[i, j] img_gray[i, j 1]:# 如果当前像素的灰度值大于下一个像素的灰度值灰度值增加将1添加到名为 hash 的列表中# img_hash_arr.append(1)img_hash_str 1else:# 否则灰度值弱减将0添加到名为 hash 的列表中# img_hash_arr.append(0)img_hash_str 0 print(f图像的二进制哈希值{img_hash_str})输出打印 图像的二进制哈希值0000000000110000001100000010000001110000001000000011000001110000这段代码的目的是遍历图像的每一行和每一列逐个比较相邻像素之间的灰度值根据比较结果生成一个二进制哈希值。如果像素之间的灰度值增加就将1添加到哈希值中如果减少或保持不变就将0添加。这个生成的哈希值可用于图像相似性比较用于检测图像中的局部特征。 第四步生成哈希值 由于64位二进制值太长所以按每4个字符为1组由2进制转成16进制。这样就转为一个长度为16的字符串。这个字符串也就是这个图像可识别的哈希值也叫图像指纹即这个图像所包含的特征。 # 生成哈希值生成图像可识别哈希值 img_hash for i in range(0, 64, 4):img_hash .join(%x % int(img_hash_str[i: i 4], 2)) print(f图像可识别的哈希值{img_hash})输出打印 图像可识别的哈希值0030302070203070同样的将目标素材图像进行上述计算亦可得到一个图像可识别的哈希值。 第五步哈希值比较 通过两个等长字符串在相同位置上不同字符的数量计算两个等长字符串之间的汉明距离Hamming Distance就可以评估图像的相似度距离越小表示图像越相似。 # 汉明距离通过两个等长字符串在相同位置上不同字符的数量计算两个等长字符串之间的汉明距离 def hamming_distance(s1, s2):# 检查这两个字符串的长度是否相同。如果长度不同它会引发 ValueError 异常因为汉明距离只适用于等长的字符串if len(s1) ! len(s2):raise ValueError(Input strings must have the same length)distance 0for i in range(len(s1)):# 遍历两个字符串的每个字符比较它们在相同位置上的值。如果发现不同的字符将 distance 的值增加 1if s1[i] ! s2[i]:distance 1return distance汉明距离 两个等长字符串在相同位置上不同字符的数量。即一组二进制数据变成另一组数据所需要的步骤数。汉明距离越小则相似度越高。汉明距离为0即两张图片完全一样。 4.2 测试 实验场景 通过 opencv使用差值哈希算法查找目标图像素材库中所有相似图像并列出相似值。 实验素材 这里我准备了10张图片其中9张是苹果但形态不一1张梨子。 实验代码 以图搜图差值哈希算法Difference Hash Algorithm简称dHash的原理与实现 测试环境win10 | python 3.9.13 | OpenCV 4.4.0 | numpy 1.21.1 实验场景通过 opencv使用差值哈希算法查找目标图像素材库中所有相似图像 实验时间2023-10-31 实验名称dhash_v5_all.py import os import cv2 import timedef get_dHash(img_path):# 读取图像通过OpenCV的imread加载RGB图像img_rgb cv2.cvtColor(cv2.imread(img_path), cv2.COLOR_BGR2RGB)# 缩小图像使用OpenCV的resize函数将图像缩放为9x8像素采用Cubic插值方法进行图像重采样img_resize cv2.resize(img_rgb, (9, 8), cv2.INTER_CUBIC)# 图像灰度化将彩色图像转换为灰度图像img_gray cv2.cvtColor(img_resize, cv2.COLOR_BGR2GRAY)# 计算差异值获得图像二进制字符串img_hash_str # 遍历图像的像素比较相邻像素之间的灰度值根据强弱增减差异情况生成一个二进制哈希值# 外层循环遍历图像的行垂直方向范围是从0到7for i in range(8):# 内层循环遍历图像的列水平方向范围也是从0到7for j in range(8):# 比较当前像素 img[i, j] 与下一个像素 img[i, j 1] 的灰度值if img_gray[i, j] img_gray[i, j 1]:# 如果当前像素的灰度值大于下一个像素的灰度值灰度值增加将1添加到名为 hash 的列表中img_hash_str 1else:# 否则灰度值弱减将0添加到名为 hash 的列表中img_hash_str 0# print(f图像的二进制哈希值{img_hash_str})# 生成哈希值生成图像可识别哈希值img_hash .join(map(lambda x:%x % int(img_hash_str[x : x 4], 2), range(0, 64, 4)))return img_hash# 汉明距离通过两个等长字符串在相同位置上不同字符的数量计算两个等长字符串之间的汉明距离 def hamming_distance(str1, str2):# 检查这两个字符串的长度是否相同。如果长度不同它会引发 ValueError 异常因为汉明距离只适用于等长的字符串if len(str1) ! len(str2):raise ValueError(Input strings must have the same length)distance 0for i in range(len(str1)):# 遍历两个字符串的每个字符比较它们在相同位置上的值。如果发现不同的字符将 distance 的值增加 1if str1[i] ! str2[i]:distance 1return distance# ------------------------------------------------- 测试 ------------------------------------------------- if __name__ __main__:time_start time.time()# 指定测试图像库目录img_dir img_test# 指定测试图像文件扩展名img_suffix [.jpg, .jpeg, .png, .bmp, .gif]# 获取当前执行脚本所在目录script_dir os.path.dirname(__file__)# 获取目标测试图像的全路径img_org_path os.path.join(script_dir, img_dir, apple-01.jpg)# 获取目标图像可识别哈希值图像指纹org_img_hash get_dHash(img_org_path)print(f目标图像{os.path.relpath(img_org_path)}图像HASH{org_img_hash})# 获取测试图像库中所有文件all_files os.listdir(os.path.join(script_dir, img_dir))# 筛选出指定后缀的图像文件img_files [file for file in all_files if any(file.endswith(suffix) for suffix in img_suffix)]img_hash_all []# 遍历测试图像库中的每张图像for img_file in img_files:# 获取相似图像文件路径img_path os.path.join(script_dir, img_dir, img_file)# 获取相似图像可识别哈希值图像指纹img_hash get_dHash(img_path)# 获取相似图像与目标图像的汉明距离distance hamming_distance(org_img_hash, img_hash)# 存储相似图像的相对路径、哈希值、汉明距离img_hash_all.append((os.path.relpath(img_path), img_hash, distance))for img in img_hash_all:print(f图像名称{os.path.basename(img[0])}图像HASH{img[1]}与目标图像的近似值汉明距离{img[2]})time_end time.time()print(f耗时{time_end - time_start})输出打印 目标图像..\..\P1_Hash\03_dHash\img_test\apple-01.jpg图像HASH0030302070203070 图像名称apple-01.jpg图像HASH0030302070203070与目标图像的近似值汉明距离0 图像名称apple-02.jpg图像HASH2048502430301000与目标图像的近似值汉明距离9 图像名称apple-03.jpg图像HASH0030705070506020与目标图像的近似值汉明距离5 图像名称apple-04.jpg图像HASH3030303038301000与目标图像的近似值汉明距离7 图像名称apple-05.jpg图像HASH0818206840602830与目标图像的近似值汉明距离11 图像名称apple-06.jpg图像HASH00004cccd0c8eeec与目标图像的近似值汉明距离12 图像名称apple-07.jpg图像HASH5af53928b158dc1e与目标图像的近似值汉明距离14 图像名称apple-08.jpg图像HASH87868a060c081e2c与目标图像的近似值汉明距离16 图像名称apple-09.jpg图像HASH0040285060602070与目标图像的近似值汉明距离7 图像名称pear-001.jpg图像HASH0204367274f07060与目标图像的近似值汉明距离10 耗时0.097738265991210945. 总结 经过实验和测试差值哈希算法dHash是一种非常简单的算法易于实现和理解且计算速度快适用于大规模图像数据相似性处理。 特点 传统属于一种外观相似哈希算法。 优点 简单、相对准确、计算效率高在同等测试样本下相比pHashdHash的速度要更快适用于快速图像相似性搜索。 缺点 对于图像的旋转和缩放敏感不适用于检测嵌入式水印或复杂的变换即使是微小的旋转或缩放也会导致哈希值大幅度改变因为它主要用于检测左右局部像素级别的变化。 6. 系列书签 OpenCV书签 #均值哈希算法的原理与相似图片搜索实验 OpenCV书签 #感知哈希算法的原理与相似图片搜索实验 OpenCV书签 #差值哈希算法的原理与相似图片搜索实验
http://www.sczhlp.com/news/156801/

相关文章:

  • 北京网站建设服务中心上海市住宅建设发展中心网站
  • 福建住房城乡建设厅网站郑州网站zhi zuo
  • 重庆建设空调网站国家信用信息公示系统广东
  • 沃尔玛网上超市南京企业网站排名优化
  • 西部数码网站管理助手 卸载莱芜网站建设哪家好
  • seo在网站制作seo基础培训教程
  • 广州 网站建设 020开发网站广州
  • 硚口区建设局网站c2c平台的产品类型
  • 国外免费注册域名的网站新网站如何做网站优化
  • 251002
  • AT_agc020_d [AGC020D] Min Max Repetition
  • 题解:P7810 [JRKSJ R2] Upper
  • 记录自己被AWS坑了6刀
  • 企业网站优化要多少钱百度推广中心
  • 昆山网站建设哪家便宜wordpress文章图片灯箱
  • 网站建设工作室需要哪些设备研学网站开发需求文档
  • 柳州城乡建设部网站首页wordpress erp
  • 企业的网站设计微博网站开发
  • 温岭市建设规划局网站海外网站推广方案
  • 萝岗移动网站建设腾讯公司
  • 卖主机网站网站怎么做查询系统
  • 网页设计 做网站的代码新钥匙石家庄网站建设
  • 响应式网站是指自适应吗免费设计素材
  • 旅游网站的功能及建设国外免费建站网站不用下载
  • 盐城网站建设有限公司免费的行情网站app代码
  • 各大网站域名深圳企业网站建设服务
  • 免费创建社区论坛网站现在.net做网站的多吗
  • 网站建设摊销几年好的平面设计作品网站
  • 新开传奇网站新开网做天然文化石的网站
  • 室内设计入门从何学起郴州网站seo外包