N维码算法的探索(二),16色的16进制编码表达汉字的试探

news2025/4/17 7:20:04

前些天写了一篇《N维码算法的探索》,是利用颜色像素对n维码算法扩展的思考。读者非常有限,能够理解的可能需专业人士了。

这种研究的意义何在?不知道。用上了就是有用,用不上也就被历史淘汰了。普通人通常的逻辑是:既然有二维码用着,想太多就是别人的事情。

最近几年学编程,涉及的算法往往都是国外的,一堆外国人名字。而国内的往往是想办法找毛病、补bug,就算发展了。那么这样下去,只能跟在别人屁股后面跑。未来AI的比拼,最终的决胜在于算法的领先。

因此这种“没用”的研究和探索还是有意义的。成功的算法,是一堆失败的算法中脱颖而出的,笔者也就先凑个数。错误的雷达图数理不也用了几十年了,不差再多点算法。

四色问题

不研究,肯定没问题;一研究,就一堆问题了。

四色问题又称四色猜想,是世界近代三大数学难题之一。四色问题的内容是:“任何一张地图只用四种颜色就能使具有共同边界的国家着上不同的颜色。”用数学语言表示,即“将平面任意地细分为不相重迭的区域,每一个区域总可以用1,2,3,4这四个数字之一来标记,而不会使相邻的两个区域得到相同的数字。”

这问题也是数学都头疼的问题,据说人工证明尚未解决,但是电脑利用穷举法已经证明。也就是四色问题,现在可以当四色定理用了。

考虑n维码,那么先从简单的研究起,先搞4色的四维码试一试。前文已经说明,四色采用“白红绿蓝”这四种最容易识别的四纯色,而像素采用16进制的四像素的二进制表达方式。(这部分在我这已经过期,不再论述,下文将直接表达16色结果。)

既然中国的太空仓已经使用汉字标识,那么笔者也直接用中文说明。

unicode16进制编码

先看看16进制编码的结果,再看研究过程和出现的问题。
中文:

水调歌头
宋朝苏轼
丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。
明月几时有,把酒问青天。
不知天上宫阙,今夕是何年。
我欲乘风归去,又恐琼楼玉宇,高处不胜寒。
起舞弄清影,何似在人间。
转朱阁,低绮户,照无眠。
不应有恨,何事长向别时圆?
人有悲欢离合,月有阴晴圆缺,此事古难全。
但愿人长久,千里共婵娟。

16进制unicode编码显示结果:
\u6c34\u8c03\u6b4c\u5934

\u5b8b\u671d\u82cf\u8f7c

\u4e19\u8fb0\u4e2d\u79cb\uff0c\u6b22\u996e\u8fbe\u65e6\uff0c\u5927\u9189\uff0c\u4f5c\u6b64\u7bc7\uff0c\u517c\u6000\u5b50\u7531\u3002

\u660e\u6708\u51e0\u65f6\u6709\uff0c\u628a\u9152\u95ee\u9752\u5929\u3002

\u4e0d\u77e5\u5929\u4e0a\u5bab\u9619\uff0c\u4eca\u5915\u662f\u4f55\u5e74\u3002

\u6211\u6b32\u4e58\u98ce\u5f52\u53bb\uff0c\u53c8\u6050\u743c\u697c\u7389\u5b87\uff0c\u9ad8\u5904\u4e0d\u80dc\u5bd2\u3002

\u8d77\u821e\u5f04\u6e05\u5f71\uff0c\u4f55\u4f3c\u5728\u4eba\u95f4\u3002

\u8f6c\u6731\u9601\uff0c\u4f4e\u7eee\u6237\uff0c\u7167\u65e0\u7720\u3002

\u4e0d\u5e94\u6709\u6068\uff0c\u4f55\u4e8b\u957f\u5411\u522b\u65f6\u5706\uff1f

\u4eba\u6709\u60b2\u6b22\u79bb\u5408\uff0c\u6708\u6709\u9634\u6674\u5706\u7f3a\uff0c\u6b64\u4e8b\u53e4\u96be\u5168\u3002

\u4f46\u613f\u4eba\u957f\u4e45\uff0c\u5343\u91cc\u5171\u5a75\u5a1f\u3002

我们可以发现,每个汉字前面都有个\u,这是unicode编码汉字显示的特征。汉字在其中占用4个16进制字符空间,也就是这个编码库中汉字有256*256=65536,通常我们只会用到3000-5000个汉字。也就是够用了。

去掉\u的16进制编码显示:

6c348c036b4c5934

5b8b671d82cf8f7c

4e198fb04e2d79cbff0c6b22996e8fbe65e6ff0c59279189ff0c4f5c6b647bc7ff0c517c60005b5075313002

660e670851e065f66709ff0c628a915295ee975259293002

4e0d77e559294e0a5bab9619ff0c4eca5915662f4f555e743002

62116b324e5898ce5f5253bbff0c53c86050743c697c73895b87ff0c9ad859044e0d80dc5bd23002

8d77821e5f046e055f71ff0c4f554f3c57284eba95f43002

8f6c67319601ff0c4f4e7eee6237ff0c716765e077203002

4e0d5e9467096068ff0c4f554e8b957f5411522b65f65706ff1f

4eba670960b26b2279bb5408ff0c670867099634667457067f3aff0c6b644e8b53e496be51683002

4f46613f4eba957f4e45ff0c534391cc51715a755a1f3002

这会给人一个字的感觉,“乱”。但是电脑并不这么认为,它认为:这是分毫不差的正确。

16色编码颜色的定义
颜色与16进制数字对应
这是颜色对应16进制数字的图。颜色可以更改,主要要求就是色差要大,易识别,不易混淆。这为后续rgb颜色的识别编程做准备。

其中的16进制的2与A的颜色,在这个图中色差较大,但在实际使用中,易混淆,笔者将A的rgb值修改了。另外,5与D的色差也较小,这个问题留着,以表达问题。读者可以自行修改其rgb值。当然,修改的原则,重点是考虑后续识别rgb颜色过程中编程的简洁性与准确性、容错性。

有色像素反向识别的技术问题

利用python,现在可对任意一像素点进行rgb颜色的反向识别,但是,由于污损、破坏、或者亮度等因素,识别的rgb结果的参数会有小误差。而上述方法的使用,要求100%的反向识别准确率。

那么采用的算法策略就是:主动增加30的像素识别误差。当识别值在255-225之间时,就确定其为255;当识别值在97-157之间时,就确定其为127;当识别值为30-0之间,就确定其为0。

这也是笔者在选择颜色的时候,特别注意rgb参数的极限意义的原因。个别颜色不具有上述特征,如上文刚刚说到的改动的A,要单独识别处理。因此,改变颜色参数,要特别注意上述要求。

下面是修改后的rgb编码:

0,rgb(0,0,0),linethick5;//0

1,rgb(0,0,255),linethick5;//1

2,rgb(0,255,0),linethick5;//2

3,rgb(0,255,255),linethick5;//3

4,rgb(255,0,0),linethick5;//4

5,rgb(255,0,255),linethick5;//5

6,rgb(255,255,0),linethick5;//6

7,rgb(255,255,255),linethick5;//7

10,rgb(255,127,0),linethick5;//8

12,rgb(127,255,127),linethick5;//9

11,rgb(0,87,55),linethick5;//A,已修改为墨绿色

13,rgb(0,127,127),linethick5;//B

14,rgb(127,0,255),linethick5;//C

15,rgb(255,127,255),linethick5;//D

16,rgb(127,127,0),linethick5;//E

17,rgb(127,127,127),linethick5;//F

这里主要引入了0、255之间的中间值127。如果仅仅使用0、255编码,将只有23=8种颜色组合;增加了127,会有33=27种组合,选择其中色彩易识别的8种,修改了一种。

这样,任何一个16进制的编码都有一个对应的显示颜色。

现在假设用像素的方式,用类似二维码的方式显示汉字:(从左向右显示,这是现在中文书写习惯方向。)

汉字16进制编码与颜色对应示意图
汉字16进制编码利用颜色的实际显示结果

上图为了显示过程,保留了像素块中的16进制数字,而下图,去掉了数字,电脑用不着。这就是利用这种16进制像素块方法显示汉字的最终结果。

青埂峰上的一块大石头刻上这种有颜色的像素块,刻出《石头记》,因此是有可行性的。而这个全过程,只需输入汉字,彩色像素结果就出来了。想读的时候,反向识别就可以了。

这种16进制像素表达方式的优缺点:

1、如果颜色进一步增多,例如64、256种颜色甚至更多,能够起到一定的压缩作用。(但是,要考虑识别的时候容易出错。)

2、如果仅仅采用主色(rgb值0、255相关的八种颜色),有利于反向识别过程中的纠错判断。但是,像素块使用数量会比这种方法增加一倍。

3、整个书写过程以及反向识别过程可编程实现,功能等同于二维码或信息码之类的。

4、颜色编码具有随意性,可个性修改;只有定为标准,才可通用。

一些算法,谁制定了编码标准,就相当于拿到了技术的话语权,笔者搞不定这种事情,只说明算法原理的过程。就像64进制编码,外国采用26个字母大小写再加上几个符号,来解决问题,看着很不爽。因为这些字符和符号的编码在基础的ascii编码库中,占用内存最小。如果用64卦编码64进制,会非常直观好看。前提是需要把64卦弄到ascii编码库中。因此,制定标准是技术话语权的关键。有时候,并不是已经成为标准的编码就是最优秀的,但前提是这标准被技术性的广泛认可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/109597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

js获取某一时间到现在的总时间以及svg图标统一管理方法的封装

目录 js获取某一时间到现在的总时间方法封装 一、需求 二、方法 三、使用 js封装一个svg图标管理方法 一、需求 二、实现 三、使用 js获取某一时间到现在的总时间方法封装 一、需求 在做一些信息展示的时候,我们需要展示各种时间,有时是准确的创…

攻防世界-宜兴网信办-inget

题目 访问题目路径 这个题目的意思就是请输入ID,然后尝试绕过,那应该就是SQL注入,但是呢,我是个懒狗,我直接跑sqlmap 先跑数据库名 sqlmap "http://61.147.171.105:51322/?id1" --current-db 爆表 sqlma…

迅为3A5000开发板龙芯自主指令集从里到外100%全国产设计方案

迅为3A5000开发板龙芯处理器自主指令集架构从里到外100%全国产设计方案 iTOP-3A5000 开发板采用全国产龙芯3A5000处理器,基于龙芯自主指令系统(LoongArch)的LA464微结构,并进一步提升频率,降低功耗,优化性能…

低代码多分支协同开发的建设与实践

作者:黄也(胖丁) 引言 随着低代码的普及,在低代码平台上构建企业级应用逐渐成为生产趋势。同时,随着低代码技术的提升,越来越多的复杂应用在低代码平台中完成。在其研发生命周期中,低代码开发者就会面临多人协作、并…

卷积神经网络 CNN 基础概念

目录 一:卷积神经网络 二:局部感受野 三:卷积层 四:池化层 五:激活层 六:全连接层 七:卷积神经网络算法过程 一:卷积神经网络 卷积神经网络(Convolutional Neural Networks,C…

nor flash调试与使用总结

最近项目中使用到norflash,总结一下学习与使用经验 文章目录一、Flash基本概念存储器介绍与Flash在其中定位---非易失存储器类别中嵌入式领域常见设备Flash的典型分类---NorFlash(贵/容量小/读快写慢)与NandFlash(便宜/容量大/读慢…

Zookeeper 4 Zookeeper JavaAPI 操作 4.9 模拟12306 售票案例

Zookeeper 【黑马程序员Zookeeper视频教程,快速入门zookeeper技术】 文章目录Zookeeper4 Zookeeper JavaAPI 操作4.9 模拟12306 售票案例4.9.1 Curator 实现分布式锁 API4.9.2 分布式锁案例 - 模拟12306 售票4 Zookeeper JavaAPI 操作 4.9 模拟12306 售票案例 4.…

企业经常会问到的软件测试面试题及答案,一定要好好记住

相信对于很多软件测试新手来说,技术项目的面试是十分让人头疼的,生怕没回答得好,就会跟这个offer失之交臂,因此,今天,我以身边朋友面试遇到过的几个问题以及刷过的软件测试题库柠檬班中的压中的题目&#x…

Maven 项目模板

Maven 项目模板 Maven 使用 archetype(原型) 来创建自定义的项目结构,形成 Maven 项目模板。 在前面章节我们学到 Maven 使用下面的命令来快速创建 java 项目: mvn archetype:generate 什么是 archetype? archetype 也就是原型&#xff…

终于有人把性能优化讲清楚了!阿里架构师推荐的Java性能权威指南

Java给大部分人的感觉就是慢,有严重的性能问题。其实程序慢的问题,与语言无关,与Java无关。Java应用的性能优化也是一个老生常谈的话题,但是只要我们深入的了解性能调优方法,走遍天下都不怕! 大多数开发人…

mac系统M1pro芯片安装VMware Fusion虚拟机win11操作系统(原创详细版)

VMware22年11月份推出Fusion 13,这是Fusion虚拟软件的最新更新。它允许Mac用户操作虚拟机来运行非macOS操作系统,如Windows 11。 有了Fusion 13,英特尔和苹果芯片Mac用户可以访问Windows 11虚拟机。英特尔Mac提供对Windows 11的全面支持&…

webpack 构建脚手架

前言 1. 构建项目 2. 局部安装 3. webpack.config.js 4. 打包 css 文件 5. 打包 less 文件 6. 打包 vue 文件 7. loader 和 plugin 区别 8. 添加版权的插件 9. html-webpack-plugin 打包 html 的插件 10. 压缩文件 11. webpack-dev-server 搭建本地服务器 前言 本文记录 webpa…

基于鸽群算法改进的DELM预测 -附代码

鸽群算法改进的深度极限学习机DELM的回归预测 文章目录鸽群算法改进的深度极限学习机DELM的回归预测1.ELM原理2.深度极限学习机(DELM)原理3.鸽群算法4.鸽群算法改进DELM5.实验结果6.参考文献7.Matlab代码1.ELM原理 ELM基础原理请参考:https:…

自学编程的人成千上万,为什么坚持下来的没几个?

在互联网职位薪资水涨船高的现下,越来越多的人都对此跃跃欲试,想要通过学习进入这个新兴的朝阳行业。但或因为现下工作,或因为各种压力,多数人并不能果断投入,自学成了常见的学习方式! 但是据数据显示&…

PDF翻译怎么操作?教你几个PDF翻译的技巧

当你在查阅国外资料的时候,有没有发现很多资料都是以PDF格式来呈现的?毕竟,PDF文件方便查阅也不易出现格式混乱的状态。但是,这对于英语基础不好的小伙伴就有一定的影响了,而且如果一字一字去翻译解释,那也…

linux安装php环境

linux安装php环境首先,打开终端并更新系统的软件包列表。运行以下命令然后安装 PHP。运行以下命令安装完成后,可以使用以下命令检查 PHP 的版本:如果您需要使用 PHP 的扩展,可以使用以下命令安装它们:例如,…

[2]MQTT基础知识

MQTT(消息队列遥测传输)是一个客户端服务端架构的发布/订阅模式的消息传输协议。 MQTT协议最初版本是在1999年建立的。该协议的发明人是的Andy Stanford-Clark和Arlen Nipper。 MQTT协议是当今世界上最受欢迎的物联网协议,广泛应用于车联网、智能家居、即时聊天应用…

自学Python学习经验分享

学编程语言有个小秘诀,直接上项目就是干,做完之后你就是Pythoner了。 不要怕没基础,边做边学边查,进步很快的。 因人而异,一周或一个月就能基本入门,当然也需要你百分百的投入。 以前我也觉得收集资料、钻…

一个新工具引发IT巨变:程序员在转行,不懂编程的人却成了程序员

编程一定需要代码吗?我看未必。 科技进步可谓日新月异,无代码开发在近几年,俨然被越来越多的人所熟知。这是一场解放码农的运动,让不懂编程的人也能进行软件开发。 我在发文前,看到了一则信息,更加坚定了…

【MySQL】MySQL初级笔记

MySQL1、初识MySQL(了解)1.1、为什么学习数据库1.2、什么是数据库1.3、什么是DBMS1.4、MySQL简介1.7 连接数据库1.8 基本操作2、操作数据库2.1、结构化查询语句分类2.2、数据库操作2.3、数据值和列类型数值类型字符串类型日期和时间型数值类型NULL值2.4、数据字段属性(重点)UnS…