matlab演算法視頻
❶ 誰能告訴我在MATLAB中怎麼用遺傳演算法優化BP神經網路,最好能有個學習視頻了
工具箱比較麻此遲派煩,最森賀好還是編程實現。
其實,BP神經網路調用也就一旦族句話:
net_1=newff(minmax(P),[10,1],{'tansig','purelin'},'traingdm')
'tansig','purelin'},'traingdm'就是閾值函數,決定你的閾值
❷ 如何利用matlab軟體實現水印添加和提取
3 視頻水印的嵌入和檢測方案
3.1水印的預處理
採用二值圖像作為待嵌入的水印數據,本文針對的研究對象因為是二維圖像故採用的是二維Arnold變換。
二維Arnold變換定義為:
(3-1)
其中,(x,y)是原圖像的像素點,(x』,y』)是變換後新圖像的像素點,N是圖像階數,即圖像的尺寸大小,一般多為正方形圖像。由於Arnold變換具有周期性,因此可利用其周期性Period來對圖像進行反變換。即在水印嵌入過程中可將水印置亂次數作為密鑰times,再進行水印嵌入,當水印提取出來時,再將其繼續: (Period-times)次即可使其恢復至原圖。這就是利用Arnold的正變換來進行的置亂恢復方案。Arnold變換次數由版權所有者保管。
對水印進行置亂有以下優點:
(1) 採用置亂技術的合法者可以自由控制演算法的選擇,參數的選擇以及使用隨機數技術,從而使非法使用者難以破譯圖像內容,可以提高水印信息的安全性;
(2) 置亂技術可以分散錯誤比特的分布,提高數字水印的視覺效果,從而增強其魯棒性。
3.2 視頻水印的嵌入
水印嵌入演算法關鍵在於以下三點:
(1) 水印的結構;
(2) 水印的嵌入區域;
(3) 嵌入技巧;
本文選取二值圖像作為水印。為了提高水印的魯棒性,大多數的DCT域水印演算法把水印信號嵌入到DCT系數的低頻部分。但低頻區域是圖像的能量集中部分,嵌入到低頻會降低透明性。而嵌入在高頻雖然透明性比較好,但對大多數的圖像處理對高慎拿碧頻成分影響較大,從而降低水印的魯棒性.於是大多數的水印演算法將水印信號嵌入在載體圖像DCT系數的中頻部分,以達到透明性和魯棒性的最佳折衷。各種嵌入技巧敏舉的最終目的還是為了盡量地提高水印的魯棒性和透明性。
用於版權保護的數字水印在盡量提高魯棒性的同時還要滿足人類的視覺極限,因此必須根據HVS找到嵌入位置。
本文將HVS歸納為運動敏感性、紋理敏感性和亮度敏感性。在接下來的嵌入過程中,充分利用了這些特性。如圖3-1中間分支所示。
嵌入過程如圖3-1所示。
圖3-1 水印嵌入過程
從視頻中讀取亮度分量Y,因為它是最有效的數據,根據NEC演算法,嵌入到它裡面的水印才具有最強的魯棒寬舉性。根據式(3-2)所示的運動敏感性閾值計算公式,尋找32幀滿足敏感性比較大的視頻幀Yi (i=1,2,…32)。
(3-2)
其中 (t代表當前幀的編號)
接下來,將Y32中的數據按照64*64的尺寸切分成20塊BYij (j=1,2,…20),於是我們可得到20塊尺寸為64*64*32的三維數據塊BYk (k=1,2,…20),如圖2-3所示。
圖3-2 亮度分量的分塊
根據式(3-3)、式(3-4)所示的亮度敏感性Lk和紋理敏感性Dk計算公式,通過計算,我們選擇計算值都比較高的20塊數據中的一塊 ( )作為水印的嵌入塊。
(3-3)
(3-4)
其中, 是BYk中的亮度數據, 。
最後,折衷考慮復雜度和性能,我們對選定的一塊數據塊 實施了2階三維DCT變換。根據NEC演算法的思想,且為了抵抗濾波和壓縮攻擊,我們將置亂後的水印序列嵌入到了第一幀DCT系數c(u,v)中,詳見式(3-5)。
(3-5)
其中,w(u,v)是水印序列中的數據,c(u,v)是DCT變換後第一幀中的系數,c』(u,v)是嵌入水印後的系數,S是非負整數(且滿足T1=S/4, T2=3*T1)。
嵌入完成後,對c』(u,v)實施反2階三維DCT變換就得到了嵌入水印後的視頻數據,再將它們放回原來的位置即可。
需要說明的是,在整個嵌入過程中,所有用到的參數都應作為密鑰保留。
具體方案如下所述:
第一步:抽取32幀視頻Y分量數據:
(1) 讀取視頻文件;
(2) 提取所有的Y分量,把所有的Y分量分為32組;
(3) 每組4幀,從各組中選出一個最運動敏感的,判斷每組中最大的Y_deltmax,存入變數m;
(4) 定位最大的Y_deltmax,存入變數w;
Y32是就是所需的視頻幀中Y分量滿足敏感性的32幀視頻 (355*288*32)。
第二步:分塊過程:
(1) 對行分塊(4塊);
(2) 對列分塊(5塊);
(3) 隔十幀取一幀,共從32幀中取4幀以降低運算量;
(4) 一個數一個數的賦值;
切成20塊,每塊為64*64*4的數據塊BY,維數不同,只能逐個象素賦值。
第三步:根據公式計算數據塊BY的亮度敏感性L和紋理敏感性D
第四步:選取L和D都比較大的一塊嵌入水印
(1) 判斷最大的L,存入變數Lm;
(2) 去掉這個最大的塊再比較;
(4) 賦第一塊的L的權重為20;
(5) 計算第2塊到第20塊的L的權重;
(6) 同理對D進行處理;
(7) 計算每塊BY的權重;
(8) 對所有的20塊BY的權重qz按由小到大的順序進行排序,並保持原來的位置索引index,則index[20]就是所要選取的塊;
第五步:三維DCT變換
由於視頻是由圖像數據流組成的,所以可以把視頻的每一幀看作是一幅靜止的圖像。對運動圖像序列進行3D-DCT,可以視為先對視頻的每一幀進行2D-DCT,再對幀間方向進行1D-DCT。
第六步:嵌入水印數據
將置亂的水印序列嵌入所選的DCT系數中,即嵌入經過3D-DCT變換後的數據塊中的第一幀數據中。然後把這些數據進行反3D-DCT變換後放回原位置。
第七步:將所選的數據放回原位置
最後一步:寫視頻文件
3.3視頻水印的檢測
水印提取是嵌入的逆過程,本演算法的一大優勢是,水印提取時無需原始視頻數據的參與,但依然需要一些參數。它們是:
(1) 嵌入過程第四步產生的塊BY的排序結果,由此我們可以得知水印的大致嵌入位置;
(2) 嵌入時指定的參數S;
(3) 需要Arnold變換的次數和周期;
獲得了上面的各項參數,水印的提取就十分簡單,具體過程如圖3-3所示。
圖3-3 水印盲提取過程
方案如下:
從待提取水印的視頻數據 (可能是被攻擊過後的視頻)中抽取出亮度分量Y』,根據密鑰,抽出32幀中的四幀亮度分量 ,然後分別從這組數據中提取水印。
在圖3-3中,首先將 分隔成20塊 ,並找到和 對應的 。然後,對 做二階三維DCT變換,根據式(3-6)提取出水印數據 。
(3-6)
其中, 是DCT系數。
最後,我們將 進行Arnold變換,得到水印圖像,作為最終提取出的水印。
具體步驟如下所述:
第一步:抽取32幀視頻Y分量數據:
(1) 讀取嵌入水印圖像的視頻文件;
(2) 提取所有的Y分量,把所有的Y分量分為32組;
(3) 每組4幀,從各組中選出一個最運動敏感的,判斷每組中最大的Y_deltmax,存入變數m;
(4) 定位最大的Y_deltmax,存入變數w;
Y32是就是所需的視頻幀中Y分量滿足運動敏感性的32幀視頻,Y32是一個355*288*32的三維數組。
第二步:分塊過程:
(1) 對行分塊(4塊);
(2) 對列分塊(5塊);
(3) 隔十幀取一幀,從32幀中共取4幀以降低運算量;
(4) 一個數一個數的賦值;
切成20塊,每塊為64*64*4的數據塊BY,維數不同,只能逐個象素賦值。
經過計算其亮度敏感性和紋理敏感性並排序,index[20]就是本文演算法中嵌入水印的塊;
第三步:三維DCT變換
第四步:Arnold變換
由於本演算法中水印圖像是二值圖像,其Arnold變換是二維變換,周期是Period,嵌入水印時變換了times次,所以此處只需變換(Period-times)次就可得到結果。
第五步:寫圖像文件
提取水印圖像數據並寫成圖像文件
第六步:檢測水印圖像存在與否,並與原水印圖像比較。
最後一步:進行實驗,驗證本文演算法的可見性和魯棒性。
經過以上步驟就是水印圖像信息嵌入視頻中的方法,具體實現過程見第四章。
4 用MATLAB實現視頻水印的嵌入和檢測
Matlab是近年來在國內外廣泛流行的一種可視化科學計算軟體。它的特點是結構簡單、數值計算高效、圖形功能完備、圖像處理方便,是國際公認的最優秀的科學計算與數學應用軟體之一。利用Matlab實現數字水印圖像演算法便捷、高效,省去了繁瑣的程序代碼,避免了科研人員在編程上浪費精力。
其內容已涉及矩陣代數、微積分、應用數學、信號與系統、神經網路、小波分析及應用、數字圖像處理、計算機圖形學、自動控制與通信技術等諸多方面,是科學計算、系統模擬、信號與圖像處理的主流軟體,受到了各方科研人員的青睞,在數字水印技術中得到了廣泛的應用。將Matlab應用於數字水印技術,其優點主要有以下幾個方面:
(1) 強大的數值計算功能
視頻水印技術是針對圖像進行研究的,而圖像是由矩陣表達的,將水印嵌入視頻中及從視頻中將水印提取出來都意味著大量的矩陣運算,而矩陣運算更是Matlab語言的核心,表達自然、直接。因此,利用Matlab強大的矩陣運算功能來實現圖像水印技術非常合適。
(2) 方便的圖像讀取和顯示功能
視頻水印首先要將數據從視頻中讀取出來,嵌入水印後還要將嵌入水印後的數據還原為視頻。Matlab為用戶提供了專門的圖像處理函數,用於讀寫顯示圖像數據。這種方法不像其他編程語言那樣,需要編寫復雜的代碼,只需要簡單地調用Matlab提供的函數即可,相關的函數及其功能主要有下列一些:
imread 將圖像讀入工作空間;
imwrite 將圖像寫入磁碟;
image 提供最原始的圖像顯示函數;
imshow 是最常用的顯示各種圖像的函數;
load將文件讀入工作空間;
(3) 高效的圖像變換功能
數字水印嵌入演算法一般分空域方法和頻域方法。空域方法指通過改變象素的亮度值來加入數字水印:頻域方法指圖像通過某種變換後再嵌入數字水印。與空域法相比,頻域法具有如下優點:在變換域中嵌入的水印信號可以分布到空域的所有象素上,有利於保證水印的不可見性。在變換域中,視覺系統的某些特性(如視頻特性)可以更方便地結合到水印編碼過程中。變換域的方法可以與國際數據壓縮標准兼容,從而實現壓縮域內的水印編碼。因此,變換域的方法應是水印演算法未來趨勢的主流。但是變換域的演算法一般來講計算量都比較大,需要復雜的編程運算,Matlab則改變了這種現狀。在Matlab圖像處理工具箱中,提供了常用的圖像變換函數,復雜的變換域演算法在Matlab中只需簡單地調用函數即可實現,充分體現了使用Matlab的簡便性和高效性。
主要圖像變換函數如下:
dct是一維離散餘弦變換;
idct是一維離散餘弦逆變換;
dct2是二維離散餘弦變換;
idct2是二維離散餘弦逆變換;
(4) 豐富的圖像處理函數
水印技術要求嵌入的水印不可見且有較強的魯棒性。不可見性可通過視覺效果和計算圖像的峰值信噪比來比較優劣,而魯棒性則要對水印後圖像進行各種攻擊,通過比較攻擊後圖像提取出的水印情況來說明問題。Matlab有各種圖像處理函數,可實現對圖像的各種攻擊。
綜上所述,Matlab具有語言簡潔、函數豐富、使用方便、數值計算高效等特點,將功能強大的Matlab軟體應用於數字水印技術是有效的選擇,因此,本文採用Matlab對圖像水印進行研究。
4.1水印的嵌入過程
(1) 基於Arnold變換的圖像置亂
Matlab實現如下:
Arnold變換由function r=Arnold(w0,row,colum,times) 實現,其中w0為讀取的圖像數據,row是行數,colum是列數,times是Arnold變換次數。
function r=Arnold(w0,row,colum,times)
for k=1:times
for i=1:row
for j=1:colum
i1=i+j;
j1=i+2*j;
if i1>row
i1=mod(i1,row);
end
if j1>colum
j1=mod(j1,colum);
end
if i1= =0
i1=row;
end
if j1= =0
j1=colum;
end
w1(i1,j1)=w0(i,j);
end
end
w0=w1;
end
r=w0;
用imwrite(w0,'Arnold.bmp', 'bmp')寫置亂後的圖像文件;在MATLAB中用imshow('Arnold.bmp')顯示此圖像。
本文採用二維的二值水印圖像watermark.bmp,我們將圖像數據(64*64)掃描到二維的矩陣中並實施Arnold變換,從而得到置亂後的二維矩陣。隨著迭代次數的增加,圖像逐漸趨於混亂,不過到一定次數時,又將回到原圖。因為watermark.bmp大小為64*64,故經過試驗圖像迭代48次後將回到原圖,即周期性Period=48。
本演算法選擇置亂8次,因為8次Arnold變換後原水印圖像已經成為無形狀的圖像。實驗結果表明,該方法能較好地刻劃圖像的置亂程度,與人的視覺基本相符。但需要指出的是不一定圖像的置亂次數越多其置亂度就越高。所以,在水印嵌入時,為了提高其魯棒性而增加置亂次數的方法是不科學的,合理的做法是計算置亂後圖像的置亂度,達到較為滿意的置亂度後就可停止置亂,避免盲目的提高置亂次數。
置亂次數作為密鑰有視頻版權所有者保管,如果非法所有者不知道置亂次數就很難恢復出原水印圖像。
原水印圖像如圖4-1所示,本演算法實現置亂8次後效果如圖4-2所示:
圖4-1 水印原圖像 圖4-2 置亂8次後
(2)Matlab實現嵌入過程:
本文中選取352×288×142的yuv格式視頻流進行測試。YUV顏色模型是一種常用的顏色模型,其基本特徵是將亮度信號與顏色信號分離,由於人眼對亮度的變化比對顏色的變化敏感,因此,YUV模型中Y分量的值所佔帶寬大於等於彩色分量所佔帶寬。YUV色彩空間模型可以在一定程度上避免RGB模型的高分散性和高相關性所帶來的閉值劃分問題,計算也較為簡單。這種色彩空間模型中Y和UV分量是相互獨立的,反映了人眼觀察彩色的視覺規律,在實際中應用較多。其中「Y」表示明亮度(Luminance或Luma),也就是灰階值;而「U」和「V」表示的則是色度(Chrominan「或Chroma),作用是描述影像色彩及飽和度,用於指定像素顏色。因此選擇YUV顏色空間更加穩定,易於分析。
本文選擇測試視頻中的第39幀如圖4-3所示。YUV格式的視頻中Y:U:V=4:2:2,但通俗叫「420」格式。
圖4-3 未嵌入水印的視頻
第一步:讀取文件;
讀取視頻文件由[yuv,Y,u,v,num_f]=loadyuv(filename)實現,filename是所選取得視頻文件名稱。yuv是一個四維數組,它返回的是視頻的yuv分量,Y是亮度分量,u和v是色彩分量,num_f是視頻文件中所有幀的數目。
讀取一幀數據的YUV分量在Matlab中由以下源代碼實現:
function [YUV,Y,U,V] = loadFileYUV(width,heigth,Frame,fileName,format)
[Teil_h,Teil_b]=YUVFormat(format);
fileId = fopen(fileName,'r');
其中width:每一幀的寬度;heigth:每一幀的高度;Frame:當前load的那一幀;filename:視頻文件名;Teil_h:垂直比例參數;Teil_b:水平比例參數;YUV:返回值,返回YUV分量,是一個三維變數,本文演算法中將U、V分量的寬度和高度設成與Y一樣的了,因此U、V分量中有重復的。YUV(:,:,1)存放Y分量;YUV(:,:,2)存放U分量;YUV(:,:,3)存放V分量;Y,U,V是三個分量的實際值,二維矩陣,沒有重復,他們的長度可能不一樣。
Y_delt(j)=delt(Y(:,:,w(i)),Y(:,:,4*(i-1)+j));
其中Y_delt是當前幀與下一組各幀的Y的差,m(i)=max(Y_delt(j));判斷每組中最大的Y_deltmax,存入變數m,以此來得到每組中最運動敏感的視頻幀。w(i+1)=4*(i-1)+k定位最大的Y_deltmax,存入變數w。
最後得到Y32=double(Y(:,:,w)), Y32是視頻幀中Y分量滿足敏感性的32幀視頻是一個355*288*32的三維數組。
第二步:分塊;
分塊時因為需要塊標號,由此造成維數不同,所以只能逐個象素賦值,在Matlab中由BY(t1,t2,t3,j*5+k+1)= double(Y32((64*j+t1),(64*k+t2),i))實現,切成20塊,每塊為64*64*4的數據塊BY ,其中t1是塊的杭坐標,t2是塊的列坐標,t3幀標號,j*5+k+1是快標號。
第三步:三維DCT變換;
運動圖像序列的每一幀可以看作是靜止圖像 對運動圖像序列進行3D DCT,可以視為先對每幀進行2D DCT,再對幀間方向進行1D DCT。
%對每一塊的幀間方向進行1D DCT變換
for i=1:64
for j=1:64
dcta(i,j,1:4,index(20))=dct(BY(i,j,1:4,index(20)));
end
end
%對每一塊的每一幀進行2D DCT
for i=1:4
dct3a(:,:,i,index(20))=dct2(dcta(:,:,i,index(20)));
end
第四步:嵌入水印過程;
讀入二值水印圖像由message=double(imread('watermark.bmp'))實現 ,message是一個由0和1組成的二維數組。
將置亂的水印序列嵌入所選的dct系數中,源代碼如下所示:
其中dct3a是DCT系數,index[20]是紋理敏感性和亮度敏感性都比較好的一塊,S作為密鑰由版權所有者保管。
S=60;
T1=S/4;
T2=3*T1;
for i=1:64
for j=1:64
if (w2(i,j)==1)
if (dct3a(i,j,1,index(20))>=0)
dipin(i,j)=dct3a(i,j,1,index(20))-mod(dct3a(i,j,1,index(20)),S)+T1;
end
if (dct3a(i,j,1,index(20))<0)
dipin(i,j)=dct3a(i,j,1,index(20))+mod(abs(dct3a(i,j,1,index(20))),S)-T1;
end
end
if (w2(i,j,:)==0)
if (dct3a(i,j,1,index(20))>=0)
dipin(i,j)=dct3a(i,j,1,index(20))-mod(dct3a(i,j,1,index(20)),S)+T2;
end
if (dct3a(i,j,1,index(20))<0)
dipin(i,j)=dct3a(i,j,1,index(20))+mod(abs(dct3a(i,j,1,index(20))),S)-T2;
end
end
end
end
第五步:三維DCT反變換;
先對塊的第一幀進行二維DCT反變換,然後在對其它三幀進行二維反變換,最後對幀間方向進行一維DCT反變換。此過程由Matlab實現如下:
二維DCT反變換:
idcta(:,:,1,index(20))=idct2(dipin);
for i=2:4
idcta(:,:,i,index(20))=idct2(dct3a(:,:,i,index(20)));
end
對每一塊的幀間方向進行一維DCT反變換
for i=1:64
for j=1:64
idct3a(i,j,1:4,index(20))=idct(idcta(i,j,1:4,index(20)));
end
end
第六步:把這些數據放入原位置;
第七步:寫視頻文件;
寫視頻文件由以下程序實現,其中fileId為寫入視頻文件的位置。
fileId = fopen('vectra_w.yuv','wb')
fwrite(fileId,Y(:,:,i)' , 'uchar');
fwrite(fileId,u(:,:,i)' , 'uchar');
fwrite(fileId,v(:,:,i)' , 'uchar');
效果如圖4-4所示:
圖4-4 嵌入水印的視頻
4.2水印的檢測過程
水印的檢測過程就是嵌入水印的逆過程,其Matlab實現如下所示:
filename='vectra_w.yuv';此文件是對含有水印的視頻(可能是被攻擊過後的視頻)文件。
[yuv,Y,u,v,num_f]=loadyuv(filename);
讀取視頻文件和三維DCT正變換其原理和嵌入過程相同,此處不再贅述。
提取水印數據在Matlab中由以下程序實現,其中S、T1、T2等都是嵌入時的密鑰,版權所有者擁有它。
for i=1:64
for j=1:64
if (mod(abs(dct3b(i,j,1,index(20))),S)<((T1+T2)/2))
shuiyin(i,j)=1;
end
if (mod(abs(dct3b(i,j,1,index(20))),S)>=((T1+T2)/2))
shuiyin(i,j)=0;
end
end
end
Arnold反變換如下所示:
w0=shuiyin;
w2=Arnold(w0,Hm,Wm,40);
w0是檢測到的水印數據,Hm和Wm是水印數據的行和列,變換次數為40。
寫水印文件,檢測水印圖像存在與否,並且和原水印圖像有無差異。
imwrite(w2,'恢復.bmp', 'bmp');
imshow('恢復.bmp');
綜上,水印的嵌入主要經過將視頻和水印分別進行預處理,然後根據嵌入演算法選擇水印的合適嵌入位置以及合理嵌入策略,從而得到含水印的視頻數據。在各個環節中採用HVS特性來提高視頻水印的魯棒性.最後用相應的視頻水印檢測策略提取出水印從而實現視頻的保護。結果顯示本文演算法能成功提取出水印圖像。
❸ MATLAB 7.0
附件說明
關於MATLAB的入門視頻有不少,但要稱的上完整、系統,恐怕很難有統一的標准。
我提供的是胡曉冬,董辰輝的《MATLAB從入門到精通》(人民郵電出版社,2010-06)一書的配套光碟,應該能滿足你的需求。內含217個實常式序文件,330分鍾的視頻講解。
圖書下載
ishare.iask.sina.com.cn/f/67219177.html
圖書簡介
本書以MATLABR2009a軟體為基礎,系統講解了MATLAB基本環境和操作方法。本書介紹了最新的MATLAB功能,並分章闡述了數據類型、數值計算、符號計算、編程基礎、可視化、Simulink、應用程序介面等內容,結合案例詳細講解了MATLAB語言的使用。本書還專門講解了實用的MATLAB編程技巧與數學建模應用等。
本書所帶的光碟是讀者學習MATLAB的好幫手,提供了全部示例的源程序,另外配有知識點和例題的視頻教程,可幫助讀者更好地理解書中的內容並更快地掌握MATLAB的使用方法。
本書內容豐富、貼近實戰應用,可作為高校學生系統學習MATLAB的書籍,也可以作為廣大科研和工程技術人員在工作中使用MATLAB的參考書。
圖書目錄
第1章MATLAB概述1
1.1MATLAB簡介1
1.2MATLAB主要功能2
1.2.1開發演算法和應用程序2
1.2.2分析和訪問數據3
1.2.3實現數據可視化3
1.2.4進行數值計算4
1.2.5發布結果和部署應用程序5
1.3MATLAB安裝與啟動5
1.3.1MATLAB的安裝5
1.3.2MATLAB的啟動與退出7
1.3.3Desktop操作界面簡介8
1.4CommandWindow運行入門8
1.4.1命令行的使用8
1.4.2數值、變數和表達式9
1.4.3命令行的特殊輸入方法11
1.4.4命令窗口的顯示格式12
1.4.5命令窗口常用快捷鍵與命令13
1.5CommandHistory窗口14
1.6CurrentDirectory窗口14
1.7WorkspaceBrowser和VariableEditor窗口15
1.7.1WorkspaceBrowser窗口15
1.7.2VariableEditor窗口15
1.8命令行輔助功能與FunctionBrowser16
1.9Help17
1.9.1HelpBrowser18
1.9.2命令窗口查詢幫助18
第2章矩陣和數組20
2.1矩陣的創建與組合20
2.1.1創建簡單矩陣20
2.1.2創建特殊矩陣21
2.1.3矩陣的合並22
2.2矩陣的尋訪與賦值23
2.2.1矩陣的標識23
2.2.2矩陣的尋訪24
2.2.3矩陣的賦值24
2.3進行數組運算的常用函數25
2.3.1函數數組運算規則的定義25
2.3.2進行數組運算的常用函數25
2.4查詢矩陣信息27
2.4.1矩陣的形狀信息27
2.4.2矩陣的數據類型27
2.4.3矩陣的數據結構28
2.5數組運算與矩陣運算28
2.6矩陣的重構29
2.6.1矩陣元素的擴展與刪除29
2.6.2矩陣的重構30
2.7稀疏矩陣31
2.7.1稀疏矩陣的存儲方式32
2.7.2稀疏矩陣的創建32
2.7.3稀疏矩陣的運算35
2.7.4稀疏矩陣的交換與重新排序36
2.7.5稀疏矩陣視圖38
2.8多維數組38
2.8.1多維數組的創建39
2.8.2多維數組的尋訪與重構41
2.9多項式的表達式及其操作44
2.9.1多項式的表達式和創建44
2.9.2多項式運算函數45
第3章數據類型47
3.1數值型47
3.2邏輯型47
3.2.1邏輯型簡介47
3.2.2返回邏輯結果的函數48
3.2.3運算符的優先順序50
3.3字元和字元串51
3.3.1創建字元串51
3.3.2字元串比較52
3.3.3字元串查找與替換53
3.3.4類型轉換54
3.3.5字元串應用函數小結55
3.4structure數組56
3.4.1structure數組的創建57
3.4.2structure數組的尋訪59
3.4.3structure數組域的基本操作60
3.4.4structure數組的操作61
3.5cell數組63
3.5.1cell數組的創建63
3.5.2cell數組的尋訪65
3.5.3cell數組的基本操作65
3.5.4cell數組操作函數66
3.6Map容器67
3.6.1Map數據類型介紹67
3.6.2Map對象的創建68
3.6.3查看Map的內容69
3.6.4Map的讀寫70
3.6.5Map中key和value的修改72
3.6.6映射其他數據類型73
第4章數值計算75
4.1因式分解75
4.1.1行列式、逆和秩75
4.1.2Cholesky因式分解77
4.1.3LU因式分解78
4.1.4QR因式分解79
4.1.5范數81
4.2矩陣特徵值和奇異值82
4.2.1特徵值和特徵向量的求取82
4.2.2奇異值分解84
4.3概率和統計85
4.3.1基本分析函數85
4.3.2概率函數、分布函數、逆分布函數和隨機數93
4.4數值求導與積分94
4.4.1導數與梯度94
4.4.2一元函數的數值積分95
4.4.3二重積分的數值計算97
4.4.4三重積分的數值計算97
4.5插值98
4.5.1一維數據插值98
4.5.2二維數據插值99
4.5.3多維插值100
4.5.4樣條插值100
4.6曲線擬合101
4.6.1最小二乘原理及其曲線擬合演算法101
4.6.2曲線擬合的實現102
4.7Fourier分析102
4.8微分方程104
4.8.1常微分方程104
4.8.2偏微分方程106
第5章符號計算110
5.1符號變數、表達式及符號方程110
5.1.1符號變數與表達式的創建110
5.1.2符號計算中的運算符和基本函數112
5.1.3創建符號方程113
5.2符號微積分113
5.2.1符號求導與微分113
5.2.2符號求極限115
5.2.3符號積分116
5.2.4級數求和116
5.2.5Taylor級數117
5.3符號表達式的化簡與替換117
5.3.1符號表達式的化簡118
5.3.2符號表達式的替換122
5.4符號可變精度計算125
5.5符號線性代數127
5.5.1基礎代數運算127
5.5.2線性代數運算128
5.6符號方程求解130
5.6.1求代數方程符號解130
5.6.2求代數方程組的符號解130
5.6.3求微分方程符號解132
5.6.4求微分方程組的符號解134
5.7符號積分變換134
5.7.1Fourier變換及其反變換134
5.7.2Laplace變換及其反變換135
5.7.3Z變換及其反變換136
第6章MATLAB編程基礎138
6.1M文件138
6.1.1M文件編輯器139
6.1.2M文件的基本內容140
6.1.3腳本式M文件142
6.1.4函數式M文件143
6.2流程式控制制143
6.2.1順序結構144
6.2.2if語句144
6.2.3switch語句146
6.2.4for循環146
6.2.5while循環147
6.2.6continue命令148
6.2.7break命令149
6.2.8return命令150
6.2.9人機交互命令150
6.3函數的類型152
6.3.1主函數152
6.3.2子函數152
6.3.3私有函數153
6.3.4嵌套函數154
6.3.5重載函數157
6.3.6匿名函數157
6.4函數的變數161
6.4.1變數類型161
6.4.2變數的傳遞162
6.5函數句柄164
6.5.1函數句柄的創建165
6.5.2函數句柄的調用165
6.5.3函數句柄的操作166
6.6串演算函數167
6.6.1eval函數167
6.6.2feval函數168
6.6.3inline函數169
6.7內存的使用170
6.7.1內存管理函數170
6.7.2高效使用內存的策略170
6.7.3解決「OutofMemory」問題172
6.8程序調試和優化173
6.8.1使用Debugger窗口調試173
6.8.2在命令窗口中調試176
6.8.3profile性能檢測178
6.9錯誤處理180
6.9.1使用try-catch語句捕捉錯誤180
6.9.2處理錯誤和從錯誤中恢復181
6.9.3警告183
第7章數據可視化185
7.1繪圖的基本知識185
7.1.1離散數據和離散函數的可視化185
7.1.2連續函數的可視化186
7.1.3可視化的一般步驟187
7.2二維圖形187
7.2.1基本繪圖函數187
7.2.2曲線的色彩、線型和數據點型189
7.2.3坐標、刻度和網格控制190
7.2.4圖形標識192
7.2.5雙坐標圖和子圖195
7.2.6雙軸對數圖形197
7.2.7特殊二維圖形197
7.3三維圖形203
7.3.1繪制三維曲線圖203
7.3.2繪制三維曲面圖203
7.3.3特殊三維圖形205
7.4三維圖形的高級控制207
7.4.1視點控制207
7.4.2顏色的使用208
7.4.3光照控制208
第8章圖像處理210
8.1圖像文件的操作210
8.1.1查詢圖像文件的信息211
8.1.2圖像文件的讀寫212
8.1.3圖像文件的顯示213
8.1.4圖像格式的轉換214
8.2圖像的幾何運算216
8.2.1圖像的平移216
8.2.2圖像的鏡像變換216
8.2.3圖像縮放217
8.2.4圖像的旋轉218
8.2.5圖像的剪切218
8.3圖像的正交變換219
8.3.1傅立葉變換219
8.3.2離散餘弦變換220
8.3.3Radon變換221
8.4MATLAB圖像增強222
8.4.1像素值及其統計特性222
8.4.2對比度增強224
8.4.3直方圖均衡化225
8.4.4空域濾波增強226
8.4.5頻域增強228
第9章圖形用戶界面(GUI)設計230
9.1句柄圖形對象230
9.1.1圖形對象230
9.1.2圖形對象句柄231
9.1.3圖形對象屬性的獲取和設置232
9.2GUIDE簡介234
9.2.1啟動GUI235
9.2.2Layout編輯器235
9.2.3運行GUI236
9.3創建GUI236
9.3.1GUI窗口布局236
9.3.2菜單的添加237
9.3.3控制項241
9.4CallBack函數245
9.4.1變數的傳遞245
9.4.2函數編寫246
9.5GUI設計示例248
第10章數據文件I/O254
10.1處理文件名稱254
10.2MATLAB支持的文件格式255
10.3導入向導的使用256
10.4MAT文件的讀寫257
10.4.1MAT文件的寫入257
10.4.2MAT文件的讀取258
10.5Text文件讀寫259
10.5.1Text文件的讀取259
10.5.2Text文件的寫入262
10.6Excel文件讀寫262
10.7音頻/視頻文件操作264
10.7.1獲取音頻/視頻文件的文件頭信息264
10.7.2音頻/視頻文件的導入與導出264
第11章MATLAB優化問題應用266
11.1MATLAB優化工具箱266
11.1.1MATLAB求解器267
11.1.2極小值優化269
11.1.3多目標優化275
11.1.4方程組求解276
11.1.5最小二乘及數據擬合277
11.2模式搜索法278
11.3模擬退火演算法280
11.3.1模擬退火演算法簡介280
11.3.2模擬退火演算法應用實例280
11.3.3關於計算結果281
11.4遺傳演算法282
11.4.1遺傳演算法簡介282
11.4.2遺傳演算法應用實例283
11.5OptimizationTool簡介285
第12章信號處理289
12.1信號處理基本理論289
12.1.1信號的生成289
12.1.2數字濾波器結構293
12.2IIR濾波器的MATLAB實現294
12.2.1IIR濾波器經典設計295
12.2.2IIR濾波器直接設計法301
12.2.3廣義巴特沃思IIR濾波器設計302
12.3FIR濾波器的MATLAB實現303
12.3.1FIR濾波器設計303
12.3.2fir1函數304
12.3.3fir2函數305
第13章Simulink模擬306
13.1Simulink簡介306
13.1.1Simulink功能與特點306
13.1.2Simulink的安裝與啟動307
13.2Simulink基礎309
13.2.1Simulink模型是什麼309
13.2.2Simulink模塊操作309
13.2.3Simulink信號線操作312
13.2.4Simulink對模型的注釋314
13.2.5Simulink常用的模型庫314
13.2.6Simulink模擬配置316
13.3Simulink動態系統模擬320
13.3.1簡單系統的模擬分析320
13.3.2離散系統的模擬分析322
13.3.3連續系統的模擬分析324
13.4Simulink模型中的子系統327
13.4.1子系統的建立327
13.4.2子系統的封裝328
13.5SimulinkS-函數331
13.5.1什麼是S-函數332
13.5.2S-函數的作用和原理332
13.5.3用M文件創建S-函數實例333
第14章應用程序介面336
14.1MATLAB應用程序介面介紹336
14.2MATLAB調用C/C++337
14.2.1MATLABMEX文件338
14.2.2C-MEX文件的使用341
14.3C/C++調用MATLAB引擎346
14.3.1MATLAB計算引擎概述346
14.3.2MATLAB計算引擎庫函數347
14.3.3C/C++調用MATLAB引擎348
14.4MATLAB編譯器352
14.4.1MATLAB編譯器的安裝和設置353
14.4.2MATLAB編譯器的使用354
14.4.3獨立應用程序356
第15章MATLAB基礎計算技巧365
15.1MATLAB數組創建與重構技巧365
15.2MATLAB數據類型使用技巧371
15.3MATLAB數值計算技巧373
15.4MATLAB文件讀取操作技巧375
15.5MATLAB繪圖技巧376
第16章MATLAB編程技巧379
16.1MATLAB編程風格379
16.1.1命名規則379
16.1.2文件與程序結構381
16.1.3基本語句382
16.1.4排版、注釋與文檔385
16.2MATLAB編程注意事項387
16.3內存的使用389
16.4提高MATLAB運行效率390
16.4.1提高運行效率基本原則390
16.4.2提高運行效率舉例392
第17章MATLAB在數學建模中的應用395
17.1MATLAB蒙特卡羅模擬395
17.1.1蒙特卡羅方法簡介395
17.1.2蒙特卡羅方法編程示例396
17.2MATLAB灰色系統理論應用398
17.2.1GM(1,1)預測模型簡介398
17.2.2灰色預測計算實例399
17.3MATLAB模糊聚類分析401
17.3.1模糊聚類分析簡介401
17.3.2模糊聚類分析應用示例402
17.4MATLAB層次分析法應用406
17.4.1層次分析法簡介406
17.4.2層次分析法的應用409
❹ 關於matlab的演算法
說清楚你的問題
❺ matlab 演算法如何使用
遺傳演算法可以用來最優化計算,即計算一個東西的最大或最小的東西,或者最優解。不知道你想用來具體解決什麼問題,沒法仔細回答。你把具體想幹啥和原始數據發到郵箱[email protected],我可以幫你解答
❻ 視頻壓縮 運動估計演算法 matlab代碼
這幾種運動估計都比較簡單,我建議你參考《視頻信號處理》這本書
我給你FS的代碼你可以參考
python">function[f_diff_final,MVs]=BlockMatch(fc,fr,N,W,type,bShow)
%[f_diff,MVs]=BlockMatch(fc,fr,N,W,type,bShow)
%Blockmatchingalgorithm.
%fcisthecurrentframe,fristherefernceframe.
%.
%+1X2W+1.
%type:searchingstrategy('FS'=default,'TSS','TDL','OTS','CSA','OSA')
%bShow:(default:0).
%typeisthesearchingstrategies,currentlyonly"FS"(fullsearch)is
%supported.
%,
%f_diff,,MVs(whichisa
%2-Dcellmatrix).
f_diff_final=[];
f_diff=[];
MVs=[];
ifnargin<2
disp('Atleasttwpargumentsareneeded!');
return;
end
ifany(size(fc)~=size(fr))
disp('!');
return;
end
ifnargin<6
bShow=0;
ifnargin<5
type='FS';%Fullsearch
ifnargin<3
N=8;
end
ifnargin<4
W=N*2;
end
end
end
N_1=N-1;
f_size=size(fc);
fc=double(fc);
fr=double(fr);
ifnumel(f_size)~=2
disp('Theinputframesmustbe2-Dmatrices!');
return;
end
ifany(rem(f_size,N)~=0)
disp('!');
return;
end
height=f_size(1);
width=f_size(2);
f_diff=zeros(f_size);
MVs=cell(height/N,width/N);
forx=1:N:width
fory=1:N:height
%Setsearchingwindow.
ymin=max(1,y-W);
ymin_1=ymin-1;
ymax=min(height-N_1,y+W);
xmin=max(1,x-W);
xmin_1=xmin-1;
xmax=min(width-N_1,x+W);
fc_block=fc(y:y+N_1,x:x+N_1);%To-be-encodedblock.
xxyys_checked=zeros(ymax-ymin_1,xmax-xmin_1);%Flagsforcheckedlocations.
%Addnewsearchingstrategieshere....
%{'FS','FullSearch','FullSearch'};
MSEs=Inf(ymax-ymin_1,xmax-xmin_1);
block_diff=cell(size(MSEs));
forxx=xmin:xmax
foryy=ymin:ymax
block_diff_new=fc_block-fr(yy:yy+N_1,xx:xx+N_1);
block_diff{yy-ymin_1,xx-xmin_1}=block_diff_new;
MSEs(yy-ymin_1,xx-xmin_1)=mean(abs(block_diff_new(:)));
end
end
%GettheminimalMSEandthe1-Dindex.
[MSE_min,index]=min(MSEs(:));
%Transformthe1-Dindexinto2-Dindex.
[yy_min,xx_min]=ind2sub(size(MSEs),index);
%Setthemotionvector.
MVs{ceil(y/N),ceil(x/N)}=[ymin+yy_min-yxmin+xx_min-x];
%.
f_diff(y:y+N_1,x:x+N_1)=block_diff{yy_min,xx_min};
end
end
f_diff_final=int16(f_diff);
❼ MATLAB設計的實現的視頻處理演算法,可以寫成Android軟體么
1、Matlab直接轉出來的jar包還需要MCR(如果沒有裝完整的matlab的話)才能在其大蘆他系統中運行
2、Android系統中由於CPU的問題,不能安裝MCR
3、有這些間接實現的辦法
1)不要在App上用Matlab代碼,轉移到伺服器上
2)用MATLAB Coder編譯成可以不需要MCR支持才能運行的C/C++文件,然後使用JNI的方法在Android App上使用
3)中鄭可以通過一種【include the MATLAB code in a MATLAB Function block in Simulink and tell Simulink to target Android】的方法來做滾培帶(存疑)
❽ 你好!請問你找到了MATLAB智能演算法30個案例分析的視頻教程了嗎
沒有,找了好久。就只有電子書和code。。。好久不看了忘記下載到哪了