導航:首頁 > 源碼編譯 > 分形演算法matlab

分形演算法matlab

發布時間:2023-08-08 12:51:41

A. 怎樣用matlab計算分形盒維數呢!

根據計盒維數原理求一維曲線分形維數的matlab程序
function D=FractalDim(y,cellmax)
%求輸入一維信號的計盒分形維數
%y是一維信號
%cellmax:方格子的最大邊長,可以取2的偶數次冪次(1,2,4,8...),取大於數據長度的偶數 %D是y的計盒維數(一般情況下D>=1),D=lim(log(N(e))/log(k/e)),
if cellmax<length(y)
error('cellmax must be larger than input signal!')
end
L=length(y);%輸入樣點的個數
y_min=min(y);
%移位操作,將y_min移到坐標0點
y_shift=y-y_min;
%重采樣,使總點數等於cellmax+1
x_ord=[0:L-1]./(L-1);
xx_ord=[0:cellmax]./(cellmax);
y_interp=interp1(x_ord,y_shift,xx_ord);
%按比例縮放y,使最大值為2^^c
ys_max=max(y_interp);
factory=cellmax/ys_max;
yy=abs(y_interp*factory);
t=log2(cellmax)+1;%疊代次數
for e=1:t
Ne=0;%累積覆蓋信號的格子的總數
cellsize=2^(e-1);%每次的格子大小
NumSeg(e)=cellmax/cellsize;%橫軸劃分成的段數
for j=1:NumSeg(e) %由橫軸第一個段起通過計算縱軸跨越的格子數累積N(e) begin=cellsize*(j-1)+1;%每一段的起始
tail=cellsize*j+1;
seg=[begin:tail];%段坐標
yy_max=max(yy(seg));
yy_min=min(yy(seg));
up=ceil(yy_max/cellsize);
down=floor(yy_min/cellsize);
Ns=up-down;% 本段曲線佔有的格子數
Ne=Ne+Ns;%累加每一段覆蓋曲線的格子數
MATLAB是美國MathWorks公司出品的商業數學軟體,用於演算法開發、數據可視化、數據分析以及數值計算的高級技術計算語言和互動式環境,主要包括MATLAB和Simulink兩大部分。
MATLAB是matrix&laboratory兩個詞的組合,意為矩陣工廠(矩陣實驗室)。是由美國mathworks公司發布的主要面對科學計算、可視化以及互動式程序設計的高科技計算環境。它將數值分析、矩陣計算、科學數據可視化以及非線性動態系統的建模和模擬等諸多強大功能集成在一個易於使用的視窗環境中,為科學研究、工程設計以及必須進行有效數值計算的眾多科學領域提供了一種全面的解決方案,並在很大程度上擺脫了傳統非互動式程序設計語言(如C、Fortran)的編輯模式,代表了當今國際科學計算軟體的先進水平。
MATLAB和Mathematica、Maple並稱為三大數學軟體。它在數學類科技應用軟體中在數值計算方面首屈一指。MATLAB可以進行矩陣運算、繪制函數和數據、實現演算法、創建用戶界面、連接其他編程語言的程序等,主要應用於工程計算、控制設計、信號處理與通訊、圖像處理、信號檢測、金融建模設計與分析等領域。
MATLAB的基本數據單位是矩陣,它的指令表達式與數學、工程中常用的形式十分相似,故用MATLAB來解算問題要比用C,FORTRAN等語言完成相同的事情簡捷得多,並且MATLAB也吸收了像Maple等軟體的優點,使MATLAB成為一個強大的數學軟體。在新的版本中也加入了對C,FORTRAN,C++,JAVA的支持。

B. 求教高人,用MATLAB軟體怎樣的實現圖像的分形壓縮

分形編碼的基本思路是:先採用一種合適的初級壓縮方法對圖像進行壓縮,得到一組壓縮編碼,然後解碼這組編碼,得到一幅解壓縮圖像.對解碼圖像與原始圖像求差值,得到一差值圖像,然後對該差值圖像進行適當的編碼.對差值圖像的編碼與初級編碼共同構成對原始圖像的編碼.這種方法需要選擇合適的初級編碼方法與差值編碼方法,使得這兩者相結合,可以得到一種綜合性能較好的編碼方法。

其定義如圖。

%%%%%%%%%%%%%%

clear

tic

%Image1=imread('piccameraman.tif');

xianshi;

number=input('inputthenumber:');

Image1=suoxiao('piccameraman.tif',number);

[imagemimagen]=size(Image1);

Sr=4;Sd=8;

Rnum=(imagem/Sr)*(imagen/Sr);

Dnum=(imagem/Sd)*(imagen/Sd);

Image2=zeros(Dnum,Sr,Sr);

Image2=blkproc(Image1,[Sd/Sr,Sd/Sr],'mean(mean(x))');

%壓縮image1為原來1/2

%

RBlocks=zeros(Rnum,Sr,Sr);

DBlocks=zeros(Dnum,Sd,Sd);

DBlocksRece=zeros(Dnum*8,Sr,Sr);

%%取R塊,K記標號----------------------------------

fori=1:imagem/Sr

forj=1:imagen/Sr

k=(i-1)*imagen/Sr+j;

RBlocks(k,:,:)=Image1((i-1)*Sr+1:i*Sr,(j-1)*Sr+1:j*Sr);

end

end

%取R塊,K記標號----------------------------------

fori=1:imagem/Sd

forj=1:imagen/Sd

k=(i-1)*imagen/Sd+j;

m=Sr;n=Sr;

DBlocksRece(k,:,:)=Image2((i-1)*Sr+1:i*Sr,(j-1)*Sr+1:j*Sr);

DBlocksRece(k+Dnum,:,:)=DBlocksRece(k,m:-1:1,:);%行上下翻轉===(x軸對稱)

DBlocksRece(k+2*Dnum,:,:)=DBlocksRece(k,:,n:-1:1);%列左右翻轉====y軸對稱

DBlocksRece(k+3*Dnum,:,:)=DBlocksRece(k,m:-1:1,n:-1:1);%先行翻,再列翻旋轉180度

DBlocksRece(k+4*Dnum,:,:)=reshape(DBlocksRece(k,:,:),Sr,Sr)';%關於y=-x對稱

A=reshape(DBlocksRece(k+3*Dnum,:,:),Sr,Sr)';

DBlocksRece(k+5*Dnum,:,:)=A(:,n:-1:1);%關於y=x對稱

DBlocksRece(k+6*Dnum,:,:)=imrotate(reshape(DBlocksRece(k,:,:),Sr,Sr),90);%逆時針旋轉90度

DBlocksRece(k+7*Dnum,:,:)=imrotate(reshape(DBlocksRece(k,:,:),Sr,Sr),270);%逆時針旋轉270度

DBlocks(k,:,:)=Image1((i-1)*Sd+1:i*Sd,(j-1)*Sd+1:j*Sd);

end

end

RandDbest=zeros(Rnum,1)+256^3;

RandDbests=zeros(Rnum,1);

RandDbesto=zeros(Rnum,1);

RandDbestj=zeros(Rnum,1);

fori=1:Rnum

x=reshape(RBlocks(i,:,:),Sr*Sr,1);

meanx=mean(x);

forj=1:Dnum*8

y=reshape(DBlocksRece(j,:,:),Sr*Sr,1);

meany=mean(y);

s=(x-meanx)'*(y-meany)/((y-meany)'*(y-meany));%計算s

o=(meanx-s*meany);%計算o

c=(x-s*y-o)'*(x-s*y-o);%距離

if(RandDbest(i)>c)&(abs(s)<1)

RandDbest(i)=c;

RandDbests(i)=s;

RandDbesto(i)=o;

RandDbestj(i)=j;%可以找到對應變換和D塊

end

end

end

%iterationlimit

toc

tic

m=8;%解碼迭代次數

e=mean(mean(Image1));

Image3=e*ones(imagem,imagen);%解碼初始圖象

forL=1:m

Image4=blkproc(Image3,[Sd/Sr,Sd/Sr],'mean(mean(x))');

fori=1:imagem/Sr

forj=1:imagen/Sr

m=Sr;n=Sr;

k=(i-1)*imagen/Sr+j;

l=RandDbestj(k);

k1=mod(l-1,Dnum)+1;%第幾個D

l1=(l-k1)/Dnum+1;%變換號

%R對應D在Image4的起始點

j1=mod(k1-1,imagen/Sd)+1;

i1=(k1-j1)/(imagen/Sd)+1;

%變換------------------------------------------------------------------------

DBlocksRece(k1,:,:)=Image4((i1-1)*Sr+1:i1*Sr,(j1-1)*Sr+1:j1*Sr);

switchl1-1

case0

DBlocksRece(l,:,:)=Image4((i1-1)*Sr+1:i1*Sr,(j1-1)*Sr+1:j1*Sr);

case1

DBlocksRece(l,:,:)=DBlocksRece(k1,m:-1:1,:);

case2

DBlocksRece(l,:,:)=DBlocksRece(k1,:,n:-1:1);

case3

DBlocksRece(l,:,:)=DBlocksRece(k1,m:-1:1,n:-1:1);

case4

DBlocksRece(l,:,:)=reshape(DBlocksRece(k1,:,:),Sr,Sr)';

case5

DBlocksRece(k1+3*Dnum,:,:)=DBlocksRece(k1,m:-1:1,n:-1:1);

A=reshape(DBlocksRece(k1+3*Dnum,:,:),Sr,Sr)';

DBlocksRece(l,:,:)=A(:,n:-1:1);

case6

DBlocksRece(l,:,:)=imrotate(reshape(DBlocksRece(k1,:,:),Sr,Sr),90);

case7

DBlocksRece(l,:,:)=imrotate(reshape(DBlocksRece(k1,:,:),Sr,Sr),270);

end

%變換結束--------------------------------------------------------------------

RBlocks(k,:,:)=RandDbests(k)*DBlocksRece(l,:,:)+RandDbesto(k);

%生成R---------------------------

Image3((i-1)*Sr+1:i*Sr,(j-1)*Sr+1:j*Sr)=reshape(RBlocks(k,:,:),Sr,Sr);%更新迭代圖象

end

end

wucha=double(Image1)-Image3;%誤差圖

Ps1(L)=20*log10(255/(sqrt(mean(mean(wucha.^2)))))

PSNR=psnr(wucha)

figure

imshow(uint8(Image3))

end

toc

figure

wucha=uint8(wucha);

imshow(wucha)

figure

imshow(uint8(Image1)),title('原圖');

save('sa.mat')

fangtu(wucha);%%%%分形主函數

%%%%%%%%%%%%%%%%%%%%%%%%%%%%

子函數:1:

functionb=suoxiao(filename,bili)

a=imread(filename);

a=double(a);

[m,n]=size(a);

i=1;

whilei=m/bili

j=1;

whilej=n/bili

k=mean(mean(a(bili*(i-1)+1:bili*(i-1)+bili,bili*(j-1)+1:bili*(j-1)+bili)));

b(i,j)=k;

j=j+1;

end

i=i+1;

end

%b=uint8(b);

size(b)

%imshow(b)

子函數2:

%clc

functionfangtu(a)

J=a;

%計算灰度圖象的直方圖數據,a為如象數組

L=256;%灰度級

Ps=zeros(L,1);%統計直方圖結果數據

nk=zeros(L,1);

[row,col]=size(a);

n=row*col;%總像素個數

fori=1:row

forj=1:col

num=double(a(i,j))+1;%獲取像素點灰度級

nk(num)=nk(num)+1;%統計nk

end

end

%計算直方圖概率估計

fori=1:L

Ps(i)=nk(i)/n;

end

figure;

subplot(3,1,1);imshow(J),title('誤差圖');

subplot(3,1,2),plot(nk),title('直方圖(nk)');

subplot(3,1,3),plot(Ps),title('直方圖(Ps)');

子函數3:

functionPSNR=psnr(a)

[m,n]=size(a);

a=uint8(a);

a=double(a);

imagesize=m*n;

MSE=sum(dot(a,a))/imagesize;

PSNR=10*log10(255^2/MSE);

%%%%%%%%%%%%%%%%%%%%%%

說明:

1、因為本程序時間長,FX中先選擇圖片的大小

2、編碼與解碼

3、做誤差圖和只方圖

4:畫出每次迭代的解碼圖象

C. 分形維數計算用什麼軟體

採用MATLAB,編寫過分形維數計算程序,發過冊廳歷兩篇文章州搜,《壓頭作用下岩石破碎過程分形特性研究》及《非均質岩石單軸壓縮試驗破壞伏枝過程細觀模擬及分形特性》,已經成功運行,如需要,可聯系。

D. matlab 分形中一排樹怎麼做

給你兩個我以前做分形的例子

閱讀全文

與分形演算法matlab相關的資料

熱點內容
上門正骨用什麼app 瀏覽:756
安卓為什麼免費使用 瀏覽:397
加密貨幣都有哪些平台 瀏覽:625
python和matlab難度 瀏覽:388
python爬蟲很難學么 瀏覽:572
小米解壓積木可以組成什麼呢 瀏覽:816
為什麼滴滴出行app還能用 瀏覽:564
怎麼升級手機android 瀏覽:922
php權威編程pdf 瀏覽:994
扣扣加密技巧 瀏覽:720
蘋果如何創建伺服器錯誤 瀏覽:497
軟考初級程序員大題分值 瀏覽:475
js壓縮視頻文件 瀏覽:579
linux如何通過命令創建文件 瀏覽:991
應用加密app還能訪問應用嘛 瀏覽:435
安卓怎麼用支付寶交違章罰款 瀏覽:667
php面向對象的程序設計 瀏覽:506
數據挖掘演算法書籍推薦 瀏覽:895
投訴聯通用什麼app 瀏覽:152
web伺服器變更ip地址 瀏覽:956