分形压缩图像源代码(图像分割算法代码)
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站长 原创,转载请注明出处和附带本文链接;
- 上一篇:给我写信代码(写信怎么写)
- 下一篇:织梦怎么设置404代码(织梦如何设置404)
相关推荐
- 05-09网页代码,网页代码快捷键
- 05-07pb超级报表源代码(pb报表工具)[20240507更新]
- 05-07简历源代码可以上传照片的简单介绍[20240507更新]
- 05-07广告切换源代码免费下载(广告切换源代码免费下载安装)[20240507更新]
- 05-06单页网站的代码(完整的网页代码)[20240506更新]
- 05-06阁楼网源代码(阁楼是什么网站)[20240506更新]
- 05-06个人主页图片代码(个人主页图片代码怎么弄)[20240506更新]
- 05-06提取微信名片代码(微信名片信息提取)[20240506更新]
- 05-06php后台权限管理代码(php管理员权限)[20240506更新]
- 05-06付费观看代码php(付费观看代码)[20240506更新]
取消回复欢迎 你 发表评论:
- 标签列表
- 最近发表
- 友情链接