隨著現(xiàn)代社會的發(fā)展,信息的形式和數(shù)量正在迅猛增長。其中很大一部分是圖像,圖像可以把事物生動地呈現(xiàn)在我們面前,讓我們更直觀地接受信息。同時,計算機已經(jīng)作為一種人們普遍使用的工具為人們的生產(chǎn)生活服務(wù)。
圖像處理概況圖像處理,是對圖像進行分析、加工、和處理,使其滿足視覺、心理以及其他要求的技術(shù)。圖像處理是信號處理在圖像域上的一個應(yīng)用。目前大多數(shù)的圖像是以數(shù)字形式存儲,因而圖像處理很多情況下指數(shù)字圖像處理。本文接下來將簡單粗略介紹下數(shù)字圖像處理領(lǐng)域中的經(jīng)典算法。
圖算法領(lǐng)域10大經(jīng)典算法 基本遍歷 一、深度優(yōu)先搜索
深度優(yōu)先搜索算法思想
深度優(yōu)先遍歷圖的方法(一種遞歸的定義)是,假定給定圖G的初始狀態(tài)是所有頂點均未被訪問過,在G中任選一個頂點i作為遍歷的初始點,則深度優(yōu)先搜索遞歸調(diào)用包含以下操作:
(1)訪問搜索到的未被訪問的鄰接點;
?。?)將此頂點標記為已訪問節(jié)點;
?。?)搜索該頂點的未被訪問的鄰接點,若該鄰接點存在,則從此鄰接點開始進行同樣的訪問和搜索。
深度優(yōu)先搜索算法實現(xiàn):
1. 使用棧來實現(xiàn)。相關(guān)算法實現(xiàn)總結(jié)為:
(1) 將初始節(jié)點壓棧。
?。?) While(棧非空) {
?。?) 取出棧頂點,暫時存儲這個節(jié)點node_t信息。
?。?) 訪問該節(jié)點,并且標示已訪問。
?。?) 將棧頂元素出站。
?。?) For(遍歷node_t的相鄰的未訪問過的節(jié)點){
?。?) 將其入棧。
}
}
注意事項:一定要先將該訪問節(jié)點出棧后,再將其鄰接的未訪問的節(jié)點入棧。切記不要,之前我的經(jīng)歷,如果沒有鄰接點就出棧,否則就不出站,但是標記了該節(jié)點為訪問節(jié)點的。
2. 使用遞歸來實現(xiàn)。相關(guān)算法實現(xiàn)總結(jié)為:
(1) DFS(初始節(jié)點)
?。?) FuncTIon DFS(一個節(jié)點) {
?。?) 訪問該節(jié)點,并且標示已訪問。
?。?) For(遍歷該節(jié)點的相鄰的未訪問過的節(jié)點) {
?。?) DFS(這個鄰接節(jié)點)。
}
}
二、廣度優(yōu)先搜索
此圖遍歷中最基本的倆種算法,BFS,DFS,入選本圖算法十大算法,自是無可爭議。
因為,這倆種搜索算法,應(yīng)用實為廣泛而重要。
關(guān)于此BFS、DFS算法,更多,請參考:
http://blog.csdn.net/v_JULY_v/archive/2011/01/01/6111353.aspx
三、A*搜索算法DFS和BFS在展開子結(jié)點時均屬于盲目型搜索,也就是說,
它不會選擇哪個結(jié)點在下一次搜索中更優(yōu)而去跳轉(zhuǎn)到該結(jié)點進行下一步的搜索。
在運氣不好的情形中,均需要試探完整個解集空間, 顯然,只能適用于問題規(guī)模不大的搜索問題中。
A*算法,作為啟發(fā)式算法中很重要的一種,被廣泛應(yīng)用在最優(yōu)路徑求解和一些策略設(shè)計的問題中。
而A*算法最為核心的部分,就在于它的一個估值函數(shù)的設(shè)計上:
f(n)=g(n)+h(n)
其中f(n)是每個可能試探點的估值,它有兩部分組成:
一部分,為g(n),它表示從起始搜索點到當(dāng)前點的代價(通常用某結(jié)點在搜索樹中的深度來表示)。
一部分,即h(n),它表示啟發(fā)式搜索中最為重要的一部分,即當(dāng)前結(jié)點到目標結(jié)點的估值。
更多,請參考:
經(jīng)典算法研究系列:一、A*搜索算法
附:
Flood Fill
LeeMaRS、wtzyb4446:
圖形學(xué)中Flood Fill是滿水法填充,是用來填充區(qū)域的。
就好比在一個地方一直到水,水會往四周滿延開,直到高地阻擋。
Flood Fill就是從一個點開始往四周尋找相同的點填充,直到有不同的點為止。
我們用的Flood Fill和這個差不多原理,就是BFS的一種形式。
假設(shè)在(i,j)滴好大一滴紅墨水,然后水開始漫開,向它的上下左右染色,也就是(i-1,j),(i+1,j),(i,j-1),(i,j+1)這四個點。然后在分別再從這四個點開始向周圍染色。。。直到碰到某種邊界為止。
把這個轉(zhuǎn)化為BFS的思想,就是隊列中初始元素是(i,j),然后把(i,j)擴展?fàn)顟B(tài),得到(i-1,j),(i+1,j),(i,j-1),(i,j+1)這四個狀態(tài),加入隊列。把(i,j)出列,繼續(xù)擴展下一個結(jié)點。如此