unity图片相似度识别

2023-11-17

public static SimilarPhoto _Instance;
/ <summary>
/ 需要被对比的哈希值
/ </summary>
//public string ContrastValue;
/ <summary>
/ 服务器图片
/ </summary>
//public List<Texture2D> ServerImage = new List<Texture2D>();
public List<string> SimilarPhotoHash = new List<string>();
//public Button btn;
void Awake()
{
_Instance = this;
//DCT变换
//float[,] A = creatDCTMatrix(size);
//float[,] Aa = Transpose(A);
//float[,] DCT = Multiply(Multiply(A, ima1F), Aa);
//texS = (Texture2D)Resources.Load("aruco_sample1");
//for (int i = 0; i < ServerImage.Count; i++)
//{
// StartUpLoadImageData(ServerImage[i], 10);
//}

//for (int i = 0; i < NewHash.Count; i++)
//{
// CountSimilarity(ContrastValue, NewHash[i]);
//}
}

/// <summary>
/// 开始对比并计算哈希值
/// </summary>
/// <param name="tex"></param>
/// <param name="size"></param>
public void StartUpLoadImageData(Texture2D tex, int size)
{
image2F(Tex2Gray(ReduceSize(tex, size)));
}
/// <summary>
/// 压缩图片
/// </summary>
/// <param name="tex"></param>
/// <param name="size"></param>
/// <returns></returns>
Texture2D ReduceSize(Texture2D tex, int size)
{
if (tex == null || size <= 0)
{
Debug.Log("图片错误");
return null;
}
Texture2D newTexture = new Texture2D(size, size, TextureFormat.RGB24, false);
float ratioX = tex.width / size;
float ratioY = tex.height / size;
Color color;
for (int i = 0; i < newTexture.height; i++)
{
for (int j = 0; j < newTexture.width; j++)
{
color = tex.GetPixel(Mathf.RoundToInt(j * ratioX), Mathf.RoundToInt(i * ratioY));
newTexture.SetPixel(j, i, color);
}
}
return newTexture;

}
/// <summary>
/// 转灰度
/// </summary>
/// <param name="tex"></param>
/// <returns></returns>
Texture2D Tex2Gray(Texture2D tex)
{
Color color;
for (int i = 0; i < tex.height; i++)
{
for (int j = 0; j < tex.width; j++)
{
color = tex.GetPixel(j, i);
float gray = (color.r * 30 + color.b * 59 + color.b * 11) / 100;
tex.SetPixel(j, i, new Color(gray, gray, gray));
}
}
return tex;
}
/// <summary>
/// 图片转矩阵
/// </summary>
/// <param name="tex"></param>
/// <returns></returns>
float[,] image2F(Texture2D tex)
{
int size = tex.width;
float[,] f = new float[size, size];
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
f[i, j] = tex.GetPixel(i, j).r;
}
}
float[,] A = creatDCTMatrix(size);
float[,] Aa = Transpose(A);
float[,] DCT = Multiply(Multiply(A, f), Aa);
getHash(DCT, averageDCT(DCT));

return f;
}
/// <summary>
/// 计算DCT矩阵
/// </summary>
/// <param name="size"></param>
/// <returns></returns>
float[,] creatDCTMatrix(int size)
{
//Debug.Log((float)Mathf.Cos(Mathf.PI));
float[,] ret = new float[size, size];
for (int x = 0; x < size; x++)
{
for (int y = 0; y < size; y++)
{
float angle = ((y + 0.5f) * Mathf.PI * x / size);
ret[x, y] = cfunc(x, size) * (float)Mathf.Cos(angle);
}
}
return ret;
}
float cfunc(int n, int size)
{
if (n == 0)
{
return Mathf.Sqrt(1f / size);
}
else
{
return Mathf.Sqrt(2f / size);
}

}
/// <summary>
/// 矩阵转置
/// </summary>
/// <param name="C"></param>
/// <returns></returns>
float[,] Transpose(float[,] C)
{
int size = C.GetLength(0);
float[,] ret = new float[size, size];
for (var x = 0; x < size; x++)
{
for (var y = 0; y < size; y++)
{
ret[y, x] = C[x, y];
}
}
return ret;
}
/// <summary>
/// 矩阵相乘
/// </summary>
/// <param name="C1"></param>
/// <param name="C2"></param>
/// <returns></returns>
float[,] Multiply(float[,] C1, float[,] C2)
{
int size = C1.GetLength(0);
float[,] ret = new float[size, size];
for (var y = 0; y < size; y++)
{
for (var x = 0; x < size; x++)
{
float sum1 = 0;
for (int k = 0; k < size; k++)
{
sum1 += C1[x, k] * C2[k, y];
}
ret[x, y] = sum1;
}
}
return ret;
}
/// <summary>
/// DCT均值
/// </summary>
/// <param name="dct"></param>
/// <returns></returns>
float averageDCT(float[,] dct)
{
int size = dct.GetLength(0);
float aver = 0;
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
aver += dct[i, j];
}
}
return aver / (size * size);
}
/// <summary>
/// 获取当前图片感知哈希值
/// </summary>
string getHash(float[,] dct, float aver)
{
string hash = string.Empty;
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
hash += (dct[i, j] >= aver ? "1" : "0");
}
}
// Debug.Log("哈希值添加中");
SimilarPhotoHash.Add(hash);
return hash;
}

/// <summary>
/// 计算两图片哈希值的汉明距离
/// </summary>
/// <param name="hash1"></param>
/// <param name="hash2"></param>
/// <returns></returns>
public float computeDistance(string hash1, string hash2)
{
float dis = 0;
for (int i = 0; i < hash1.Length; i++)
{
if (hash1[i] == hash2[i])
{
dis++;
}
}
// Debug.Log(dis / hash1.Length);
return dis / hash1.Length;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

unity图片相似度识别 的相关文章

  • Ajax 调用后使用 Django 模板呈现 JSON 对象

    我一直在尝试了解什么是最佳方法Ajax http en wikipedia org wiki Ajax 28programming 29 in Django http en wikipedia org wiki Django 28web f
  • Python 将列表中的字符串转换为数字

    我遇到了以下错误消息 以 10 为基数的 int 的文字无效 2 2 外部用单引号括起来 内部用双引号括起来 该数据位于primes列出使用print primes 0 样本数据在primes list 2 3 5 7 The primes
  • 对 Python DataFrame 进行子集化

    我正在从 R 过渡到 Python 我刚刚开始使用 Pandas 我有一个可以很好地子集化的 R 代码 k1 lt subset data Product p id Month lt mn Year yr select c Time Pro
  • 计算温度的偏导数(温度的水平平流)

    我想知道哪种方法计算x和y方向温度的偏导数 温度的水平平流 最正确 第二个代码使用温度 纬向风和经向风的数据矩阵 提取温度 T 纬向风分量 u 和经向风分量 v 的数据 import matplotlib pyplot as plt imp
  • 如何在 pygame 中聚焦光线或如何仅绘制窗口的某些圆形部分?

    对于这一点 如果您熟悉它 请想想 超级马里奥制造2 中嘘关卡中的黑暗模式 我试图在角色周围创建一个圆形聚光灯 这也将使圆圈范围内的任何内容都可见 例如部分站在地板上 敌人或场景中的任何其他物体 我的计划是首先绘制圆圈 聚光灯 然后绘制场景
  • SMTPAuthenticationError: (535, b'5.7.8 用户名和密码在 Django 生产中不被接受?

    我在 Heroku 上部署了一个 Django 应用程序 在其中一节中 我使用 SMTP Gmail 设置向用户发送电子邮件 当我在本地运行项目时 电子邮件发送成功 但在 Heroku 上部署的项目上却发送失败 我在 Stackoverfl
  • WTForms 中的小数字段舍入

    我有一个包含价格小数字段的表单 如下所示 from flask ext wtf import Form import wtforms from wtforms validators import DataRequired from deci
  • Python MySQL 模块

    我正在开发一个需要与 MySQL 数据库交互的 Web 应用程序 但我似乎找不到任何真正适合 Python 的模块 我特别寻找快速模块 能够处理数十万个连接 和查询 所有这些都在短时间内完成 而不会对速度产生重大影响 我想我的答案将是游戏领
  • Python argparse store_true 并将可选选项存储在一个参数中[重复]

    这个问题在这里已经有答案了 我需要识别是否单独给出参数或带有可选字符串或两者都没有 parser add argument options parser parse args so prog py arg 应该存储 进入选项 arg pro
  • Cython:为什么 size_t 比 int 快?

    更改某些 Cython 变量的类型int输入size t可以显着减少某些功能的时间 30 但我不明白为什么 例如 cimport numpy as cnp import numpy as np def sum int cnp int64 t
  • 不重复的Python组合

    我有一个数字列表 我想从中进行组合 如果我有清单 t 2 2 2 2 4 c list itertools combinations t 4 结果是 2 2 2 2 2 2 2 4 2 2 2 4 2 2 2 4 2 2 2 4 但我想得到
  • 对于 pygtk 应用程序来说,什么是好的嵌入式浏览器?

    我计划在我的 pygtk 应用程序中使用嵌入式浏览器 并且我正在 gtkmozembed 和 pywebkitgtk 之间进行辩论 两者之间有什么引人注目的区别吗 还有我不知道的第三种选择吗 应该注意的是 我不会使用它来访问网络上的内容 我
  • Python3.1中的视图?

    Python3 1中的视图到底是什么 它们的行为方式似乎与迭代器类似 并且它们也可以具体化为列表 迭代器和视图有何不同 据我所知 视图仍然附加到创建它的对象上 对原始对象的修改会影响视图 来自docs http docs python or
  • 尝试修复我的功能

    我正在开发一个函数 我必须返回一个元组 其中第一个参数是最大数字的 str 第二个参数是 int 列表 这是示例以及我为该函数编写的内容 投票 G G N G C G 1 3 0 1 您必须将最大值的位置映射到正确的一方 parties N
  • 监控单个文件

    我需要监控 使用watchdog http pythonhosted org watchdog index html 单个文件 而不是整个目录 避免监视整个目录的最佳方法是什么 我想this http pythonhosted org wa
  • 使用 Xcode 为 OS X Lion / Mountain Lion 编译 OpenCV (2.3.1+)

    谁能给我提供一些如何使用 Xcode 在 OS X Lion 上编译 OpenCV 2 3 1 的详细指南 我对此很生气 我得到了源代码 使用 cmake 创建 Xcode 模板并尝试构建它 但它失败并出现大约 200 个错误 提前致谢 多
  • 在字典理解中为 locals() 添加下标失败并出现 KeyError [重复]

    这个问题在这里已经有答案了 我对 Python 的奇怪行为感到困惑locals 基本上我想从字典中获取一个项目locals 在字典理解中 但它失败了 这是一个非常基本的事情 所以 gt gt gt foo 123 gt gt gt bar
  • 如何从python导入路径中删除当前目录

    我想使用 Mercurial 存储库hg本身 也就是说 我克隆了 Mercurialhttps www mercurial scm org repo hg https www mercurial scm org repo hg并想运行一些h
  • 连接运算符 + 或 ,

    var1 abc var2 xyz print literal var1 var2 literalabcxyz print literal var1 var2 literal abc xyz 除了带有 的自动空格之外 两者有什么区别 哪个通
  • Python pip 安装错误 [SSL: CERTIFICATE_VERIFY_FAILED]

    我已经尝试解决这个问题有一段时间了 由于某种原因 我陷入了 ssl 问题 并且不知道发生了什么 问题 我已经安装了 python2 7 和 easy install2 7 但是当尝试使用 easy install2 7 安装 pip 时 出

随机推荐

  • 28-React state提升、组件组合或继承

    Lifting State Up state提升 对于在React应用程序中更改的任何数据 应该有一个单一的数据源 通常 都是将state添加到需要渲染的组件 如果其他组件也需要它 您可以将其提升到最接近的共同祖先 而不是尝试在不同组件之间
  • PowerDesigner和MySql Workbench

    1 Power Designer 是Sybase公司的CASE工具集 使用它可以方便地对管理信息系统进行分析设计 他几乎包括了数据库模型设计的全过程 利用Power Designer可以制作数据流程图 概念数据模型 物理数据模型 还可以为数
  • statsmodels.tsa.stattools.adfuller()结构及用法详解

    statsmodels是一个Python模块 提供了大量统计模型的类和函数 主要功能有 regression Generalized least squares including weighted least squares and le
  • spring中@Qualifier注解的使用

    该注解可以使用在类上 属性上 参数上 方法上 1 当使用在类上的时候 如下代码 Qualifier注解里面填写的值就是当前类注入到IOC容器的bean的唯一标识 id 再使用到该Bean的地方就可以直接根据唯一标识 id 从IOC容器中获取
  • 图片归一化 img/255.0 和img/127.5 - 1对比

    在代码中看到图像的2种处理方式 img 255 0 img 127 5 1 第一种是对图像进行归一化 范围为 0 1 第二种也是对图像进行归一化 范围为 1 1 这两种只是归一化范围不同 为了直观的看出2种区别 分别对图像进行两种处理 从图
  • 题目 1056: 二级C语言-温度转换

    输入一个华氏温度 要求输出摄氏温度 公式为 保留两位小数 样例输入 40 00 样例输出 40 00 这道题很简单 数据代入公式就行 记得设置double或者float的浮点型 用于保留两位小数 对于保留小数 1是可以用iomanip的co
  • 汇编语言11之中断和int指令以及端口

    中断第处理外部突发事件的一个重要技术 硬件中断 外部中断 一般是外设发出的中断 内部中断 硬件出错或运算出错引起的中断 不可被屏蔽 软件中断 中断处理程序 CPU必须建立中断信息和中断处理程序之间的联系 中断信息中包含 1byte 中断类型
  • github fork别人的项目到自己仓库并进行贡献

    原文地址 转载请注明出处 https blog csdn net qq 34021712 article details 117260462 王赛超 目录 第一步 主账号上创建一个新的仓库 git demo 1 在主账号点击New创建一个新
  • React项目中关于onclick的学习

    onclick传递函数的格式 function e gt console log 我是一个函数 e
  • Nosql复习篇(三)

    Chapter3 5 1 Hadoop中的HDFS分布式文件系统解决了HBase的数据底层存储问题 实现了文件系统 数据分片 多副本容错 数据一致性等诸多功能 2 Hadoop最初的应用场景为搜索引擎的底层技术支持 3 核心组件 分布式文件
  • 慕课版软件质量保证与测试(第五章.课后作业)

    慕课版软件质量保证与测试 第五章 课后作业 一 选择题 二 填空题 三 判断题 四 解答题 一 选择题 1 软件测试是软件质量保证的重要手段 下述哪种测试是软件测试的最基础环节 A 集成测试 B 单元测试 C 系统测试 D 验收测试 参考答
  • 祝贺

    热烈祝贺合肥 NET俱乐部第二期技术沙龙圆满成功 感恩参与活动的每一位小伙伴 正是因为有你们才促成了这次聚会的成功 现对此次活动进行简单回顾并附上精彩的活动图片 每一位参与活动者名单 以及此次活动讲师分享的PPT供大家学习下载 作者 依乐祝
  • Python爬取旅游网站数据机票酒店价格对比分析

    本文将介绍如何使用Python爬虫从旅游网站上获取机票和酒店的价格数据 并实现价格对比分析 帮助你做出明智的旅行决策 我们提供了完善的方案和代码 让你能够轻松操作并获得实际价值 使用Python爬虫获取旅游网站上的机票和酒店价格数据 可以帮
  • CSS样式显示异常问题

    解决方法 对于服务端跳转 访问的viewUser jsp的CSS文件引入不需要要加 效果 当服务端访问viewUser jsp正常 但如果客户端地址栏范围 就还是CSS异常 不影响正常功能
  • python关掉警告信息(warning)

    在GCN normalization由于版本问题出现 除0 警告 RuntimeWarning divide by zero encountered in power d inv sqrt np power row sum 0 5 flat
  • flutter doctor --android-licenses报错解决方案

    C Users 32148 gt flutter doctor android licenses Flutter assets will be downloaded from https storage flutter io cn Make
  • 小米手环nfc门卡摸拟成功后不能开门_如何使用小米手环5 NFC版进行门卡模拟(如公司门禁卡、小区门禁卡、学校门禁卡等)?...

    由于本人最近购入了小米手环5 NFC版 所以对小米手环模拟门禁卡比较清楚一点 说一下用该手环模拟门禁的方法吧 我本人模拟的是学校公寓的门禁卡 不过学校的门禁卡是加密卡 可能操作起来稍微比不加密的门禁卡麻烦一点 因为不加密的门禁卡直接就可以模
  • PLSQL之动态SQL与异常

    1 动态 SQL 动态 SQL 是指在PL SQL程序执行时生成的 SQL 语句 编译程序对动态 SQL 不做处理 而是在程序运行时动态构造语句 对语句进行语法分析并执行 DDL 语句命令和会话控制语句不能在 PL SQL 中直接使用 但是
  • 微信公众号-测试号

    最近碰到了一个H5的公众号项目 需要openid来判断用户是否存在 视乎好多年都没碰这玩意了 完全忘记了 挨着看文档 一路各种坑 好不容易用测试号把本地测试环境调通了 环境不同可能使用的方法方式都不一样 微信测试号 需要微信扫码登陆 1 获
  • unity图片相似度识别

    public static SimilarPhoto Instance