当前位置:首页 > 代码 > 正文

分形压缩图像源代码(图像分割算法代码)

admin 发布:2022-12-19 07:20 104


本篇文章给大家谈谈分形压缩图像源代码,以及图像分割算法代码对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

分形编码的分形编解码过程

分形编码压缩的步骤:

第一步:把图像划分为互不重叠的、任意大小的的D分区;

第二步:划定一些可以相互重叠的、比D分区大的R分区;

第三步:为每个D分区选定仿射变换表。

分形编码解压步骤:

首先从文件中读取D分区划分方式的信息和仿射变换系数等数据;

然后划定两个同样大小的缓冲区给D图像和R图像,并把R初始化到任一初始阶段;

根据仿射变换系数把其相应的R分区做仿射变换,并用变换后的数据取代该D分区的原有数据;

对D中所有的D分区都进行上述操作,全部完成后就形成一个新的D图像;

再把新D图像的内容拷贝到R中,把新R当作D,D当作R,重复操作(迭代)。

分形彩图的C或者matlab的源代码(至少3段)

#includegraphics.h

#includestdlib.h

#includemath.h

int main()

{

float m,dx,dy,x,y,x_n,y_n,Cx,Cy;

int n,i,j,L=4;

int gdriver=DETECT,gmode; //gdriver和gmode分别表示图形驱动器和模式,gdriver=DETECT是在测试显示器硬件

initgraph(gdriver,gmode,""); //初始化图形模式

setbkcolor(1); //设置背景色为蓝色

dx=3.0/639;

dy=2.2/479;

for(i=0;i639;i++)

{

Cx=-1.9+i*dx;

for(j=0;j479;j++)

{

Cy=-1.2+j*dy;

x=y=0;

for(n=0;n=1000;n++)

{

x_n=x*x-y*y+Cx;

y_n=2*x*y+Cy;

m=x_n*x_n;

if(mL) break;

x=x_n;

y=y_n;

}

putpixel(i,j,(int)(0.4*m)%16); //在指定位置画一像素(坐标(i,j),第三个计算式为画点的颜色)

}

}

getch(); //任意键返回

closegraph(); //关闭图形模式并返回文本模式

}

关于颜色的设置如下:

━━━━━━━━━━━━━━━━━━━━━━━━━━

符号常数 数值 含义 字符或背景

——————————————————————————

BLACK 0 黑 两者均可

BLUE 1 兰 两者均可

GREEN 2 绿 两者均可

CYAN 3 青 两者均可

RED 4 红 两者均可

MAGENTA 5 洋红 两者均可

BROWN 6 棕 两者均可

LIGHTGRAY 7 淡灰 两者均可

DARKGRAY 8 深灰 只用于字符

LIGHTBLUE 9 淡兰 只用于字符

LIGHTGREEN 10 淡绿 只用于字符

LIGHTCYAN 11 淡青 只用于字符

LIGHTRED 12 淡红 只用于字符

LIGHTMAGENTA 13 淡洋红 只用于字符

YELLOW 14 黄 只用于字符

WHITE 15 白 只用于字符

BLINK 128 闪烁 只用于字符

求教高人,用MATLAB软件怎样的实现图像的分形压缩??

分形编码的基本思路是:先采用一种合适的初级压缩方法对图像进行压缩,得到一组压缩编码,然后解码这组编码,得到一幅解压缩图像.对解码图像与原始图像求差值,得到一差值图像,然后对该差值图像进行适当的编码.对差值图像的编码与初级编码共同构成对原始图像的编码.这种方法需要选择合适的初级编码方法与差值编码方法,使得这两者相结合,可以得到一种综合性能较好的编码方法。

其定义如图。

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

clear

tic

%Image1=imread('pic\cameraman.tif');

xianshi;

number=input(' input the number:');

Image1=suoxiao('pic\cameraman.tif',number);

[imagem imagen]=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

% there are no  eight tranformation for simpleness

RBlocks=zeros(Rnum,Sr,Sr);

DBlocks=zeros(Dnum,Sd,Sd);

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

%%取R块,K记标号----------------------------------

for i=1:imagem/Sr

for j=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记标号----------------------------------

for i=1:imagem/Sd

for j=1:imagen/Sd

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

m=Sr;n=Sr;

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

DBlocksReduce(k+Dnum,:,:)=DBlocksReduce(k,m:-1:1,:);              % 行上下翻转===(x轴对称)

DBlocksReduce(k+2*Dnum,:,:)=DBlocksReduce(k,:,n:-1:1);              % 列左右翻转 ==== y轴对称

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

DBlocksReduce(k+4*Dnum,:,:)=reshape(DBlocksReduce(k,:,:),Sr,Sr)';                       % 关于y=-x对称

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

DBlocksReduce(k+5*Dnum,:,:)=A(:,n:-1:1);     % 关于y=x对称

DBlocksReduce(k+6*Dnum,:,:)=imrotate(reshape(DBlocksReduce(k,:,:),Sr,Sr),90);           % 逆时针旋转90度

DBlocksReduce(k+7*Dnum,:,:)=imrotate(reshape(DBlocksReduce(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);

for i=1:Rnum

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

meanx=mean(x);

for j=1:Dnum*8

y=reshape(DBlocksReduce(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

%iteration limit

toc

tic

m=8;%解码迭代次数

e=mean(mean(Image1));

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

for L=1:m

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

for i=1:imagem/Sr

for j=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;

%变换------------------------------------------------------------------------

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

switch l1-1

case 0

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

case 1

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

case 2

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

case 3

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

case 4

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

case 5

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

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

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

case 6

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

case 7

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

end

%变换结束--------------------------------------------------------------------

RBlocks(k,:,:)=RandDbests(k)*DBlocksReduce(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')

zhifangtu(wucha);%%%%分形主函数

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

子函数:1:

function b=suoxiao(filename,bili)

a=imread(filename);

a=double(a);

[m,n]=size(a);

i=1;

while i=m/bili

j=1;

while j=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

function zhifangtu(a)

J=a;

%计算灰度图象的直方图数据,a为如象数组

L=256; %灰度级

Ps = zeros(L,1); %统计直方图结果数据

nk=zeros(L,1);

[row,col]=size(a);

n=row*col; %总像素个数

for i = 1:row

for j = 1:col

num = double(a(i,j))+1; %获取像素点灰度级

nk(num) = nk(num)+1; %统计nk

end

end

%计算直方图概率估计

for i=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:

function PSNR=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:画出每次迭代的解码图象

关于分形压缩图像源代码和图像分割算法代码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/4447.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载