Matlab小波变换的系数和恢复问题

网上有关“Matlab小波变换的系数和恢复问题”话题很是火热,小编也是针对Matlab小波变换的系数和恢复问题寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。

CS是个好东西,首先非零个数可以直接用find, length( find(a~=0) ) 就是a中非零元素的个数。

求解1范数有工具包的,l1-magic.

你要得到右图,第一步需要把小波基写成矩阵Phi,假设要分解的信号是y, 利用l1magic ?求解 ?y=A*Phi*x , A是测量矩阵,如果你只是想用小波分解y,A取1就好了。 得到的x才是稀疏的,否则直接小波分解,得到的系数一般不稀疏

多看看压缩感知的基础,l1magic 也可以适当了解他的用法,对你肯定有帮助

这是我同学毕设:密文域图像可逆数据隐藏算法实现。也有水印部分 希望对你有帮助

这是matlab界面制作时用到的算法。

==============arnold.m==============置换指令

function index=arnold(row,col,s,number)

%This function is to permutatematrix

%row and col are the coordinates ofmatrix

%s is the size of matrix

%number is the number of permutation

permutate=[1 1;1 2];

index=mod((permutate*[row-1;col-1]),s);

for i=1:number-1

index=mod((permutate*index),s);

end

============载入原始===========

global original_p; %定义全局变量,可以使下面的m文件更加简洁明了

%点击按钮可以在文件中选择初始,暂时命名为str

[filename pathname] = …

uigetfile({‘*.jpg’;‘*.bmp’;‘*.gif’}, ‘开始’);

str=[pathname filename];

original_p=rgb2gray(imread(str));%将初始转换为灰度图,命名为original_p

axes(handles.axes1)

imshow(original_p); %将original_p在图表axes1中显示

==============加密图像=============

global original_p; %使用上面定义的全局变量original_p

global m n; %定义的全局变量m n encrypted_image random_bits

global encrypted_image random_bits;

[m,n]=size(original_p); %m n为original_p的长和宽

random_bits=rand(m,n*8)<=0.5; %伪随机序列

for i=1:m

for j=1:n

s=0;

for k=0:7

b(k+1)=mod(fix(double(original_p(i,j))/(2^k)),2); %像素转为二进制形式

eb(k+1)=xor(b(k+1),random_bits(i,8*j+k-7)); %将两个8位二进制异或

s=s+eb(k+1)*(2^k);

end

encrypted_image(i,j)=s; %的每个像素加密

end

end

encrypted_image=uint8(encrypted_image);

axes(handles.axes2)

imshow(encrypted_image); %在图表axes2中显示加密encrypted_image

===============水印===============

global m n; %使用上面定义的全局变量

global watermessage lim_row lim_col number1 number2 bitts sizex; %定义的全局变量

sizex=8; %分割得到的块的尺寸大小为8*8

N=6; %置乱系数

number1=3;

number2=N-number1;

lim_row=fix(m/sizex); %分块数

lim_col=fix(n/sizex); %分块数

bitts=3; %嵌入比特位

%使水印可以选择,暂时命名为sy

[filename pathname] = …

uigetfile({‘*.jpg’;’*.bmp’;’*.gif’}, ”);

sy=[pathname filename];

watermessage=im2bw(rgb2gray(imread(sy))); %将sy变成需要的二值图像

axes(handles.axes3)

imshow(watermessage); %将watermessage在图表axes3中显示

============嵌入数据==============

global encrypted_image watermessage lim_row lim_col number1 number2 bittssizex random_bits; %使用上面定义的全局变量,是程序简洁明了

global de_data_image; %定义全局变量

for i=1:lim_row

for j=1:lim_col

block_image{i,j}=encrypted_image((sizex*i-sizex+1):sizex*i,(sizex*j-sizex+1):sizex*j); %将加密分块

for k=1:sizex

for t=1:sizex

index=arnold(k,t,sizex,number1); %arnold是置换功能,此时k为1到32,t为1到32,sizex为32,number1为3;

arno_block_image{i,j}(index(1)+1,index(2)+1)=block_image{i,j}(k,t);

end

end

%数据嵌入

sum0=zeros(sizex/2,sizex);

if watermessage(i,j)==0 %当水印的值为0时

for k=0:7

bbb{k+1}=mod(fix(double(arno_block_image{i,j}(1:sizex/2,:))/(2^k)),2);

if k<bitts

bbb{k+1}=~bbb{k+1}; %取反

end

sum0=sum0+bbb{k+1}*(2^k);

end

data_image{i,j}=[sum0;double(arno_block_image{i,j}(sizex/2+1:sizex,:))];

end

sum1=zeros(sizex/2,sizex);

if watermessage(i,j)==1 %当水印的值为1时

for k=0:7

bbb{k+1}=mod(fix(double(arno_block_image{i,j}(sizex/2+1:sizex,:))/(2^k)),2);

if k<bitts

bbb{k+1}=~bbb{k+1};%取反

end

sum1=sum1+bbb{k+1}*(2^k);

end

data_image{i,j}=[double(arno_block_image{i,j}(1:sizex/2,:));sum1];

end

for k=1:sizex

for t=1:sizex

index=arnold(k,t,sizex,number2);%arnold;

re_data_image{i,j}(index(1)+1,index(2)+1)=data_image{i,j}(k,t);

end

end

%合成嵌入数据后的图像

data_en_image((sizex*i-sizex+1):sizex*i,(sizex*j-sizex+1):sizex*j)=re_data_image{i,j};

end

end

for i=1:lim_row*sizex

for j=1:lim_col*sizex

s=0;

for k=0:7

b(k+1)=mod(fix(data_en_image(i,j)/(2^k)),2);

eb(k+1)=xor(b(k+1),random_bits(i,8*j+k-7)); %对嵌入水印的加密图像进行异或初步解密,此时解密出的图像最低3位比特是错误的

s=s+eb(k+1)*(2^k);

end

de_data_image(i,j)=s;

end

end

data_en_image1=uint8(data_en_image);

axes(handles.axes4)

imshow(data_en_image1); %在表格axes4中显示axes4

=============恢复图像和提取水印==========

global encrypted_image watermessage lim_row lim_col number1 number2 bittssizex random_bits de_data_image; %使用上面定义的全局变量

for i=1:lim_row

for j=1:lim_col

block_de_image{i,j}=de_data_image((sizex*i-sizex+1):sizex*i,(sizex*j-sizex+1):sizex*j); %对初步解密的图像分块

for k=1:sizex

for t=1:sizex

index=arnold(k,t,sizex,number1);%arnold是置换功能

ar_block_de_image{i,j}(index(1)+1,index(2)+1)=block_de_image{i,j}(k,t);

end

end

sum0=zeros(sizex/2,sizex);

sum1=zeros(sizex/2,sizex);

for k=0:7

bbb0{k+1}=mod(fix(ar_block_de_image{i,j}(1:sizex/2,:)/(2^k)),2);

bbb1{k+1}=mod(fix(ar_block_de_image{i,j}(sizex/2+1:sizex,:)/(2^k)),2);

if k<bitts

bbb0{k+1}=~bbb0{k+1};

bbb1{k+1}=~bbb1{k+1};

end

sum0=sum0+bbb0{k+1}*(2^k);

sum1=sum1+bbb1{k+1}*(2^k);

end

ar_H0_image{i,j}=[sum0;ar_block_de_image{i,j}(sizex/2+1:sizex,:)];

ar_H1_image{i,j}=[ar_block_de_image{i,j}(1:sizex/2,:);sum1];

for k=1:sizex

for t=1:sizex

index=arnold(k,t,sizex,number2); %arnold是置换功能

H0_image{i,j}(index(1)+1,index(2)+1)=ar_H0_image{i,j}(k,t);

H1_image{i,j}(index(1)+1,index(2)+1)=ar_H1_image{i,j}(k,t);

end

end

f0=0;

f1=0;

for u=2:sizex-1

for v=2:sizex-1

f0=f0+abs(H0_image{i,j}(u,v)-(H0_image{i,j}(u-1,v)+H0_image{i,j}(u,v-1)+H0_image{i,j}(u+1,v)+H0_image{i,j}(u,v+1))/4);

f1=f1+abs(H1_image{i,j}(u,v)-(H1_image{i,j}(u-1,v)+H1_image{i,j}(u,v-1)+H1_image{i,j}(u+1,v)+H1_image{i,j}(u,v+1))/4);

end

end

if (f0-f1)<0

extract_bits(i,j)=0; %该块嵌入的水印数据为0

recover_image(sizex*i-sizex+1:sizex*i,sizex*j-sizex+1:sizex*j)=H0_image{i,j};

else

extract_bits(i,j)=1; %%该块嵌入的水印数据为1

recover_image(sizex*i-sizex+1:sizex*i,sizex*j-sizex+1:sizex*j)=H1_image{i,j};

end

end

end

axes(handles.axes6)

imshow(extract_bits); %在表格axes6中显示提取的水印

recover_image1=uint8(recover_image);

axes(handles.axes5)

imshow(recover_image1); %在表格axes5中显示最终复原的

关于“Matlab小波变换的系数和恢复问题”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!

特别申明:网站所收集到的公开内容均来自于互联网或用户投稿,并不代表本站认同其观点,也不对网站内容的真实性负责,如有侵权,请联系站长删除,转载请注明出处:https://lnwcn.com/177405.html。
(0)
启航之家的头像启航之家官方
上一篇 2025年1月11日 上午12:41
下一篇 2025年1月11日 上午12:42

猜你喜欢

微信:6284847
备注:全天在线。

微信号:6284847,长按微信号复制添加微信好友, 获取更多信息