导航:首页 > 源码编译 > 分形算法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相关的资料

热点内容
苹果如何创建服务器错误 浏览:492
软考初级程序员大题分值 浏览:473
js压缩视频文件 浏览:578
linux如何通过命令创建文件 浏览:989
应用加密app还能访问应用嘛 浏览:432
安卓怎么用支付宝交违章罚款 浏览:665
php面向对象的程序设计 浏览:504
数据挖掘算法书籍推荐 浏览:894
投诉联通用什么app 浏览:150
web服务器变更ip地址 浏览:954
java正则表达式验证邮箱 浏览:360
成熟商务男装下载什么软件app 浏览:609
加密2h代表长度是多少厘米 浏览:23
拍卖程序员 浏览:101
电脑的图片放在哪个文件夹 浏览:274
unsignedintjava 浏览:216
编译器下载地址 浏览:42
什么是面对对象编程 浏览:708
b站服务器什么时候恢复 浏览:721
6p相当于安卓机什么水准 浏览:499