資料介紹
第一步很簡單,我們給魔方的一面拍照

?
第二步是創(chuàng)建圖像的灰度副本并應(yīng)用抗噪濾鏡

?
第三步是使用 Canny Edge Detection 找到圖像中的所有邊緣

?
第四步是擴(kuò)大邊緣。我們想讓它們更厚,因?yàn)檫@樣更容易找到立方體的正方形。

?
第五步是找到膨脹圖像中所有形狀的輪廓。在下圖中,藍(lán)線是圖像中的各種輪廓。紅線是每個輪廓的近似形狀。我們檢查紅線的所有形狀以找到看起來像正方形的那些(有四個角,每個角大約為 90 度,等等)。如果我們認(rèn)為輪廓是正方形,我們會將該輪廓顯示為綠色。

?
第六步去除非方形輪廓

?
第七步是去除巨大的輪廓。上圖中只有一個巨大的輪廓,它是圍繞著外邊緣的一個輪廓,幾乎囊括了整個圖像。

?
第八步是去除矮輪廓,這些輪廓太小而不能成為魔方。

?
第九步也是最后一步是確定立方體的大小、立方體的邊界并移除立方體邊界外的任何輪廓

我們對所有六個面執(zhí)行上述步驟,并提取 5x5x5 魔方的所有 150 個正方形的 RGB 值。
?
軟件 - 立方體狀態(tài)的 RGB 值
我們現(xiàn)在需要獲取所有 150 個方塊的 RGB 值,并將每個方塊減少為六種顏色(白色、黃色、紅色、橙色、綠色和藍(lán)色)中的一種。這將為我們提供計算立方體的解所需的立方體狀態(tài)。
此圖像顯示從上一步圖像中提取的每個方塊的顏色。請注意,顏色有一些變化,并非所有白色方塊都是完全相同的白色,橙色和紅色有時看起來非常相似,等等。

為了將每個 RGB 值減少到六種顏色(白色、黃色等)中的一種,我們將對顏色進(jìn)行排序。一旦對它們進(jìn)行排序,我們就可以輕松地將它們分成六組,大小相等,并為每組分配一個顏色名稱。
對人類來說,顏色分類很容易,但事實(shí)證明,對計算機(jī)來說,這是相當(dāng)具有挑戰(zhàn)性的。如果我們采用上面的顏色并簡單地按照它們的 RGB 值對它們進(jìn)行排序,我們將得到以下結(jié)果,您可以看到它根本不是按照您或我對這些顏色進(jìn)行排序的順序。

如果我們改為按 HSV(色調(diào)、飽和度、值)對它們進(jìn)行排序,排序會更好但仍然不正確:

經(jīng)過多次試驗(yàn)和錯誤后,我發(fā)現(xiàn)最好的方法是使用旅行推銷員算法對顏色進(jìn)行排序。你可以在這里看到我們可以將顏色分成六個干凈的組。

旅行商問題是一個著名的計算機(jī)科學(xué)問題。它要解決的問題是銷售員必須以最有效的順序訪問多個城市(根據(jù)總行進(jìn)距離)。

?
有很多庫和算法可以解決旅行商問題,我使用了tsp_solver python 庫。我們在 3D 中繪制 150 個 RGB 值,并使用旅行推銷員算法找到理想的訪問順序。旅行推銷員找到的順序提供了對顏色進(jìn)行排序的順序。在視覺上它看起來像這樣:在這里,您可以看到按旅行推銷員排序的所有邊緣部分(5x5x5 有兩組/邊緣軌道)。我們可以很容易地將它們分成六組,并為每組分配一個顏色名稱。

我們還通過 Traveling Salesman 對中心塊和角塊進(jìn)行排序,并為每個方塊分配六種顏色中的一種。您會注意到下圖中顏色不再變化,所有白色方塊完全相同,所有藍(lán)色方塊完全相同,等等。

到達(dá)這里需要做很多工作,但此時 CraneCuber 知道立方體的確切狀態(tài)。這使我們能夠計算出如何解決立方體的解決方案。
該軟件是開源的,可在 github 上獲取,網(wǎng)址為https://github.com/dwalton76/rubiks-color-resolver
軟件 - 計算解決方案
基于軟件的魔方解算器是一個很大的話題,學(xué)生們已經(jīng)完成了算法的博士學(xué)位,可以單獨(dú)解決 3x3x3。我將描述我最終是如何編寫我的求解器的,以及它是如何在較高層次上工作的,但要深入細(xì)節(jié)將超出本文檔的范圍(并且本文檔已經(jīng)很長了)。
為什么?
當(dāng)我開始使用 CraneCuber 時,我并沒有打算編寫自己的魔方求解器。有許多用于 2x2x2 和 3x3x3 立方體的開源解算器,但沒有那么多的人為 4x4x4 和更大的立方體編寫解算器。我能夠找到一個 4x4x4 的開源求解器,但那是井枯竭的地方。沒有任何用于 5x5x5、6x6x6 等的開源求解器 :( 我決定編寫自己的求解器,并牢記幾個目標(biāo):
- 它將是開源的
- 它將是一個 NxNxN 求解器,這意味著它可以求解任何大小的立方體
- 它將能夠在最小的硬件上運(yùn)行,例如 Raspberry Pi
它花了大約 5 個月的時間來解決 4x4x4 和 5x5x5 問題,又花了 5 個月的時間來實(shí)現(xiàn) NxNxN!在過去的一年里,我繼續(xù)致力于解決方案,我已經(jīng)能夠減少計算解決方案所需的時間以及它找到的解決方案的長度。
我有信心說它是世界上唯一的開源 NxNxN 求解器,我為此感到非常自豪 :) 該求解器可在 github 上找到,網(wǎng)址為https://github.com/dwalton76/rubiks-cube-NxNxN-solver
如何?
基于軟件的魔方求解器的核心是一種稱為迭代深化 A*的算法。您經(jīng)常會看到它縮寫為 IDA*(發(fā)音為 IDA-star)。
魔方解算器必須解決的問題是找到將魔方從打亂狀態(tài)帶到??已解決狀態(tài)的一系列移動。我們可以編寫一個求解器,通過越來越長的移動序列進(jìn)行蠻力廣度優(yōu)先搜索,直到找到解決方案,但我們會在它完成之前很久就老死了。我們需要一種更智能、更快速的方法來找到解決方案!
IDA* 是一種算法,允許求解器在搜索解決方案時消除大量移動序列。它不能很好地求解 5x5x5 立方體,但它確實(shí)可以很好地求解立方體的某些子集,例如求解中心。一旦解決了中心問題,我們就可以再次使用 IDA* 來解決邊緣問題。這些被稱為“階段”。我們可以將求解立方體的問題分解為多個階段,然后使用 IDA* 求解每個階段。立方體越大,求解立方體所需的階段就越多。大多數(shù) 3x3x3 求解器使用兩個階段,而我的求解器使用七個階段來求解 5x5x5。
這是對基于軟件的魔方解算器如何工作的非常簡短的介紹。我寫了一篇關(guān)于這個主題的冗長博客文章,如果您對立方體求解器的工作原理感興趣,可以訪問http://programmablebrick.blogspot.com/2017/07/rubiks-cube-solver.html 。
結(jié)論
我希望你喜歡我的項目。我真的很喜歡它的工作 :) 對于這么長的關(guān)于它如何工作的文章,我深表歉意。項目的軟件方面涉及太多,我覺得我應(yīng)該給出一個深入的解釋。
- 魔方解算機(jī)器人開源分享
- MPU6050姿態(tài)融合解算(DMP)
- 華秋PCB設(shè)計專業(yè)分析軟件-智能阻抗計算和反算 21次下載
- 基于空三解算技術(shù)的樹障測量技術(shù)綜述 10次下載
- 基于互補(bǔ)濾波器的四旋翼飛行器姿態(tài)解算 3次下載
- 如何使用互補(bǔ)濾波器進(jìn)行四旋翼飛行器的姿態(tài)解算資料說明 1次下載
- 四軸飛行器姿態(tài)解算原理以及算法程序?qū)崿F(xiàn)的資料分析 1次下載
- 基于MPU6050的四軸硬件姿態(tài)解算研究 7次下載
- 基于Runge-Kutta算法的無人機(jī)姿態(tài)角解算 6次下載
- 基于STM32的單炮火控解算系統(tǒng) 3次下載
- 姿態(tài)解算理解 2次下載
- 魔方教程 3次下載
- 基于SOPC技術(shù)的導(dǎo)航解算系統(tǒng) 32次下載
- 雙DSP結(jié)構(gòu)的捷聯(lián)控制與解算系統(tǒng)設(shè)計
- 酷比魔方/Cube P1000播放器電路圖-原理圖
- 使用OpenVINO 2024.4在算力魔方上部署Llama-3.2-1B-Instruct模型 658次閱讀
- 熱解粒子探測器與什么相似 404次閱讀
- 熱解粒子式電氣火災(zāi)監(jiān)控探測器原理 992次閱讀
- 熱解粒子探測器干嘛用的 519次閱讀
- 熱解粒子探測器測試條件有哪些 366次閱讀
- 基線解算所需的起算點(diǎn)應(yīng)按何種順序采用 339次閱讀
- 算力簡史:人類算力的演進(jìn)過程 1363次閱讀
- SuperCAT:軟件定義EtherCAT運(yùn)動控制器 878次閱讀
- 測量4通道解串器上的偏斜裕量 969次閱讀
- EM解算器的實(shí)際應(yīng)用 1106次閱讀
- 基于RT-Thread開發(fā)電子魔方實(shí)現(xiàn)功能 1486次閱讀
- 串行解串器如何構(gòu)成另一種物理層器件 2079次閱讀
- 一種解偶人臉屬性與化妝屬性的妝容解偶遷移器 3933次閱讀
- mpu6050姿態(tài)解算原理_mpu6050姿態(tài)解算程序 4.3w次閱讀
- mpu6050姿態(tài)解算原理分析及程序設(shè)計 4.2w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動電路設(shè)計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評論