matlab 图像置乱,[转载]Matlab图像混沌置乱

首先说明,这个混沌序列置乱其实和很多置乱方式比如随机数置乱的原理相同,但是缺点就是在图像置乱之前首先得生成一个你图像长乘宽大小的混沌序列,如果图像的分辨率比较大,那么在matlab下产生混沌序列的时间比较长,但是图像置乱的效果很好

%图像置乱程序

%作者:ltx1215

%日期:2010年8月7日

%采用的是混沌置乱算法

clear;

[filename, pathname] = uigetfile('*.jpg', '打开原始图像')

filename= [pathname filename];

J=imread(filename);

info=imfinfo(filename);

[m,n,p]=size(J);

%产生混沌序列

x(1)=0.5;

for i=1:m*n-1

x(i+1)=3.7*x(i)*(1-x(i));

end

[y,num]=sort(x);%将产生的混沌序列进行排序

%如果原图为灰度图

if info.BitDepth==8

Scambled=uint8(zeros(m,n));%产生一个与原图大小相同的0矩阵

for i=1:m*n

Scambled(i)=J(num(i));

end

%如果原图为二值图像

elseif info.BitDepth==1

S=uint8(zeros(m,n));

for i=1:m

for

j=1:n if J(i,j)==1

S(i,j)=255; end

end

end

Scambled=uint8(zeros(m,n));%产生一个与原图大小相同的0矩阵

for i=1:m*n

Scambled(i)=S(num(i));

end

end

%如果为真彩图

if

p==3

Red=uint8(zeros(m,n));

Green=uint8(zeros(m,n));

Blue=uint8(zeros(m,n));

RedNew=J(:,:,1);

GreenNew=J(:,:,2);

BlueNew=J(:,:,3);

Scambled=uint8(zeros(m,n,p));%产生一个与原图大小相同的0矩阵

for i=1:m*n

Red(i)=RedNew(num(i));

Green(i)=GreenNew(num(i));

Blue(i)=BlueNew(num(i));

end

Scambled(:,:,1)=Red;

Scambled(:,:,2)=Green;

Scambled(:,:,3)=Blue;

end imwrite(Scambled,'Scambled.jpg','quality',100); imshow(Scambled);

…………………………………………………………………………………………………………………………………

……分割线…………………………………………………………

图像反置乱程序:

%图像反置乱程序

%作者:ltx1215

10年8月10日

[filename, pathname] = uigetfile('*.jpg', '打开原始图像')

filename= [pathname filename];

J=imread(filename);

info=imfinfo(filename);

[m,n,p]=size(J);

%产生混沌序列

x(1)=0.5;

for i=1:m*n-1

x(i+1)=3.7*x(i)*(1-x(i));

end

[y,num]=sort(x);%将产生的混沌序列进行排序

%如果原图为灰度图

if info.BitDepth==8

IScamble=uint8(zeros(m,n));%产生一个与原图大小相同的0矩阵

for i=1:m*n

IScamble(num(i))=J(i);

end

%如果原图为二值图像

elseif info.BitDepth==1

S=uint8(zeros(m,n));

for i=1:m

for j=1:n

if J(i,j)==1

S(i,j)=255;

end

end

end

IScamble=uint8(zeros(m,n));%产生一个与原图大小相同的0矩阵

for i=1:m*n

IScamble(num(i))=S(i);

end

end

%如果为真彩图

if

p==3

Red=uint8(zeros(m,n));

Green=uint8(zeros(m,n));

Blue=uint8(zeros(m,n));

RedNew=J(:,:,1);

GreenNew=J(:,:,2);

BlueNew=J(:,:,3);

IScamble=uint8(zeros(m,n,p));%产生一个与原图大小相同的0矩阵

for i=1:m*n

Red(num(i))=RedNew(i);

Green(num(i))=GreenNew(i);

Blue(num(i))=BlueNew(i);

end

IScamble(:,:,1)=Red;

IScamble(:,:,2)=Green;

IScamble(:,:,3)=Blue;

end

imwrite(IScamble,'IScambled.jpg','quality',100);

imshow(IScamble);

原始图像:

a4c26d1e5885305701be709a3d33442f.png

置乱后:

a4c26d1e5885305701be709a3d33442f.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值