网上有关“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小波变换的系数和恢复问题”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!