资料介绍
第一步很简单,我们给魔方的一面拍照
第二步是创建图像的灰度副本并应用抗噪滤镜
第三步是使用 Canny Edge Detection 找到图像中的所有边缘
第四步是扩大边缘。我们想让它们更厚,因为这样更容易找到立方体的正方形。
第五步是找到膨胀图像中所有形状的轮廓。在下图中,蓝线是图像中的各种轮廓。红线是每个轮廓的近似形状。我们检查红线的所有形状以找到看起来像正方形的那些(有四个角,每个角大约为 90 度,等等)。如果我们认为轮廓是正方形,我们会将该轮廓显示为绿色。
第六步去除非方形轮廓
第七步是去除巨大的轮廓。上图中只有一个巨大的轮廓,它是围绕着外边缘的一个轮廓,几乎囊括了整个图像。
第八步是去除矮轮廓,这些轮廓太小而不能成为魔方。
第九步也是最后一步是确定立方体的大小、立方体的边界并移除立方体边界外的任何轮廓
我们对所有六个面执行上述步骤,并提取 5x5x5 魔方的所有 150 个正方形的 RGB 值。
软件 - 立方体状态的 RGB 值
我们现在需要获取所有 150 个方块的 RGB 值,并将每个方块减少为六种颜色(白色、黄色、红色、橙色、绿色和蓝色)中的一种。这将为我们提供计算立方体的解所需的立方体状态。
此图像显示从上一步图像中提取的每个方块的颜色。请注意,颜色有一些变化,并非所有白色方块都是完全相同的白色,橙色和红色有时看起来非常相似,等等。
为了将每个 RGB 值减少到六种颜色(白色、黄色等)中的一种,我们将对颜色进行排序。一旦对它们进行排序,我们就可以轻松地将它们分成六组,大小相等,并为每组分配一个颜色名称。
对人类来说,颜色分类很容易,但事实证明,对计算机来说,这是相当具有挑战性的。如果我们采用上面的颜色并简单地按照它们的 RGB 值对它们进行排序,我们将得到以下结果,您可以看到它根本不是按照您或我对这些颜色进行排序的顺序。
如果我们改为按 HSV(色调、饱和度、值)对它们进行排序,排序会更好但仍然不正确:
经过多次试验和错误后,我发现最好的方法是使用旅行推销员算法对颜色进行排序。你可以在这里看到我们可以将颜色分成六个干净的组。
旅行商问题是一个著名的计算机科学问题。它要解决的问题是销售员必须以最有效的顺序访问多个城市(根据总行进距离)。
有很多库和算法可以解决旅行商问题,我使用了tsp_solver python 库。我们在 3D 中绘制 150 个 RGB 值,并使用旅行推销员算法找到理想的访问顺序。旅行推销员找到的顺序提供了对颜色进行排序的顺序。在视觉上它看起来像这样:在这里,您可以看到按旅行推销员排序的所有边缘部分(5x5x5 有两组/边缘轨道)。我们可以很容易地将它们分成六组,并为每组分配一个颜色名称。
我们还通过 Traveling Salesman 对中心块和角块进行排序,并为每个方块分配六种颜色中的一种。您会注意到下图中颜色不再变化,所有白色方块完全相同,所有蓝色方块完全相同,等等。
到达这里需要做很多工作,但此时 CraneCuber 知道立方体的确切状态。这使我们能够计算出如何解决立方体的解决方案。
该软件是开源的,可在 github 上获取,网址为https://github.com/dwalton76/rubiks-color-resolver
软件 - 计算解决方案
基于软件的魔方解算器是一个很大的话题,学生们已经完成了算法的博士学位,可以单独解决 3x3x3。我将描述我最终是如何编写我的求解器的,以及它是如何在较高层次上工作的,但要深入细节将超出本文档的范围(并且本文档已经很长了)。
为什么?
当我开始使用 CraneCuber 时,我并没有打算编写自己的魔方求解器。有许多用于 2x2x2 和 3x3x3 立方体的开源解算器,但没有那么多的人为 4x4x4 和更大的立方体编写解算器。我能够找到一个 4x4x4 的开源求解器,但那是井枯竭的地方。没有任何用于 5x5x5、6x6x6 等的开源求解器 :( 我决定编写自己的求解器,并牢记几个目标:
它花了大约 5 个月的时间来解决 4x4x4 和 5x5x5 问题,又花了 5 个月的时间来实现 NxNxN!在过去的一年里,我继续致力于解决方案,我已经能够减少计算解决方案所需的时间以及它找到的解决方案的长度。
我有信心说它是世界上唯一的开源 NxNxN 求解器,我为此感到非常自豪 :) 该求解器可在 github 上找到,网址为https://github.com/dwalton76/rubiks-cube-NxNxN-solver
如何?
基于软件的魔方求解器的核心是一种称为迭代深化 A*的算法。您经常会看到它缩写为 IDA*(发音为 IDA-star)。
魔方解算器必须解决的问题是找到将魔方从打乱状态带到已解决状态的一系列移动。我们可以编写一个求解器,通过越来越长的移动序列进行蛮力广度优先搜索,直到找到解决方案,但我们会在它完成之前很久就老死了。我们需要一种更智能、更快速的方法来找到解决方案!
IDA* 是一种算法,允许求解器在搜索解决方案时消除大量移动序列。它不能很好地求解 5x5x5 立方体,但它确实可以很好地求解立方体的某些子集,例如求解中心。一旦解决了中心问题,我们就可以再次使用 IDA* 来解决边缘问题。这些被称为“阶段”。我们可以将求解立方体的问题分解为多个阶段,然后使用 IDA* 求解每个阶段。立方体越大,求解立方体所需的阶段就越多。大多数 3x3x3 求解器使用两个阶段,而我的求解器使用七个阶段来求解 5x5x5。
这是对基于软件的魔方解算器如何工作的非常简短的介绍。我写了一篇关于这个主题的冗长博客文章,如果您对立方体求解器的工作原理感兴趣,可以访问http://programmablebrick.blogspot.com/2017/07/rubiks-cube-solver.html 。
结论
我希望你喜欢我的项目。我真的很喜欢它的工作 :) 对于这么长的关于它如何工作的文章,我深表歉意。项目的软件方面涉及太多,我觉得我应该给出一个深入的解释。
- 魔方解算机器人开源分享
- MPU6050姿态融合解算(DMP)
- 华秋PCB设计专业分析软件-智能阻抗计算和反算 20次下载
- 基于空三解算技术的树障测量技术综述 7次下载
- 基于互补滤波器的四旋翼飞行器姿态解算 3次下载
- 如何使用互补滤波器进行四旋翼飞行器的姿态解算资料说明 1次下载
- 四轴飞行器姿态解算原理以及算法程序实现的资料分析 1次下载
- 基于MPU6050的四轴硬件姿态解算研究 7次下载
- 基于Runge-Kutta算法的无人机姿态角解算 6次下载
- 基于STM32的单炮火控解算系统 3次下载
- 姿态解算理解 2次下载
- 魔方教程 3次下载
- 基于SOPC技术的导航解算系统 32次下载
- 双DSP结构的捷联控制与解算系统设计
- 酷比魔方/Cube P1000播放器电路图-原理图
- 算力服务器为什么选择GPU 244次阅读
- 基线解算所需的起算点应按何种顺序采用 169次阅读
- 系统解复位的特殊处理 740次阅读
- 算力简史:人类算力的演进过程 1085次阅读
- SuperCAT:软件定义EtherCAT运动控制器 667次阅读
- 测量4通道解串器上的偏斜裕量 806次阅读
- EM解算器的实际应用 907次阅读
- 基于RT-Thread开发电子魔方实现功能 1320次阅读
- 串行解串器如何构成另一种物理层器件 1900次阅读
- 串行解串器的关键技术及应用分析 6424次阅读
- 基于H∞混合灵敏度解耦控制器实现BTT导弹自动驾驶仪的解耦设计 1037次阅读
- 一种解偶人脸属性与化妆属性的妆容解偶迁移器 3771次阅读
- mpu6050姿态解算原理_mpu6050姿态解算程序 4.3w次阅读
- mpu6050姿态解算原理分析及程序设计 4.2w次阅读
- MAX9240 25位GMSL解串器 1849次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多