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

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

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

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

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

?
第六步去除非方形輪廓

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

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

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

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

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

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

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

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

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

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

到達(dá)這里需要做很多工作,但此時(shí) CraneCuber 知道立方體的確切狀態(tài)。這使我們能夠計(jì)算出如何解決立方體的解決方案。
該軟件是開源的,可在 github 上獲取,網(wǎng)址為https://github.com/dwalton76/rubiks-color-resolver
軟件 - 計(jì)算解決方案
基于軟件的魔方解算器是一個(gè)很大的話題,學(xué)生們已經(jīng)完成了算法的博士學(xué)位,可以單獨(dú)解決 3x3x3。我將描述我最終是如何編寫我的求解器的,以及它是如何在較高層次上工作的,但要深入細(xì)節(jié)將超出本文檔的范圍(并且本文檔已經(jīng)很長(zhǎng)了)。
為什么?
當(dāng)我開始使用 CraneCuber 時(shí),我并沒有打算編寫自己的魔方求解器。有許多用于 2x2x2 和 3x3x3 立方體的開源解算器,但沒有那么多的人為 4x4x4 和更大的立方體編寫解算器。我能夠找到一個(gè) 4x4x4 的開源求解器,但那是井枯竭的地方。沒有任何用于 5x5x5、6x6x6 等的開源求解器 :( 我決定編寫自己的求解器,并牢記幾個(gè)目標(biāo):
- 它將是開源的
- 它將是一個(gè) NxNxN 求解器,這意味著它可以求解任何大小的立方體
- 它將能夠在最小的硬件上運(yùn)行,例如 Raspberry Pi
它花了大約 5 個(gè)月的時(shí)間來解決 4x4x4 和 5x5x5 問題,又花了 5 個(gè)月的時(shí)間來實(shí)現(xiàn) NxNxN!在過去的一年里,我繼續(xù)致力于解決方案,我已經(jīng)能夠減少計(jì)算解決方案所需的時(shí)間以及它找到的解決方案的長(zhǎng)度。
我有信心說它是世界上唯一的開源 NxNxN 求解器,我為此感到非常自豪 :) 該求解器可在 github 上找到,網(wǎng)址為https://github.com/dwalton76/rubiks-cube-NxNxN-solver
如何?
基于軟件的魔方求解器的核心是一種稱為迭代深化 A*的算法。您經(jīng)常會(huì)看到它縮寫為 IDA*(發(fā)音為 IDA-star)。
魔方解算器必須解決的問題是找到將魔方從打亂狀態(tài)帶到??已解決狀態(tài)的一系列移動(dòng)。我們可以編寫一個(gè)求解器,通過越來越長(zhǎng)的移動(dòng)序列進(jìn)行蠻力廣度優(yōu)先搜索,直到找到解決方案,但我們會(huì)在它完成之前很久就老死了。我們需要一種更智能、更快速的方法來找到解決方案!
IDA* 是一種算法,允許求解器在搜索解決方案時(shí)消除大量移動(dòng)序列。它不能很好地求解 5x5x5 立方體,但它確實(shí)可以很好地求解立方體的某些子集,例如求解中心。一旦解決了中心問題,我們就可以再次使用 IDA* 來解決邊緣問題。這些被稱為“階段”。我們可以將求解立方體的問題分解為多個(gè)階段,然后使用 IDA* 求解每個(gè)階段。立方體越大,求解立方體所需的階段就越多。大多數(shù) 3x3x3 求解器使用兩個(gè)階段,而我的求解器使用七個(gè)階段來求解 5x5x5。
這是對(duì)基于軟件的魔方解算器如何工作的非常簡(jiǎn)短的介紹。我寫了一篇關(guān)于這個(gè)主題的冗長(zhǎng)博客文章,如果您對(duì)立方體求解器的工作原理感興趣,可以訪問http://programmablebrick.blogspot.com/2017/07/rubiks-cube-solver.html 。
結(jié)論
我希望你喜歡我的項(xiàng)目。我真的很喜歡它的工作 :) 對(duì)于這么長(zhǎng)的關(guān)于它如何工作的文章,我深表歉意。項(xiàng)目的軟件方面涉及太多,我覺得我應(yīng)該給出一個(gè)深入的解釋。
- 魔方解算機(jī)器人開源分享
- MPU6050姿態(tài)融合解算(DMP)
- 華秋PCB設(shè)計(jì)專業(yè)分析軟件-智能阻抗計(jì)算和反算 21次下載
- 基于空三解算技術(shù)的樹障測(cè)量技術(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è)計(jì)
- 酷比魔方/Cube P1000播放器電路圖-原理圖
- 使用OpenVINO 2024.4在算力魔方上部署Llama-3.2-1B-Instruct模型 658次閱讀
- 熱解粒子探測(cè)器與什么相似 404次閱讀
- 熱解粒子式電氣火災(zāi)監(jiān)控探測(cè)器原理 992次閱讀
- 熱解粒子探測(cè)器干嘛用的 519次閱讀
- 熱解粒子探測(cè)器測(cè)試條件有哪些 366次閱讀
- 基線解算所需的起算點(diǎn)應(yīng)按何種順序采用 339次閱讀
- 算力簡(jiǎn)史:人類算力的演進(jìn)過程 1363次閱讀
- SuperCAT:軟件定義EtherCAT運(yùn)動(dòng)控制器 878次閱讀
- 測(cè)量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è)計(jì) 4.2w次閱讀
下載排行
本周
- 1PFC電路與BOOST電路設(shè)計(jì)實(shí)例分享
- 1.83 MB | 12次下載 | 4 積分
- 2世平基于靈動(dòng)微 SPIN560C 的低壓無刷電機(jī)應(yīng)用方案
- 10.93 MB | 11次下載 | 免費(fèi)
- 3電源測(cè)試報(bào)告-基于 國(guó)民技術(shù) N32L406 和杰華特 JW3376+3330 的 BMS 方案
- 6.47 MB | 11次下載 | 免費(fèi)
- 4PWM控制器的控制方法
- 0.39 MB | 3次下載 | 4 積分
- 5電流檢測(cè)芯片F(xiàn)P135應(yīng)用說明
- 1.24 MB | 3次下載 | 免費(fèi)
- 6全面解讀被動(dòng)式與主動(dòng)式PFC電路
- 1.27 MB | 1次下載 | 4 積分
- 7HC88L051F4低功耗芯片規(guī)格書
- 4.76 MB | 1次下載 | 免費(fèi)
- 8CIU32D655x5數(shù)據(jù)手冊(cè)
- 2.14 MB | 1次下載 | 免費(fèi)
本月
- 1常用電子元器件使用手冊(cè)
- 2.40 MB | 52次下載 | 免費(fèi)
- 2高功率密度碳化硅MOSFET軟開關(guān)三相逆變器損耗分析
- 2.27 MB | 33次下載 | 10 積分
- 3PFC電路與BOOST電路設(shè)計(jì)實(shí)例分享
- 1.83 MB | 12次下載 | 4 積分
- 4世平基于靈動(dòng)微 SPIN560C 的低壓無刷電機(jī)應(yīng)用方案
- 10.93 MB | 11次下載 | 免費(fèi)
- 5電源測(cè)試報(bào)告-基于 國(guó)民技術(shù) N32L406 和杰華特 JW3376+3330 的 BMS 方案
- 6.47 MB | 11次下載 | 免費(fèi)
- 6USB拓展塢PCB圖資料
- 0.57 MB | 11次下載 | 免費(fèi)
- 7MS1826 HDMI 多功能視頻處理器數(shù)據(jù)手冊(cè)
- 4.51 MB | 9次下載 | 免費(fèi)
- 8HAL9303線性霍爾效應(yīng)傳感器技術(shù)手冊(cè)
- 0.70 MB | 9次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935134次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191424次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183352次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81600次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73818次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發(fā)燒友App






創(chuàng)作
發(fā)文章
發(fā)帖
提問
發(fā)資料
發(fā)視頻
上傳資料賺積分
評(píng)論