MATLAB程序大全_第1頁
MATLAB程序大全_第2頁
MATLAB程序大全_第3頁
MATLAB程序大全_第4頁
MATLAB程序大全_第5頁
已閱讀5頁,還剩48頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

精品文檔 1歡迎下載 1 全景圖到穹景圖 這個程序我最初是用 FreeImage 寫的 這兩天改成了 matlab 再不貼上來 我就要忘了 看到一篇文章有這樣的變換 挺有意思的 就拿來試了一下 文章點此 全景圖到穹頂圖變換 通俗的說就是將全景圖首尾相接做成一個圓環的樣子 先看下面這張圖 下面的矩形就是我們要處理的全景圖 上面的矩形是變換后的圖像 下面圖像的底邊對應穹頂 圖的內圓 頂邊對應穹頂圖的外圓 當然 反過來也是可以的 程序流程 1 定義穹頂圖內圓和外圓的半徑 變換后的像素就填充在這個內外半徑的圓環中 2 遍歷穹頂圖 當所處理當前像素位于圓環內 則通過極坐標反變換去全景圖中尋找相應位置 的像素進行填充 3 遍歷完圖像就行了 用的技巧和圖像旋轉或放大縮小都是類似的 處理結果 原圖 精品文檔 2歡迎下載 結果 matlab 代碼如下 clear all close all clc img imread pan jpg 精品文檔 3歡迎下載 imshow img m n size img r1 100 內環半徑 r2 r1 m 外環半徑 imgn zeros 2 r2 2 r2 re m re n size imgn for y 1 re m for x 1 re n dis x x re n 2 dis y y re m 2 l sqrt dis x 2 dis y 2 if l r1 theta 0 if y re m 2 theta atan2 dis y dis x end if y 1 角點區域 H 0 harris 角點檢測就用到了第三類判斷 當然 在實際應用的時候 H 和 K 的值肯定都不會是理想 所以我用的都是近似判斷 處理結果如下 原圖 平坦區域 精品文檔 9歡迎下載 邊緣區域 角點區域 好像也不全角點 求角點還是 harris 好了 結構張量行列式與跡的關系 精品文檔 10歡迎下載 其中紅框為平坦區域 黃框為邊緣區域 鋁框為角點區域 matlab 代碼如下 clear all close all clc img double imread lena jpg m n size img imshow img Ix Iy gradient img Ix2 Ix 2 Iy2 Iy 2 Ixy Ix Iy k 1 lambda zeros m n 2 for i 1 m for j 1 n st Ix2 i j Ixy i j Ixy i j Iy2 i j 結構張量 K det st 求行列式 H trace st 求跡 所有的判斷都是近似的 if H50 end lambda k K H 精品文檔 11歡迎下載 k k 1 end end figure plot lambda 1 lambda 2 ylabel trace xlabel det figure imshow img 6 模糊集圖像增強 算法有很多變種 不過主要就是以下三步 1 設計隸屬度函數將圖像從空間域變換到模糊集域 2 設計模糊增強算子 在模糊集域對圖像進行處理 3 根據第 1 步的隸屬度函數重新將圖像從模糊集域變換到空間域 這和頻域處理中的變換反變換不是很像么 我使用的隸屬度函數和模糊增強算子在這篇論文里 也算相關算法的經典論文了 處理結果如下 原圖 模糊集增強后 精品文檔 12歡迎下載 matlab 代碼如下 clear all close all clc img double imread lena jpg imshow img m n size img Fe 1 控制參數 Fd 128 xmax max max img u 1 xmax img Fd Fe 空間域變換到模糊域 也可以多次迭代 for i 1 m 模糊域增強算子 for j 1 n if u i j 0 head head 1 flag flag j pa j i end end tail tail 1 end if pa m 0 如果搜索不到匯節點 退出循環 break end path i m 從匯節點開始 k 0 路徑包含的邊的個數 while i 1 使用前趨構造從源節點到匯節點的路徑 path path pa i i A pa i i 存入路徑 i pa i 使用前趨表反向搜尋 借鑒 Dijsktra 中的松 弛方法 k k 1 精品文檔 17歡迎下載 end Mi min path 3 尋找增廣路徑中最小的那條邊 for i 1 k A path i 1 path i 2 A path i 1 path i 2 Mi 增廣路 徑中每條路徑減去最小的邊 maxflow path i 1 path i 2 maxflow path i 1 path i 2 Mi 最大流 原網絡包含這個網絡 我只能這樣表示了 end 使用新的圖 A 進入下一循環 從新開始找增廣 路徑 end figure netplot maxflow 1 9 單元最短路徑 圖的相關算法也算是自己的一個軟肋了 當年沒選修圖論也是一大遺憾 圖像處理中 也有使用圖論算法作為基礎的相關算法 比如圖割 這個算法就需要求最大流 最小割 所以熟悉一下圖論算法對于圖像處理還是很有幫助的 Dijkstra 和 Bellman Ford 類似 都是解決單源最短路徑問題 不同的是這個方法只能解決邊 為非負的問題 實現的好的 Dijkstra 算法運行時間要快于 Bellman ford 算法步驟如下 1 首先設置隊列 所有節點入列 源節點值為 0 其他節點值為無窮 2 然后在隊列中找值最小的節點并出列 3 計算出列的節點所有后繼節點的距離 4 松弛方法 如果新計算的距離小于上次計算的距離 那么更新距離 即將后繼節點值設為較 小的距離 并將后繼節點的前趨設為當前的出列節點 5 對剩余的節點隊列繼續找最小值并出列 不斷循環 2 3 4 步直到隊列中沒有節點了 步驟是上面沒錯 不過我程序中沒有完全按照上述的步驟實現 不同的地方在于我沒有做出列 操作 而是通過標記節點的形式實現的 運行結果如下 圖 是圖不是圖片 是算法導論 367 頁上的 精品文檔 18歡迎下載 matlab 代碼如下 netplot 和 compresstable2matrix 和上一篇使用的一樣 main m clear all close all clc 初始化鄰接壓縮表 1 2 10 表示從節點 1 到節點 2 邊的權重為 10 b 1 2 10 1 4 5 2 3 1 2 4 2 3 5 4 4 2 3 4 3 9 4 5 2 5 1 7 5 3 6 m max max b 1 2 壓縮表中最大值就是鄰接矩陣的寬與高 A compresstable2matrix b 從鄰接壓縮表構造圖的矩陣表示 netplot A 1 形象表示 S inf 1 m 從開始的源點到每一個節點的距離 S 1 0 源點到自己的距離為 0 pa zeros 1 m 存儲每個節點的前驅 在松弛過程中賦值 精品文檔 19歡迎下載 pa 1 1 源點的前趨是自己 visit zeros 1 m 標記某個節點是否訪問過了 index 1 從 index 節點開始搜索 判斷是否對所有節點都找的最短路徑了 可能會有源點沒有路徑到目標節點的 情況 那就無限循環了 while sum visit m 沒有出隊列操作 不過通過 visit 來等價的表示了 visit index 1 標記第 index 節點為已入列的節 點 S pa relax S pa A visit index m 松弛 如果兩個節點間 有更短的距離 則用更短的距離 index extract min S visit index m 使用已訪問的最小的節點作為下 一次搜索的開始節點 end 最終我們需要的就是這兩個值 S 源點到其他每一點的距離 pa 其他每一節點的前趨 算法到此結束 下面只是為了形象的表示而寫的 re for i 2 m re re pa i i A pa i i end A compresstable2matrix re 從鄰接壓縮表構造圖的矩陣表示 figure netplot A 1 形象表示 relax m 邊緣松弛 使用更短的距離作為節點的值 function S pa relax S pa A visit index m i index for j 1 m if A i j inf pa j i end end 精品文檔 20歡迎下載 end end extract min m 提取隊列中尚未標記的最小的值的序號 function index extract min S visit index m Mi inf for j 1 m if visit j 1 if S j S i A i j S j S i A i j 邊緣松弛 取兩節點間 最小權值作為實際權值 pa j i 尋找前趨 end end end end end end 最終我們需要的就是這兩個值 S 源點到其他每一點的距離 pa 其他每一節點的前趨 算法到此結束 下面只是為了形象的表示而寫的 re for i 2 m re re pa i i A pa i i end A compresstable2matrix re 從鄰接壓縮表構造圖的矩陣表示 figure netplot A 1 形象表示 compresstable2matrix m function A compresstable2matrix b n size b m max max b 1 2 A inf m m for i 1 n A b i 1 b i 2 b i 3 end end 精品文檔 23歡迎下載 11 如此經典的算法竟一直沒有單獨的實現過 真是遺憾啊 廣度優先搜索在過去實現的二值圖像連通區域標記和 prim 最小生成樹算法時已經無意識的用到 了 深度優先搜索倒是沒用過 這次單獨的將兩個算法實現出來 因為算法本身和圖像沒什么關系 所以更純粹些 廣度優先搜索是從某一節點開始 搜索與其線連接的所有節點 按照廣度方向像外擴展 直到 不重復遍歷所有節點 深度優先搜索是從某一節點開始 沿著其搜索到的第一個節點不斷深入下去 當無法再深入的 時候 回溯節點 然后再在回溯中的某一節點開始沿另一個方向深度搜索 直到不重復的遍歷 所有節點 廣度優先搜索用的是隊列作為臨時節點存放處 深度優先搜索可以遞歸實現 算法導論就是用 遞歸實現的偽代碼 不過我這里是用棧作為臨時節點存放處 感覺也沒什么好介紹的了 抄算法導論上的介紹也沒什么意思 所有的內容都是書上的 真正 學東西還是要看書 下面是運行結果 原連通圖 廣度優先搜索 精品文檔 24歡迎下載 深度優先搜索 matlab 代碼如下 其中的畫圖函數 netplot m BFS m clear all close all clc 初始化鄰接壓縮表 b 1 2 1 3 1 4 2 4 2 5 3 6 4 6 4 7 m max b 壓縮表中最大值就是鄰接矩陣的寬與高 A compresstable2matrix b 從鄰接壓縮表構造圖的矩陣表示 netplot A 1 形象表示 head 1 隊列頭 tail 1 隊列尾 開始隊列為空 tail head queue head 1 向頭中加入圖第一個節點 head head 1 隊列擴展 flag 1 標記某個節點是否訪問過了 re 最終結果 while tail head 判斷隊列是否為空 i queue tail 取隊尾節點 for j 1 m if A i j 1 新節點入列 head head 1 擴展隊列 flag flag j 對新節點進行標記 re re i j 將邊存入結果 end end 精品文檔 25歡迎下載 tail tail 1 end A compresstable2matrix re figure netplot A 1 DFS m clear all close all clc 初始化鄰接壓縮表 b 1 2 1 3 1 4 2 4 2 5 3 6 4 6 4 7 m max b 壓縮表中最大值就是鄰接矩陣的寬與高 A compresstable2matrix b 從鄰接壓縮表構造圖的矩陣表示 netplot A 1 形象表示 top 1 堆棧頂 stack top 1 將第一個節點入棧 flag 1 標記某個節點是否訪問過了 re 最終結果 while top 0 判斷堆棧是否為空 pre len length stack 搜尋下一個節點前的堆棧長度 i stack top 取堆棧頂節點 for j 1 m if A i j 1 擴展堆棧 stack top j 新節點入棧 flag flag j 對新節點進行標記 re re i j 將邊存入結果 break end end if length stack pre len 如果堆棧長度沒有增加 則節點開始出棧 stack top top top 1 end end A compresstable2matrix re 精品文檔 26歡迎下載 figure netplot A 1 compresstable2matrix m function A compresstable2matrix b n size b m max b A zeros m m for i 1 n A b i 1 b i 2 1 A b i 2 b i 1 1 end end 12 模擬退火首先從某個初始候選解開始 當溫度大于 0 時執行循環 在循環中 通過隨機擾動產生一個新的解 然后求得新解和原解之間的能量差 如果差小于 0 則采用新解作為當前解 如果差大于 0 則采用一個當前溫度與能量差成比例的概率來選擇是否接受新解 溫度越低 接受的概率越小 差值越大 同樣接受概率越小 是否接受的概率用此公式計算 p exp E T 這里 E 為新解與原解的差 T 為當前的溫度 由于溫度隨迭代次數逐漸降低 因此獲得一個較差的解的概率較小 典型的模擬退火算法還使用了蒙特卡洛循環 在溫度降低之前 通過多次迭代來找到當前溫度 下比較好的解 這里使用模擬退火解旅行商問題 因為這個問題本身是一個 NP 難問題 所以也就求不到最優解 不過應該可以求得一個比較好的解 然后再手工優化 具體到程序中 這里的隨機擾動就是隨機置換兩個城市的位置 能量就是旅行商路線的總長度 算法結果如下 初始旅行商路線 精品文檔 27歡迎下載 最終求得的旅行商路線 每次迭代求得的旅行距離 matlab 代碼如下 main m 精品文檔 28歡迎下載 clear all close all clc n 20 城市個數 temperature 100 n 初始溫度 iter 100 內部蒙特卡洛循環迭代次數 隨機初始化城市坐標 city struct for i 1 n city i x floor 1 100 rand city i y floor 1 100 rand end l 1 統計迭代次數 len l computer tour city n 每次迭代后的路線長度 netplot city n 初始旅行路線 while temperature 0 001 停止迭代溫度 for i 1 iter 多次迭代擾動 一種蒙特卡洛方法 溫度降低之前多 次實驗 len1 computer tour city n 計算原路線總距離 tmp city perturb tour city n 產生隨機擾動 len2 computer tour tmp city n 計算新路線總距離 delta e len2 len1 新老距離的差值 相當于能量 if delta erand 以概率選擇是否接受新 解 city tmp city 可能得到較差的解 end end end l l 1 len l computer tour city n 計算新路線距離 temperature temperature 0 99 溫度不斷下降 end figure netplot city n 最終旅行路線 精品文檔 29歡迎下載 figure plot len computer tour m function len computer tour city n 計算路線總長度 每個城市只計算 和下家城市之間的距離 len 0 for i 1 n 1 len len sqrt city i x city i 1 x 2 city i y city i 1 y 2 end len len sqrt city n x city 1 x 2 city n y city 1 y 2 end perturb tour m function city perturb tour city n 隨機置換兩個不同的城市的坐標 產生隨機擾動 p1 floor 1 n rand p2 floor 1 n rand while p1 p2 p1 floor 1 n rand p2 floor 1 n rand end tmp city p1 city p1 city p2 city p2 tmp end netplot m function netplot city n 連線各城市 將路線畫出來 hold on for i 1 n 1 plot city i x city i y r 精品文檔 30歡迎下載 line city i x city i 1 x city i y city i 1 y 只連 線當前城市和下家城市 end plot city n x city n y r line city n x city 1 x city n y city 1 y 最后一家 城市連線第一家城市 hold off end 13 還是這本書上的內容 不過我看演化計算這一章是倒著看的 這里練習的算法正好和書中介紹 的順序是相反的 演化策略是最古老的的演化算法之一 和上一篇 DE 算法類似 都是基于種群的隨機演化產生最 優解的算法 算法步驟如下 1 設定種群個體數和需要迭代的次數 2 選擇父代中的個體按照公式 z1 sqrt 2 ln u1 sin 2 pi u2 m z2 sqrt 2 ln u1 cos 2 pi u2 m 進行演化 這里 u1 u2 都是隨機值 m 是控制因子 演化次數越多 m m 越小 父代通過與 z1 z2 相加得 到后代 3 計算后代的適應性 4 選擇后代中最優的適應性作為全局最優適應性 其實整個過程和 DE 非常類似 過程都是隨機變異 求適應性 再找最優 我還試著將 z1 和 z2 橫設為 1 竟也能得到非常好的解 算法結果如下 matlab 代碼如下 main m 精品文檔 31歡迎下載 clear all close all clc x y meshgrid 100 100 100 100 sigma 50 img 1 2 pi sigma 2 exp x 2 y 2 2 sigma 2 目標函數 高 斯函數 mesh img hold on n 50 種群個體的數量 iter 100 迭代次數 初始化種群 定義結構體 par struct for i 1 n par i x 100 200 rand 個體的 x 特征在 100 100 隨機初始 化 par i y 100 200 rand 個體的 y 特征在 100 100 隨機初始 化 par i fit compute fit par i 個體在 x y 處的適應度 end par best par 1 初始化種群中最佳個體 for k 1 iter 迭代次數 plot3 par best x 100 par best y 100 par best fit g 畫出最佳 個體的位置 100 為相對偏移 par par best select and recombin par par best n k iter 差異演化函數 end select and recombin m function next par par best select and recombin par par best n k iter mul iter k iter 限制進化因子 代數越高變異越小 next par par 新種群 for i 1 n 產生變異隨機數 u1 rand u2 rand z1 sqrt 2 log u1 sin 2 pi u2 mul z2 sqrt 2 log u1 cos 2 pi u2 mul 精品文檔 32歡迎下載 變異 next par i x par i x z1 next par i y par i y z2 計算變異后個體的適應度 next par i fit compute fit next par i 如果新個體沒有變異前個體適應度高 新個體還原為舊個體 if par i fit next par i fit next par i par i end 如果變異后適應度高于種群最高適應個體 則更新種群適應度最高個 體 if next par i fit par best fit par best next par i end end end compute fit m function re compute fit par x par x y par y sigma 50 if x100 y100 re 0 超出范圍適應度為 0 else 否則適應度按目標函數求解 re 1 2 pi sigma 2 exp x 2 y 2 2 sigma 2 end end 14 這兩天在看 M Tim Jones 的 人工智能 書中不只介紹原理 而且都有相應的 c 代碼實現 雖然代碼不完全 不過缺少的部分完全可以自己補完 差異演化和昨天實現的 PSO 很類似 都屬于優化算法 算法步驟 1 設定種群個體個數和需要迭代的次數 當然也可以設定條件 然后判斷是否停止迭代 2 定義交叉概率 CR 個體有一定概率進行變異 如果變異則進行第 3 步 如果不變異則下一代 個體和當前個體一樣 精品文檔 33歡迎下載 3 在種群中隨機選出三個互不相同的個體進行變異 變異公式如下 有博士論文總結了一大堆 變異公式 Xi g 1 Xr1 g F Xr2 g Xr3 g 其中 X 是種群中個體特征向量 這里就是 x 和 y 坐標 g 是種群的代數 i 代表當前個體 r1 r2 r3 是和 i 不同 并且也互不相同的個體 4 計算變異后個體的適應度 如果變異后適應度不如變異前 那么將變異后個體重新恢復為變 異前個體 5 比較變異后個體適應度和種群最優個體適應度 將適應度高的個體賦給種群最優個體 最后當然還是需要目標函數才能計算適應度 算法結果如下圖 小綠點代表種群最優個體適應度 matlab 代碼如下 main m clear all close all clc x y meshgrid 100 100 100 100 sigma 50 img 1 2 pi sigma 2 exp x 2 y 2 2 sigma 2 目標函數 高 斯函數 mesh img hold on n 20 種群個體的數量 初始化種群 定義結構體 par struct for i 1 n 精品文檔 34歡迎下載 par i x 100 200 rand 個體的 x 特征在 100 100 隨機初始化 par i y 100 200 rand 個體的 y 特征在 100 100 隨機初始化 par i fit 0 個體適應度為 0 初始化 end par best par 1 初始化種群中最佳個體 for k 1 100 迭代次數 plot3 par best x 100 par best y 100 par best fit g 畫出最佳 個體的位置 100 為相對偏移 par par best select and recombine par par best n 差異演 化函數 end select and recombine m function next par par best select and recombine par par best n F 0 5 加速因子 CR 0 8 變異率 next par par 新種群 for i 1 n while 1 在原種群中任選三個互不相同的個體進行交叉變異 r1 floor 1 20 rand r2 floor 1 20 rand r3 floor 1 20 rand if i r1 end end if rand next par i fit next par i par i 精品文檔 35歡迎下載 end 如果變異后適應度高于種群最高適應個體 則更新種群適應度最高個 體 if next par i fit par best fit par best next par i end end end compute fit m function re compute fit par x par x y par y sigma 50 if x100 y100 re 0 超出范圍適應度為 0 else 否則適應度按目標函數求解 re 1 2 pi sigma 2 exp x 2 y 2 2 sigma 2 end end 15 算法沒有和圖像處理直接相關 不過對于圖像分類中的模式識別相關算法 也許會用到這個優 化算法 算法步驟 1 首先確定粒子個數與迭代次數 2 對每個粒子隨機初始化位置與速度 3 采用如下公式更新每個粒子的位置與速度 Px Px Pv t 位置更新公式 Pv Pv c1 rand Gx Px c2 rand PBx Px 速度更新公式 這里 c1 和 c2 是加速因子 和梯度下降算法那里的加速因子我感覺很類似 Gx 是粒子群中最佳粒子的位置 PBx 為當前粒子最佳位置 4 每次迭代 首先檢查新粒子適應度是否高于原最優適應度 如果高于則對自己的位置和適應 度進行更新 然后再判斷此粒子適應度是否高于全局最優粒子 如果高于則更新全局最優粒子 適應度和位置 因為自己不是主要研究這方面算法的 所以還有一些疑問 自問自答 精品文檔 36歡迎下載 1 算法需要目標函數 如果沒有目標函數怎么辦 也許就不用這個算法了 或者其他什么算法 先求出了目標函數了 2 既然給了目標函數 那么直接遍歷所有值再 max 應該就能求得最佳位置 而 PSO 算法是不 是只是為了減少運算量 比如我這里 200 200 的矩陣 本來需要計算 40000 次函數 而 PSO 只 計算了 100 次函數就得到近似最優解了 難怪叫優化算法 反正我暫時只能這樣理解了 其他細節代碼注釋的很清楚了 下圖展示了一個 PSO 的運行結果 目標函數是高斯函數 綠點代表最佳粒子的位置 matlab 代碼如下 main m clear all close all clc x y meshgrid 100 100 100 100 sigma 50 img 1 2 pi sigma 2 exp x 2 y 2 2 sigma 2 目標函數 高 斯函數 mesh img hold on n 10 粒子群粒子個數 初始化粒子群 定義結構體 結構體中八個元素 分別是粒子坐標 粒子速度 粒子適應度 粒子最佳適應 度 粒子最佳坐標 par struct for i 1 n par i x 100 200 rand 100 100 對 x 位置隨機初始化 par i y 100 200 rand 100 100 對 y 位置隨機初始化 par i vx 1 2 rand 1 1 對 vx 速度隨機初始化 精品文檔 37歡迎下載 par i vy 1 2 rand 1 1 對 vy 速度隨機初始化 par i fit 0 粒子適應度為 0 初始化 par i bestfit 0 粒子最佳適應度為 0 初始化 par i bestx par i x 粒子 x 最佳位置初始化 par i besty par i y 粒子 y 最佳位置初始化 end par best par 1 初始化粒子群中最佳粒子 for k 1 10 plot3 par best x 100 par best y 100 par best fit g 畫出最佳 粒子的位置 100 為相對偏移 for p 1 n par p par best update par par p par best 更新每個粒子 信息 end end update par m function par par best update par par par best Px Px Pv t 這里 t 1 Px 為當前粒子的位置 Pv 為當前粒子的速度 par x par x par vx par y par x par vy par fit compute fit par 計算當前粒子適應度 Pv Pv c1 rand Gx Px c2 rand PBx Px 這里 c1 c2 為加速因子 Gx 為具有最佳適應度粒子的位置 PBx 為當前粒子的最佳位置 c1 1 c2 1 par vx par vx c1 rand par best x par x c2 rand par bestx par x par vy par vy c1 rand par best y par y c2 rand par besty par y if par fit par bestfit 如果當前粒子適應度要好于當前粒子最佳 適應度 par bestfit par fit 則更新當前粒子最佳適應度 par bestx par x 更新當前粒子最佳位置 par besty par y 精品文檔 38歡迎下載 if par bestfit par best fit 如果當前粒子最佳適應度好于最 佳粒子適應度 par best fit par bestfit 則更新最佳粒子適應度 par best x par x 更新最佳粒子位置 par best y par y end end end compute fit m function re compute fit par x par x y par y sigma 50 if x100 y100 re 0 超出范圍適應度為 0 else 否則適應度按目標函數求解 re 1 2 pi sigma 2 exp x 2 y 2 2 sigma 2 end end 16 Log Polar 就是所謂的極坐標變換 通過變換能將笛卡爾坐標系中的圖像映射到極坐標系中 確切的來說我這里不算是 Log Polar 因為 Log Polar 是將圖像從 x y 映射到 log r theta 而我是將圖像從 x y 映射到 r theta 原理是一樣的 變換公式是 x r cos theta y r sin theta 其中 r 代表極徑 theta 代表極角 這些應該學過高中的都會的 下圖能形象的表示變換 精品文檔 39歡迎下載 似乎有通過此變換求圖像特征的算法 不過具體操作我也不清楚 我這里只是實現了變換的操作 原圖如下 以圖像中心作為極坐標原點進行極坐標變換 matlab 代碼如下 精品文檔 40歡迎下載 clear all close all clc img double imread lena jpg imshow img m n size img ox oy ginput 獲得極坐標變換的原點 oy round oy ox round ox 求中心點到圖像四個角的距離 up left sqrt oy 0 2 ox 0 2 up right sqrt oy 0 2 ox n 2 down left sqrt oy m 2 ox 0 2 down right sqrt oy m 2 ox n 2 求中心點距離四角距離的最大值 作為變換后圖像的高 這個最大值也是極坐標變換的極徑 radius round max up left up right down left down right angle 360 變換后圖像的寬 imgn zeros radius angle for i 1 radius 縱坐標代表極徑 不同情況不一樣 for j 1 angle 橫坐標代表極角 恒為 360 oy ox 作為極坐標變換中心坐標 需要作為偏移量相加 h oy round i sin j pi 180 w ox round i cos j pi 180 if h 0 最鄰近插值 因為前面求 h w 用了 round end end end figure imshow imgn 17 通過本篇和上一篇的結合 應該就能做出拉普拉斯圖像融合了 這里用的方法很簡單 就是用模板和兩個圖像相乘 然后對處理后的兩個圖像再相加就可以了 精品文檔 41歡迎下載 拉普拉斯融合就是對金字塔的每一層圖像做這樣的操作 然后再重構就行了 先看看這里的效果 原圖 apple 原圖 orange 模板圖像 實際處理時需要對模板進行模糊 精品文檔 42歡迎下載 融合后圖像 matlab 代碼如下 clear all close all clc apple double imread apple jpg orange double imread orange jpg m n size apple maska ones m 220 zeros m n 220 masko 1 maska 精品文檔 43歡迎下載 maska imfilter maska fspecial gaussian 20 10 replicate same masko imfilter masko fspecial gaussian 20 10 replicate same re maska apple masko orange imshow re 18 過去研究過高斯金字塔 不過今天看來 當時似乎搞錯了 金字塔上下層應該是采樣的關系 而不是縮放的關系 而且不同層的 sigma 應該也有所不同 拉普拉斯金字塔在圖像融合中有所應用 方法是首先對兩個待融合圖像求拉普拉斯殘差金字塔 然后用模板對每一級殘差圖像進行融合得到融合后圖像的殘差金字塔 然后對這個金字塔進行 重構就能得到最終的融合圖像 圖像各尺度細節得到保留 注 融合時模板一般會先用高斯 函數模糊一下 不過這里不實現融合 只實現拉普拉斯金字塔的建立 建立金字塔的方框圖如下 摘自 數字圖像處理 第二版 通過 j 1 級近似圖像和 j 級殘差圖像就能恢復 j 級輸入圖像 近似濾波器就是拉普拉斯濾波模板 插入濾波器是對拉普拉斯濾波模板采樣形成的新濾波模板 使用的拉普拉斯濾波模板如下 w 1 256 1 4 6 4 1 4 16 24 16 4 6 24 36 24 6 4 16 24 16 4 1 4 6 4 1 產生的殘差金字塔 精品文檔 44歡迎下載 前面四張圖像都是殘差 最后一張圖像是原圖的 4 級近似 通過最后一張圖和殘差圖 就能重 構回原圖 matlab 代碼如下 main m clear all close all clc img double imread lena jpg m n size img w 1 256 1 4 6 4 1 拉普拉斯濾波器 4 16 24 16 4 6 24 36 24 6 4 16 24 16 4 1 4 6 4 1 imgn 1 img for i 2 5 濾波 下采樣 imgn i imfilter imgn i 1 w replicate imgn i imgn i 1 2 size imgn i 1 1 1 2 size imgn i 2 1 i 1 級近似 end for i 5 1 2 調整圖像大小 imgn i 1 imgn i 1 1 2 size imgn i 1 1 2 size imgn i 2 end for i 1 4 獲得殘差圖像 i 級預測殘差 精品文檔 45歡迎下載 imgn i imgn i expand imgn i 1 w end for i 4 1 1 殘差圖像重構原圖像 imgn i imgn i expand imgn i 1 w end imshow uint8 imgn 1 expand m function re expand img w img double img w w 4 m n size img M N size w 插入濾波器 w up left w 1 2 M 1 2 N w up right w 1 2 M 2 2 N w down left w 2 2 M 1 2 N w down right w 2 2 M 2 2 N img up left imfilter img w up left replicate same img up right imfilter img w up right replicate same img down left imfilter img w down left replicate same img down right imfilter img w down right replicate same re zeros m 2 n 2 上采樣 re 1 2 m 2 1 2 n 2 img up left re 2 2 m 2 1 2 n 2 img up right re 1 2 m 2 2 2 n 2 img down left re 2 2 m 2 2 2 n 2 img down right end 19 RANSAC 在圖像拼接中有所使用 有時候也在圖像理解的相關算法中有所使用 算法簡介如下 摘自 圖像處理 分析與機器視覺 第 3 版 精品文檔 46歡迎下載 1 假設我們要將 n 個數據點 X x1 x1 xn 擬合為一個由至少 m 個點決定的模型 m n 對 于直線 m 2 我這里實際是兩個不同均值 協方差高斯分布產生的數據 2 設迭代計數 k 1 3 從 X 中隨機選取 m 個項并擬合一個模型 我這里直線擬合 選了 2 個項 4 給定偏差 計算 X 中相對于模型的殘差在偏差 的個數 如果元素個數大于一個閾值 t 根 據一致點集重新擬合模型 可以利用最小二乘或其變種 算法終止 我這里的偏差為 1 閾值為數據個數的 2 3 5 設 k k 1 如果 k 小于一個事先給定的 K 跳至第 3 步 否則采用具有迄今最大的一致點集模 型 或算法失敗 運行效果如下 紅圈是所有的數據 藍叉是符合擬合模型的數據 matlab 代碼如下 main m close all clear all clc 真實的數據 mu 0 0 均值 S 1 2 5 2 5 8 協方差 data1 mvnrnd mu S 200 產生 200 個高斯分布數據 噪聲數據 mu 2 2 S 8 0 0 8 data2 mvnrnd mu S 100 產生 100 個噪聲數據 精品文檔 47歡迎下載 data data1 data2 plot data 1 data 2 ro 顯示全部數據 K 100 設置最大迭代次數 sigma 1 設置擬合直線與數據距離的偏差 pretotal 0 符合擬合模型的數據的個數 k 1 while pretotal size data 1 2 3 產生兩個隨機索引 找樣本用 floor 向下取整 samp1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論