資料介紹
第一步很簡(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)距離)。
?
有很多庫和算法可以解決旅行商問題,我使用了tsp_solver python 庫。我們?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):
它花了大約 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ì)算和反算 20次下載
- 基于空三解算技術(shù)的樹障測(cè)量技術(shù)綜述 7次下載
- 基于互補(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播放器電路圖-原理圖
- 算力服務(wù)器為什么選擇GPU 244次閱讀
- 基線解算所需的起算點(diǎn)應(yīng)按何種順序采用 169次閱讀
- 系統(tǒng)解復(fù)位的特殊處理 740次閱讀
- 算力簡(jiǎn)史:人類算力的演進(jìn)過程 1085次閱讀
- SuperCAT:軟件定義EtherCAT運(yùn)動(dòng)控制器 667次閱讀
- 測(cè)量4通道解串器上的偏斜裕量 806次閱讀
- EM解算器的實(shí)際應(yīng)用 907次閱讀
- 基于RT-Thread開發(fā)電子魔方實(shí)現(xiàn)功能 1320次閱讀
- 串行解串器如何構(gòu)成另一種物理層器件 1900次閱讀
- 串行解串器的關(guān)鍵技術(shù)及應(yīng)用分析 6424次閱讀
- 基于H∞混合靈敏度解耦控制器實(shí)現(xiàn)BTT導(dǎo)彈自動(dòng)駕駛儀的解耦設(shè)計(jì) 1037次閱讀
- 一種解偶人臉屬性與化妝屬性的妝容解偶遷移器 3771次閱讀
- mpu6050姿態(tài)解算原理_mpu6050姿態(tài)解算程序 4.3w次閱讀
- mpu6050姿態(tài)解算原理分析及程序設(shè)計(jì) 4.2w次閱讀
- MAX9240 25位GMSL解串器 1849次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 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元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 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è)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 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é)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多