導航:首頁 > 源碼編譯 > matlab爬山演算法

matlab爬山演算法

發布時間:2022-07-07 12:52:22

A. 求經典MATLAB分水嶺演算法源代碼

%%都不知道你是啥樣的分割 什麼圖片
clear, close all;
clc;
PathName='d:\';%t為自填內容,下面p類似
FileName=[PathName 'test.jpg'];
Image=imread(FileName);
subplot(2,2,1);subimage(Image);title('原圖');;pixval on;
B=[1,1,1;1,1,1;1,1,1];%方形結構元
E8=[-1,0;-1,1;0,1;1,1;1,0;1,-1;0,-1;-1,-1]; % 8-連通結構元坐標
maskLenth=length(E8); % 結構元點的個數
[X,Y]=size(Image);
%原始圖像image 賦值給A1
n=1;
A(:,:,n)=Image;
M=zeros(X,Y);
Mark_Image=zeros(X,Y);
%產生距離圖
while sum(sum(A(:,:,n)))~=0
A(:,:,n+1)= imerode(A(:,:,n),B);
U(:,:,n)= (A(:,:,n)-A(:,:,n+1))*n;
M=M+U(:,:,n);
n=n+1;
end
n=n-1;
subplot(2,2,2);imagesc(M,[0,n]);title('距離圖');
% 搜尋局部最大值,將其放入Deal_Image
Deal_Image=zeros(X,Y);
while n>0
for high=1:X
for width=1:Y
%********************************************************************
Mark_Bool=0;
if M(high,width)==n
%______________________________________________________________
for dot=1:maskLenth
i=E8(dot,1); j=E8(dot,2);
if high+i>=1 & width+j>=1 & high+i<=X & width+j<=Y & M(high+i,width+j)>M(high,width);
Mark_Bool=1;break;
end % if_end
end % for dot_end
%______________________________________________________________
if Mark_Bool==0;
Deal_Image(high,width)=M(high,width);
end %if end
%______________________________________________________________
end %if end
%********************************************************************
end %for-end
end %for-end
n=n-1;
end % while n=0 end
Deal_Image =[Deal_Image>=1]
subplot(2,2,3);subimage(Deal_Image);title('輸出圖像');

Mark_Number=1;

while n>0
for high=1:X
for width=1:Y
Mark_Bool=0;
%********************************************************************
if M(high,width)==n
%______________________________________________________________
for dot=1:maskLenth
i=E8(dot,1); j=E8(dot,2);
if high+i>=1 & width+j>=1 & high+i<=X & width+j<=Y & Mark_Image(high+i,width+j)>0;
Mark_Image(high,width)=Mark_Image(high+i,width+j);
Mark_Bool=1;break;
end % if_end
end % for dot_end
%______________________________________________________________
if Mark_Bool==0;
Mark_Image(high,width)=Mark_Number;
Mark_Number=Mark_Number+1;
end %if end
%______________________________________________________________
pause;
subplot(2,2,2);imagesc(Mark_Image,[0,Mark_Number]);title('輸出圖像');
end %if end
%********************************************************************
end %for-end
end %for-end
n=n-1;
end % while n=0 end

subplot(2,2,3);imagesc(Mark_Image,[0,Mark_Number]);title('分割後的圖像');

uicontrol('Style','edit','string',['分割出區域:',Num2str(Mark_Number-1),'個'],...
'Position', [400 0 150 18],'FontSize',12,'FontWeight','light');

B. 求大神告訴我這個matlab程序的演算法基本原理

在回答之前,我覺得有必要說明下自己的情況,本人剛接觸圖形處理不久(業余愛好),對圖像有一定了解,因此只能算是新手,另外我有使用過matlab的經驗,在這個基礎上嘗試回答下,希望幫助到你。

就這個程序而言,用imread函數讀入的是一個顏色圖(相較於灰階圖),得到的是一個M-by-N-by-3的矩陣,可以這樣理解,這個圖有M-by-N個像素點,每個點的顏色由R,G,B三個通道的值決定,或說每個像素點對應三個通道值。接著程序選擇了兩個像素點P1(1,1)和P2(1,2),即上下相鄰的兩個像素點,然後用這兩個像素點的通道值產生了兩對常量(K1,K2),(L1,L2),可以看到這兩對值用於後邊的變換。具體來說可以這樣看,如果我們認為1通道表示R通道(紅色通道),2通道表示G通道(綠色通道),3通道表示B通道(藍色通道),例如(1,1,1)、(1,1,2)、(1,1,3)分別表示像素點(1,1)rgb通道的值,那麼K1=(G1-G2)/(R1-R2),K2=G1-K1*R1,L1=(G1-G2)/(B1-B2),L2=G1-L1*B1,到這里似乎清楚了,for循環中的三個語句就是對原來r通道的值用(K1,K2)做個線性變換,g通道的值保持不變,b通道的值用(L1,L2)做個線性變換,至於為何這樣就色彩平衡了,看看K1,K2的定義(L1,L2類似),K1表示變化率,K1越大,相鄰像素r通道的差值越大,g通道也就相差越大(或相反,是K1正否),K2明顯就是截距,同時注意到兩個變換都基於g通道,在變換中g通道保持不變,這樣的話使得rb通道的值均接近g通道?網路給出的色彩平衡的含義如下:色彩平衡是圖像處理(PHOTOSHOP)軟體中一個重要環節。通過對圖像的色彩平衡處理,可以校正圖像色偏,過飽和或飽和度不足的情況,也可以根據自己的喜好和製作需要,調制需要的色彩,更好的完成畫面效果,應用於多種軟體和圖像、視頻製作中。注意裡面有一句調制自己想要的色彩這一句,或許可以回到之前的疑問,因為我隨便選用了一個圖像得到了如下結果:

以上或許只是個思路。

C. 急!!snake演算法怎麼使用(MATLAB)

主要公式為曲線能量Esnake(公式1);Esnake由內部能量Eint(公式2)及外部能量Eext(公式3)組成;而根據公式2內部能量Eint是由一階導得到的平滑性約束(彈性繩子)二階導得到的氣球約束(剛性棍子)共同決定;根據公式3外部能Eext由梯度場決定(另一個分量不考慮)那麼粗略表示為Esnake=Vs+Vss+Eext;可以認為當Esnake的能量達到最小時snake曲線和物體的邊緣一致。

上面這些基本是每個論文上面都有的,下面照我的理解來講。結合很多論文上用的那個U形物體,snake檢測它的輪廓時,預先以一個圓形的像素圈套住它作為初始的snake線,可以取一定個數的點來離散化snake線,那麼這時就可以求這條snake線與原始圖像間的曲線能量Esnake了;Vs對應的是一階的平滑性,可轉化為snake線中相鄰像素之間的坐標差;差值越大能量越大平滑性也就越差;Vss對應的是二階的剛性;可轉化為snake線中某點和它相鄰的線上點間的法線方向的增長度量;Eext是梯度場能量,是由原本的灰度圖決定的,可轉化為snake中某點在灰度圖中的鄰域梯度。求出了這三個;再以一定的方式進行循環逼近那個使Esnake最小的snake線就找到了輪廓。

D. matlab實現如下演算法,需要全部程序,編譯通過200分奉送

gfbg

E. 遺傳演算法、數值演算法、爬山演算法、模擬退火 各自的優缺點

遺傳演算法:其優點是能很好地處理約束,跳出局部最優,最終得到全局最優解。缺點是收斂速度慢,局部搜索能力弱,運行時間長,容易受到參數的影響。

模擬退火:具有局部搜索能力強、運行時間短的優點。缺點是全局搜索能力差,容易受到參數的影響。

爬山演算法:顯然爬山演算法簡單、效率高,但在處理多約束大規模問題時,往往不能得到較好的解決方案。

數值演算法:這個數值演算法的含義太寬泛了,指的是哪種數值演算法,陣列演算法與爬山演算法一樣,各有優缺點。

(5)matlab爬山演算法擴展閱讀:

注意事項:

遺傳演算法的機制比較復雜,在Matlab中已經用工具箱中的命令進行了打包,通過調用可以非常方便的使用遺傳演算法。

函數GA:[x,Fval,reason]=GA(@fitnessfun,Nvars,options)x為最優解,Fval為最優值,@Fitnessness為目標函數,Nvars為自變數個數,options為其他屬性設置。系統的默認值是最小值,所以函數文檔中應該加上一個減號。

要設置選項,您需要以下函數:options=GaOptimset('PropertyName1','PropertyValue1','PropertyName2','PropertyName3','PropertyValue3'…)通過該函數,可以確定一些遺傳演算法的參數。

F. 自動對焦實驗,需要一個程序(自動對焦圖像清晰度演算法):在Matlab中將20張圖挑出最清晰的一張

(來源網路)
常用的清晰度評價演算法有: 頻域函數  :對焦越好、高頻部分越多,細節越多,圖像越清晰。 灰度函數  :對焦越好,和周圍相鄰灰度點差值越大,邊緣越清晰,圖像越清晰。 信息熵函數:對焦越好,圖像包含的信息熵越大,包含信息量更大,圖像越清晰。 統計學函數:對焦越好,直方圖多樣性越好,圖像越清晰。 常用的搜索演算法有: 1、函數逼近法 2、Fibbonacci搜索法 3、爬山搜索演算法

G. matlab演算法

拉格朗日function y=lagrange(x0,y0,x)n=length(x0);m=length(x);for i=1:m z=x(i); s=0.0; for k=1:n p=1.0; for j=1:n if j~=k p=p*(z-x0(j))/(x0(k)-x0(j)); end end s=p*y0(k)+s; end y(i)=s;end SOR迭代法的Matlab程序 function [x]=SOR_iterative(A,b)% 用SOR迭代求解線性方程組,矩陣A是方陣 x0=zeros(1,length(b)); % 賦初值 tol=10^(-2); % 給定誤差界 N=1000; % 給定最大迭代次數 [n,n]=size(A); % 確定矩陣A的階 w=1; % 給定鬆弛因子 k=1; % 迭代過程 while k<=N x(1)=(b(1)-A(1,2:n)*x0(2:n)')/A(1,1); for i=2:n x(i)=(1-w)*x0(i)+w*(b(i)-A(i,1:i-1)*x(1:i-1)'-A(i,i+1:n)*x0(i+1:n)')/A(i,i); end if max(abs(x-x0))<=tol fid = fopen('SOR_iter_result.txt', 'wt'); fprintf(fid,'\n********用SOR迭代求解線性方程組的輸出結果********\n\n'); fprintf(fid,'迭代次數: %d次\n\n',k); fprintf(fid,'x的值\n\n'); fprintf(fid, '%12.8f \n', x); break; end k=k+1; x0=x; end if k==N+1 fid = fopen('SOR_iter_result.txt', 'wt'); fprintf(fid,'\n********用SOR迭代求解線性方程組的輸出結果********\n\n'); fprintf(fid,'迭代次數: %d次\n\n',k); fprintf(fid,'超過最大迭代次數,求解失敗!'); fclose(fid); end Matlab中龍格-庫塔(Runge-Kutta)方法原理及實現龍格-庫塔(Runge-Kutta)方法是一種在工程上應用廣泛的高精度單步演算法。由於此演算法精度高,採取措施對誤差進行抑制,所以其實現原理也較復雜。該演算法是構建在數學支持的基礎之上的。龍格庫塔方法的理論基礎來源於泰勒公式和使用斜率近似表達微分,它在積分區間多預計算出幾個點的斜率,然後進行加權平均,用做下一點的依據,從而構造出了精度更高的數值積分計算方法。如果預先求兩個點的斜率就是二階龍格庫塔法,如果預先取四個點就是四階龍格庫塔法。一階常微分方程可以寫作:y'=f(x,y),使用差分概念。(Yn+1-Yn)/h= f(Xn,Yn)推出(近似等於,極限為Yn')Yn+1=Yn+h*f(Xn,Yn)另外根據微分中值定理,存在0<t<1,使得Yn+1=Yn+h*f(Xn+th,Y(Xn+th))這里K=f(Xn+th,Y(Xn+th))稱為平均斜率,龍格庫塔方法就是求得K的一種演算法。利用這樣的原理,經過復雜的數學推導(過於繁瑣省略),可以得出截斷誤差為O(h^5)的四階龍格庫塔公式:K1=f(Xn,Yn);K2=f(Xn+h/2,Yn+(h/2)*K1);K3=f(Xn+h/2,Yn+(h/2)*K2);K4=f(Xn+h,Yn+h*K3);Yn+1=Yn+h*(K1+2K2+2K3+K4)*(
請採納。

H. 什麼是爬山演算法

爬山演算法是一種局部擇優的方法,採用啟發式方法,是對深度優先搜索的一種改進,它利用反饋信息幫助生成解的決策。 屬於人工智慧演算法的一種。

很高興為你解答滿意望採納

I. matlab的演算法有哪些急用!謝謝啊!



基本算
、數據結構

、數論與代數算
、計算幾何

、圖論


態規劃
及數值
析、加密
、排序算
、檢索算
、隨機化算
、並行算
等等
matlab

建議
載相應
工具箱

建模工具箱
編寫


短路徑
Dijkstra算
等等

help
dijkstra


另外
神經網路
工具箱
遺傳算
工具箱

閱讀全文

與matlab爬山演算法相關的資料

熱點內容
噴油螺桿製冷壓縮機 瀏覽:579
python員工信息登記表 瀏覽:377
高中美術pdf 瀏覽:161
java實現排列 瀏覽:513
javavector的用法 瀏覽:982
osi實現加密的三層 瀏覽:233
大眾寶來原廠中控如何安裝app 瀏覽:916
linux內核根文件系統 瀏覽:243
3d的命令面板不見了 瀏覽:526
武漢理工大學伺服器ip地址 瀏覽:149
亞馬遜雲伺服器登錄 瀏覽:525
安卓手機如何進行文件處理 瀏覽:71
mysql執行系統命令 瀏覽:930
php支持curlhttps 瀏覽:143
新預演算法責任 瀏覽:444
伺服器如何處理5萬人同時在線 瀏覽:251
哈夫曼編碼數據壓縮 瀏覽:426
鎖定伺服器是什麼意思 瀏覽:385
場景檢測演算法 瀏覽:617
解壓手機軟體觸屏 瀏覽:350