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
查
用
另外
神經網路
工具箱
遺傳算
工具箱
都
用