找圖演算法
『壹』 bfs演算法是什麼
廣度優先搜索演算法(英語:Breadth-First Search,縮寫為BFS),又譯作寬度優先搜索,或橫向優先搜索,是一種圖形搜索演算法。
簡單的說,BFS是從根節點開始,沿著樹的寬度遍歷樹的節點。如果所有節點均被訪問,則演算法中止。廣度優先搜索的實現一般採用open-closed表。
作法
BFS是一種暴力搜索演算法,目的是系統地展開並檢查圖中的所有節點,以找尋結果。換句話說,它並不考慮結果的可能地址,徹底地搜索整張圖,直到找到結果為止。BFS並不使用經驗法則演算法。
從演算法的觀點,所有因為展開節點而得到的子節點都會被加進一個先進先出的隊列中。
一般的實現里,其鄰居節點尚未被檢驗過的節點會被放置在一個被稱為open的容器中(例如隊列或是鏈表),而被檢驗過的節點則被放置在被稱為closed的容器中。
(1)找圖演算法擴展閱讀:
廣度優先搜索演算法的應用
廣度優先搜索演算法能用來解決圖論中的許多問題,例如:
1、查找圖中所有連接組件(ConnectedComponent)。一個連接組件是圖中的最大相連子圖。
2、查找連接組件中的所有節點。
3、查找非加權圖中任兩點的最短路徑。
4、測試一圖是否為二分圖。
5、(Reverse)Cuthill–McKee演算法
『貳』 百度圖片搜索引擎原理是如何實現的
圖片搜索的原理有三個步驟
1. 將目標圖片進行特徵提取,描述圖像的演算法很多,用的比較多的是:SIFT描述子,指紋演算法函數,bundling features演算法,hash function(散列函數)等。也可以根據不同的圖像,設計不同的演算法,比如圖像局部N階矩的方法提取圖像特徵。
2. 將圖像特徵信息進行編碼,並將海量圖像編碼做查找表。對於目標圖像,可以對解析度較大的圖像進行降采樣,減少運算量後在進行圖像特徵提取和編碼處理。
3. 相似度匹配運算:利用目標圖像的編碼值,在圖像搜索引擎中的圖像資料庫進行全局或是局部的相似度計算;根據所需要的魯棒性,設定閾值,然後將相似度高的圖片預保留下來;最後應該還有一步篩選最佳匹配圖片,這個應該還是用到特徵檢測演算法。
其中每個步驟都有很多演算法研究,圍繞數學,統計學,圖像編碼,信號處理等理論進行研究。
根據Neal Krawetz博士的解釋,原理非常簡單易懂。我們可以用一個快速演算法,就達到基本的效果。
這里的關鍵技術叫做"感知哈希演算法"(Perceptual hash algorithm),它的作用是對每張圖片生成一個"指紋"(fingerprint)字元串,然後比較不同圖片的指紋。結果越接近,就說明圖片越相似。下面是一個最簡單的實現:
第一步,縮小尺寸。
將圖片縮小到8x8的尺寸,總共64個像素。這一步的作用是去除圖片的細節,只保留結構、明暗等基本信息,摒棄不同尺寸、比例帶來的圖片差異。
第二步,簡化色彩。
將縮小後的圖片,轉為64級灰度。也就是說,所有像素點總共只有64種顏色。
第三步,計算平均值。
計算所有64個像素的灰度平均值。
第四步,比較像素的灰度。
將每個像素的灰度,與平均值進行比較。大於或等於平均值,記為1;小於平均值,記為0。
第五步,計算哈希值。
將上一步的比較結果,組合在一起,就構成了一個64位的整數,這就是這張圖片的指紋。組合的次序並不重要,只要保證所有圖片都採用同樣次序就行了。
得到指紋以後,就可以對比不同的圖片,看看64位中有多少位是不一樣的。在理論上,這等同於計算"漢明距離"(Hammingdistance)。如果不相同的數據位不超過5,就說明兩張圖片很相似;如果大於10,就說明這是兩張不同的圖片。
具體的代碼實現,可以參見Wote用python語言寫的imgHash.py。代碼很短,只有53行。使用的時候,第一個參數是基準圖片,第二個參數是用來比較的其他圖片所在的目錄,返回結果是兩張圖片之間不相同的數據位數量(漢明距離)。
這種演算法的優點是簡單快速,不受圖片大小縮放的影響,缺點是圖片的內容不能變更。如果在圖片上加幾個文字,它就認不出來了。所以,它的最佳用途是根據縮略圖,找出原圖。
實際應用中,往往採用更強大的pHash演算法和SIFT演算法,它們能夠識別圖片的變形。只要變形程度不超過25%,它們就能匹配原圖。這些演算法雖然更復雜,但是原理與上面的簡便演算法是一樣的,就是先將圖片轉化成Hash字元串,然後再進行比較。
『叄』 圖像演算法A和B兩張圖片,找出B與A不同的部分
說的很清楚,你也把思路說出來了,就是這樣的,加快網路的傳輸速度。
至於比較方法,比較像素點的方向是對的,不過我想它不是上來就比較像素點,因為這樣效率較低,而是採用的多函數嵌套,方法如下:
把圖片分成幾大塊,比如平均分4塊,然後每一塊進行比對(進行圖片的模糊匹配,而不是精確的像素匹配),找出不同大塊,然後再分塊,以此下去,找到比較小的塊(這個根據編程定義到底多小算小),然後再進行像素比對,這樣效率能夠更加提高。
『肆』 百度地圖的路徑搜索演算法
這個還是要問程序猿,現在比較流行A*演算法,至於網路是否開發出了新的演算法不得而知,畢竟沒有完全相同的程序。
給你看一篇文獻:
地圖中最短路徑的搜索演算法研究
學生:李小坤 導師:董巒
摘要:目前為止, 國內外大量專家學者對「最短路徑問題」進行了深入的研究。本文通過理論分析, 結合實際應用,從各個方面較系統的比較廣度優先搜索演算法(BFS)、深度優先搜索演算法(DFS)、A* 演算法的優缺點。
關鍵詞:最短路徑演算法;廣度優先演算法;深度優先演算法;A*演算法;
The shortest path of map's search algorithm
Abstract:So far, a large number of domestic and foreign experts and scholars on the" shortest path problem" in-depth study. In this paper, through theoretical analysis and practical application, comprise with the breadth-first search algorithm ( BFS ), depth-first search algorithm ( DFS ) and the A * algorithms from any aspects of systematic.
Key words: shortest path algorithm; breadth-first algorithm; algorithm; A * algorithm;
前言:
最短路徑問題是地理信息系統(GIS)網路分析的重要內容之一,而且在圖論中也有著重要的意義。實際生活中許多問題都與「最短路徑問題」有關, 比如: 網路路由選擇, 集成電路設計、布線問題、電子導航、交通旅遊等。本文應用深度優先演算法,廣度優先演算法和A*演算法,對一具體問題進行討論和分析,比較三種算的的優缺點。
在地圖中最短路徑的搜索演算法研究中,每種演算法的優劣的比較原則主要遵循以下三點:[1]
(1)演算法的完全性:提出一個問題,該問題存在答案,該演算法能夠保證找到相應的答案。演算法的完全性強是演算法性能優秀的指標之一。
(2)演算法的時間復雜性: 提出一個問題,該演算法需要多長時間可以找到相應的答案。演算法速度的快慢是演算法優劣的重要體現。
(3)演算法的空間復雜性:演算法在執行搜索問題答案的同時,需要多少存儲空間。演算法佔用資源越少,演算法的性能越好。
地圖中最短路徑的搜索演算法:
1、廣度優先演算法
廣度優先演算法(Breadth-First-Search),又稱作寬度優先搜索,或橫向優先搜索,是最簡便的圖的搜索演算法之一,這一演算法也是很多重要的圖的演算法的原型,Dijkstra單源最短路徑演算法和Prim最小生成樹演算法都採用了和寬度優先搜索類似的思想。廣度優先演算法其別名又叫BFS,屬於一種盲目搜尋法,目的是系統地展開並檢查圖中的所有節點,以找尋結果。換句話說,它並不考慮結果的可能位址,徹底地搜索整張圖,直到找到結果為止。BFS並不使用經驗法則演算法。
廣度優先搜索演算法偽代碼如下:[2-3]
BFS(v)//廣度優先搜索G,從頂點v開始執行
//所有已搜索的頂點i都標記為Visited(i)=1.
//Visited的初始分量值全為0
Visited(v)=1;
Q=[];//將Q初始化為只含有一個元素v的隊列
while Q not null do
u=DelHead(Q);
for 鄰接於u的所有頂點w do
if Visited(w)=0 then
AddQ(w,Q); //將w放於隊列Q之尾
Visited(w)=1;
endif
endfor
endwhile
end BFS
這里調用了兩個函數:AddQ(w,Q)是將w放於隊列Q之尾;DelHead(Q)是從隊列Q取第一個頂點,並將其從Q中刪除。重復DelHead(Q)過程,直到隊列Q空為止。
完全性:廣度優先搜索演算法具有完全性。這意指無論圖形的種類如何,只要目標存在,則BFS一定會找到。然而,若目標不存在,且圖為無限大,則BFS將不收斂(不會結束)。
時間復雜度:最差情形下,BFS必須尋找所有到可能節點的所有路徑,因此其時間復雜度為,其中|V|是節點的數目,而 |E| 是圖中邊的數目。
空間復雜度:因為所有節點都必須被儲存,因此BFS的空間復雜度為,其中|V|是節點的數目,而|E|是圖中邊的數目。另一種說法稱BFS的空間復雜度為O(B),其中B是最大分支系數,而M是樹的最長路徑長度。由於對空間的大量需求,因此BFS並不適合解非常大的問題。[4-5]
2、深度優先演算法
深度優先搜索演算法(Depth First Search)英文縮寫為DFS,屬於一種回溯演算法,正如演算法名稱那樣,深度優先搜索所遵循的搜索策略是盡可能「深」地搜索圖。[6]其過程簡要來說是沿著頂點的鄰點一直搜索下去,直到當前被搜索的頂點不再有未被訪問的鄰點為止,此時,從當前輩搜索的頂點原路返回到在它之前被搜索的訪問的頂點,並以此頂點作為當前被搜索頂點。繼續這樣的過程,直至不能執行為止。
深度優先搜索演算法的偽代碼如下:[7]
DFS(v) //訪問由v到達的所有頂點
Visited(v)=1;
for鄰接於v的每個頂點w do
if Visited(w)=0 then
DFS(w);
endif
endfor
end DFS
作為搜索演算法的一種,DFS對於尋找一個解的NP(包括NPC)問題作用很大。但是,搜索演算法畢竟是時間復雜度是O(n!)的階乘級演算法,它的效率比較低,在數據規模變大時,這種演算法就顯得力不從心了。[8]關於深度優先搜索的效率問題,有多種解決方法。最具有通用性的是剪枝,也就是去除沒有用的搜索分支。有可行性剪枝和最優性剪枝兩種。
BFS:對於解決最短或最少問題特別有效,而且尋找深度小,但缺點是內存耗費量大(需要開大量的數組單元用來存儲狀態)。
DFS:對於解決遍歷和求所有問題有效,對於問題搜索深度小的時候處理速度迅速,然而在深度很大的情況下效率不高。
3、A*演算法
1968年的一篇論文,「P. E. Hart, N. J. Nilsson, and B. Raphael. A formal basis for the heuristic determination of minimum cost paths in graphs. IEEE Trans. Syst. Sci. and Cybernetics, SSC-4(2):100-107, 1968」。[9]從此,一種精巧、高效的演算法——A*演算法問世了,並在相關領域得到了廣泛的應用。A* 演算法其實是在寬度優先搜索的基礎上引入了一個估價函數,每次並不是把所有可擴展的結點展開,而是利用估價函數對所有未展開的結點進行估價, 從而找出最應該被展開的結點,將其展開,直到找到目標節點為止。
A*演算法主要搜索過程偽代碼如下:[10]
創建兩個表,OPEN表保存所有已生成而未考察的節點,CLOSED表中記錄已訪問過的節點。
算起點的估價值;
將起點放入OPEN表;
while(OPEN!=NULL) //從OPEN表中取估價值f最小的節點n;
if(n節點==目標節點) break;
endif
for(當前節點n 的每個子節點X)
算X的估價值;
if(X in OPEN)
if(X的估價值小於OPEN表的估價值)
把n設置為X的父親;
更新OPEN表中的估價值; //取最小路徑的估價值;
endif
endif
if(X inCLOSE)
if( X的估價值小於CLOSE表的估價值)
把n設置為X的父親;
更新CLOSE表中的估價值;
把X節點放入OPEN //取最小路徑的估價值
endif
endif
if(X not inboth)
把n設置為X的父親;
求X的估價值;
並將X插入OPEN表中; //還沒有排序
endif
end for
將n節點插入CLOSE表中;
按照估價值將OPEN表中的節點排序; //實際上是比較OPEN表內節點f的大小,從最小路徑的節點向下進行。
end while(OPEN!=NULL)
保存路徑,即 從終點開始,每個節點沿著父節點移動直至起點,這就是你的路徑;
A *演算法分析:
DFS和BFS在展開子結點時均屬於盲目型搜索,也就是說,它不會選擇哪個結點在下一次搜索中更優而去跳轉到該結點進行下一步的搜索。在運氣不好的情形中,均需要試探完整個解集空間, 顯然,只能適用於問題規模不大的搜索問題中。而A*演算法與DFS和BFS這類盲目型搜索最大的不同,就在於當前搜索結點往下選擇下一步結點時,可以通過一個啟發函數來進行選擇,選擇代價最少的結點作為下一步搜索結點而跳轉其上。[11]A *演算法就是利用對問題的了解和對問題求解過程的了解, 尋求某種有利於問題求解的啟發信息, 從而利用這些啟發信息去搜索最優路徑.它不用遍歷整個地圖, 而是每一步搜索都根據啟發函數朝著某個方向搜索.當地圖很大很復雜時, 它的計算復雜度大大優於D ijks tr a演算法, 是一種搜索速度非常快、效率非常高的演算法.但是, 相應的A*演算法也有它的缺點.啟發性信息是人為加入的, 有很大的主觀性, 直接取決於操作者的經驗, 對於不同的情形要用不同的啟發信息和啟發函數, 且他們的選取難度比較大,很大程度上找不到最優路徑。
總結:
本文描述了最短路徑演算法的一些步驟,總結了每個演算法的一些優缺點,以及演算法之間的一些關系。對於BFS還是DFS,它們雖然好用,但由於時間和空間的局限性,以至於它們只能解決規模不大的問題,而最短或最少問題應該選用BFS,遍歷和求所有問題時候則應該選用DFS。至於A*演算法,它是一種啟發式搜索演算法,也是一種最好優先的演算法,它適合於小規模、大規模以及超大規模的問題,但啟發式搜索演算法具有很大的主觀性,它的優劣取決於編程者的經驗,以及選用的啟發式函數,所以用A*演算法編寫一個優秀的程序,難度相應是比較大的。每種演算法都有自己的優缺點,對於不同的問題選擇合理的演算法,才是最好的方法。
參考文獻:
[1]陳聖群,滕忠堅,洪親,陳清華.四種最短路徑演算法實例分析[J].電腦知識與技術(學術交流),2007(16):1030-1032
[2]劉樹林,尹玉妹.圖的最短路徑演算法及其在網路中的應用[J].軟體導刊,2011(07):51-53
[3]劉文海,徐榮聰.幾種最短路徑的演算法及比較[J].福建電腦,2008(02):9-12
[4]鄧春燕.兩種最短路徑演算法的比較[J].電腦知識與技術,2008(12):511-513
[5]王蘇男,宋偉,姜文生.最短路徑演算法的比較[J].系統工程與電子技術,1994(05):43-49
[6]徐鳳生,李天志.所有最短路徑的求解演算法[J].計算機工程與科學,2006(12):83-84
[7]李臣波,劉潤濤.一種基於Dijkstra的最短路徑演算法[J].哈爾濱理工大學學報,2008(03):35-37
[8]徐鳳生.求最短路徑的新演算法[J].計算機工程與科學,2006(02).
[9] YanchunShen . An improved Graph-based Depth-First algorithm and Dijkstra algorithm program of police patrol [J] . 2010 International Conference on Electrical Engineering and Automatic Control , 2010(3) : 73-77
[10]部亞松.VC++實現基於Dijkstra演算法的最短路徑[J].科技信息(科學教研),2008(18):36-37
[11] 楊長保,王開義,馬生忠.一種最短路徑分析優化演算法的實現[J]. 吉林大學學報(信息科學版),2002(02):70-74
『伍』 按鍵精靈循環找圖
Delay
100
FindPic
0,0,1440,900,"Attachment:\圖A.bmp",0.7,X1,Y1
If
X1
>
0
And
Y1
>
0
Then
MoveTo
X1+5,
Y1+5
LeftClick
1
Delay
500
FindPic
0,0,1440,900,"Attachment:\圖B.bmp",0.7,X2,Y2
If
X2
>
0
And
Y2
>
0
Then
MoveTo
X2+5,
Y2+5
LeftClick
1
End
If
End
If
將以上腳本設置為一直循環執行,直到按終止鍵為止。
演算法:先延時0.1秒,再找圖A,找到後點擊圖A,等待0.5秒。再找圖B,找到後點擊圖B。
根據實際情況,可能要修改找圖區域、圖片相似度、延時時間
『陸』 實現圖的廣度優先搜索演算法需使用的輔助數據結構是什麼
廣度優先用隊列,深度優先用棧。簡單說明如下:
廣度優先:當一個節點被加入隊列時,要標記為已遍歷,遍歷過程中,對於隊列第一個元素,遍歷其所有能夠能一步達到的節點,如果是標記未遍歷的,將其加入隊列,從第一個元素出發所有能一步直接達到的節點遍歷結束後將這個元素出列。
深度優先:當遍歷到某個節點A時,如果是標記未遍歷,將其入棧,遍歷它能夠一步直接達到的節點,如果是標記未遍歷,將其入棧且標記為已遍歷,然後對其進行類似A的操作,否則找能夠一步直接達到的節點進行類似操作。直到所有能夠一步直接達到的節點都已遍歷,將A出棧。
這里使用「能夠能一步達到的節點」而非「與其相鄰的節點」是考慮到有向圖因素。
具體可以找個圖,然後使用廣度和深度演算法搜索一遍,每步自己手工修改隊列和棧就明白怎麼回事了。
『柒』 百度識圖原理
網路識圖原理:
對於這種網路,谷歌的圖像搜索一般由演算法實現,一般是三個步驟:
1. 將目標圖片進行特徵提取,描述圖像的演算法很多,用的比較多的是:SIFT描述子,指紋演算法函數,bundling features演算法,hash function(散列函數)等。也可以根據不同的圖像,設計不同的演算法,比如圖像局部N階矩的方法提取圖像特徵。
2. 將圖像特徵信息進行編碼,並將海量圖像編碼做查找表。對於目標圖像,可以對解析度較大的圖像進行降采樣,減少運算量後在進行圖像特徵提取和編碼處理。
3. 相似度匹配運算:利用目標圖像的編碼值,在圖像搜索引擎中的圖像資料庫進行全局或是局部的相似度計算;根據所需要的魯棒性,設定閾值,然後將相似度高的圖片預保留下來;最後應該還有一步篩選最佳匹配圖片,這個應該還是用到特徵檢測演算法。
其中每個步驟都有很多演算法研究,圍繞數學,統計學,圖像編碼,信號處理等理論進行研究。
『捌』 什麼網站可以實現以圖找圖的呢
下面的十二款搜索引擎可以幫你實現,以圖找圖,以圖搜圖,以圖片搜索相似的圖片。
一:http://tineye.com/
Tineye是典型的以圖找圖搜索引擎,輸入本地硬碟上的圖片或者輸入圖片網址,即可自動幫你搜索相似圖片,搜索准確度相對來說還比較令人滿意。
TinEye是加拿大Idée公司研發的相似圖片搜索引擎,TinEye主要用途有:1、發現圖片的來源與相關信息;2、研究追蹤圖片信息在互聯網的傳播;3、找到高解析度版本的圖片;4、找到有你照片的網頁;5、看看這張圖片有哪些不同版本。
二:http://shitu..com
網路正式上線了其最新的搜索功能——「識圖」(http://shitu..com)。該功能是網路基於相似圖片識別技術,讓用戶通過上傳本地圖片或者輸入圖片的URL地址之後,網路再根據圖像特徵進行分析,進而從互聯網中搜索出與此相似的圖片資源及信息內容。但需要注意的是,用戶上傳本地圖片時,圖片的文件要小於5M,格式可為JPG、JPEG、GIF、PNG、BMP等圖片文件。
三:http://www.gazopa.com/
GazoPa搜索圖片時,不依據關鍵詞進行檢索,而是通過圖片自身的某些特徵(例如色彩,形狀等信 息)來進行搜索。GazoPa搜索方式有四種:
第一種是傳統的通過關鍵詞搜索圖片,但在傳統圖片搜索領域GazoPa與google等搜索引擎無法競爭。
第二種是創新的通過圖片搜索圖片,但在此領域GazoPa無法與TinEye相競爭。TinEye很容易就能搜索出與原圖最接近的一些結果,而GazoPa很多時候的搜索結果則完全無法與原圖匹配。
第三種是通過手繪圖片搜索圖片,這種方式其實沒太大用處。GazoPa雖然有這樣那樣的不足之處,但也算是一個很有獨創性的搜索引擎。GazoPa目前還處在內測階段,想要加入測試的可以在官網上留下你的郵箱地址,收到邀請後你就可以測試使用了。
第四種是通過視頻縮略圖搜索視頻,GazoPa僅憑一張視頻縮略圖就可找到相關視頻。只要有截圖,就可以找到截圖的視頻!
四、http://similar-images.googlelabs.com/
Google實驗室的圖片搜索:輸入一個關鍵詞後,例如「lake」,返回的頁面裡面點擊某個圖片的下面的Similar images,運用Google 類似圖片搜索功能引擎,即刻為你把類似的圖片全部搜索出來,展示給用戶以便查看。其准確率、相似率相對比較高。
五、http://www.picitup.com/
Picitup是一個剛開始公測的專業圖片搜索引擎,功能非常強大,並支持中文關鍵字的搜索,是國內圖片愛好者的不錯選擇。Picitup主要支持關鍵字的搜索,但在它的特色搜索項目——名人匹配搜索(Celebritymatchup)中,你可以通過上傳本地照片來進行搜索,不過結果一般讓人失望。Picitup可以通過在搜索結果頁選擇過濾方式來篩選圖片,比如可以按顏色、頭像(人臉)、風景、產品四種類別來過濾搜索結果。
Picitup最大特點是提供相似圖片搜索,即通過關鍵字找到初始圖片,點擊初始圖片下面的similar pictures按鈕,即可搜索與該張圖片類似的圖片。其實質和Google實驗室類似圖片搜索是一樣的。
六、http://www.tiltomo.com/
Tiltomo是由 Flickr 開發的一個搜索工具,主要用來維護Flickr 自己的圖片資料庫,其搜索演算法主要是基於相似的主題風格或相似的色調和材質。
七、http://cn.bing.com/
http://Live.com允許你進行一次關鍵字搜索後再執行相似性的搜索。你可以為Live索引中的任意一張圖片尋找相似的圖片,但搜索結果看起來並不是很精確。
八、http://www.xcavator.net
Xcavator 和http://Live.com很相似,你需要先輸入一個關鍵字,然後在搜索結果中挑選一張圖片,在根據這張圖片的特點來進行搜索。
九、http://www.incogna.com
Incogna的搜索速度非常快,主要是基於色彩和形狀上的相似性。
十、http://www.terragalleria.com
Terragalleria主要基於視覺上的相似性,而不考慮圖片的內容。
十一、http://labs.ideeinc.com/upload/
Byo image search是根據你上傳的圖片來搜索相似的圖片,演算法主要是基於色彩,也包括主題風格。
十二、http://pic.sogou.com/
搜狗圖片搜索
希望可以幫到你。