把倒数的全连接层的第二层/第三层的结果输出来,就是“特征”。当然,这个说法不严格,真正的特征是最后一个pooling,或者卷积层拍平后的那些。但那个维度太高了
clear; %装入原图像1 load woman; i=x; %小波函数 type = 'db1'; % 2维离散daubechies小波变换 [ca1, ch1, cv1, cd1] = dwt2(i,type); c1 = [ch1 cv1 cd1]; %系数矩阵大小 [length1, width1] = size(ca1); [m1, n1] = size(c1); % 定义阈值t1 t1 =50; alpha = 0.2; %在图像中加入水印 for counter2 = 1: 1: n1 for counter1 = 1: 1: m1 if( c1(counter1, counter2) > t1 ) marked1(counter1,counter2) = randn(1,1); newc1(counter1, counter2) = double( c1(counter1, counter2) ) ... +alpha * abs( double( c1(counter1, counter2) ) ) * marked1(counter1,counter2) ; else marked1(counter1, counter2) = 0; newc1(counter1, counter2) = double( c1(counter1, counter2) ); end; end; end; %重构图像 newch1 = newc1(1:length1, 1:width1); newcv1 = newc1(1:length1, width1+1:2*width1); newcd1 = newc1(1:length1, 2*width1+1:3*width1); r1 = double( idwt2(ca1, newch1, newcv1, newcd1, type) ); %分离水印 watermark1 = double(r1) - double(i); figure(1); subplot(1,2,1); image(i); axis('square'); title('原始图像'); subplot(1,2,2); imshow(r1/250); axis('square'); title('daubechies小波变换后图像'); figure(2); imshow(watermark1*10^16); axis('square'); title('水印图像'); % 水印检测 newmarked1 = reshape(marked1, m1*n1, 1); % 检测阈值 t2 = 60; for counter2 = 1: 1: n1 for counter1 = 1: 1: m1 if( newc1(counter1, counter2) >t2 ) newc1x(counter1, counter2) = newc1(counter1, counter2); else newc1x(counter1, counter2) = 0; end; end; end; newc1x = reshape(newc1x, m1*n1, 1); correlation1 = zeros(1000,1); for corrcounter = 1: 1: 1000 if( corrcounter == 500) correlation1(corrcounter,1) = newc1x'*newmarked1 / (m1*n1); else rnmark = randn(m1*n1,1); correlation1(corrcounter,1) = newc1x'*rnmark / (m1*n1); end; end; % 计算阈值 originalthreshold = 0; for counter2 = 1: 1: n1 for counter1 = 1: 1: m1 if( newc1(counter1, counter2) > t2 ) originalthreshold = originalthreshold + ... abs( newc1(counter1, counter2) ); end; end; end; originalthreshold = originalthreshold * alpha / (2*m1*n1); corrcounter = 1000; originalthresholdvector = ones(corrcounter,1) * originalthreshold; figure(3); plot(correlation1, '-'); hold on; plot(originalthresholdvector, '--'); title('原始的加水印图像'); xlabel('水印'); ylabel('检测响应'); 另外,还有一个程序,希望可以帮到您! clear all; start_time=cputime; i1=imread('hill1.jpg'); subplot(1,2,1);imshow(i1); xlabel('(a)原始图像'); i2=imread('hill2.jpg'); subplot(1,2,2);imshow(i2,[]); xlabel('(b)水印'); %三色分离 i1=double(i1); i2=double(i2); i1r=i1(:,:,1); i2r=i2(:,:,1); i1g=i1(:,:,2); i2g=i2(:,:,2); i1b=double(i1(:,:,3)); i2b=double(i2(:,:,3)); %系数r大,增加鲁棒性,r小增加透明性 r=0.05; %水印r的分解 [cwr,swr]=wavedec2(i2r,1,'haar'); %图像r的分解 [cr,sr]=wavedec2(i1r,2,'haar'); %水印的嵌入 cr(1:size(cwr,2)/16)=cr(1:size(cwr,2)/16)+r*cwr(1:size(cwr,2)/16); k=0; while k<=size(cr,2)/size(cwr,2)-1 cr(1+size(cr,2)/4+k*size(cwr,2)/4:size(cr,2)/4+(k+1)*size(cwr,2)/4)... =cr(1+size(cr,2)/4+k*size(cwr,2)/4:size(cr,2)/4+(k+1)*size(cwr,2)/4)+... r*cwr(1+size(cwr,2)/4:size(cwr,2)/2); cr(1+size(cr,2)/2+k*size(cwr,2)/4:size(cr,2)/2+(k+1)*size(cwr,2)/4)... =cr(1+size(cr,2)/2+k*size(cwr,2)/4:size(cr,2)/2+(k+1)*size(cwr,2)/4)+... r*cwr(1+size(cwr,2)/4:size(cwr,2)/4); cr(1+3*size(cr,2)/4+k*size(cwr,2)/4:3*size(cr,2)/4+(k+1)*size(cwr,2)/4)... =cr(1+3*size(cr,2)/4+k*size(cwr,2)/4:3*size(cr,2)/4+(k+1)*size(cwr,2)/4)+... r*cwr(1+3*size(cwr,2)/4:size(cwr,2)/2); k=k+1; end cr(1:size(cwr,2)/4)=cr(1:size(cwr,2)/4)+r*cwr(1:size(cwr,2)/4); g=0.025; %水印g的分解 [cwg,swg]=wavedec2(i2g,1,'haar'); %图像g的分解 [cg,sg]=wavedec2(i1g,2,'haar'); %水印的嵌入 cg(1:size(cwg,2)/16)=cg(1:size(cwg,2)/16)+g*cwg(1:size(cwg,2)/16); k=0; while k<=size(cg,2)/size(cwg,2)-1 cg(1+size(cg,2)/4+k*size(cwg,2)/4:size(cg,2)/4+(k+1)*size(cwg,2)/4)... =cg(1+size(cg,2)/4+k*size(cwg,2)/4:size(cg,2)/4+(k+1)*size(cwg,2)/4)+... g*cwg(1+size(cwg,2)/4:size(cwg,2)/2); cg(1+size(cg,2)/2+k*size(cwg,2)/4:size(cg,2)/2+(k+1)*size(cwg,2)/4)... =cg(1+size(cg,2)/2+k*size(cwg,2)/4:size(cg,2)/2+(k+1)*size(cwg,2)/4)+... g*cwg(1+size(cwg,2)/4:size(cwg,2)/4); cg(1+3*size(cg,2)/4+k*size(cwg,2)/4:3*size(cg,2)/4+(k+1)*size(cwg,2)/4)... =cg(1+3*size(cg,2)/4+k*size(cwg,2)/4:3*size(cg,2)/4+(k+1)... *size(cwg,2)/4)+g*cwg(1+3*size(cwg,2)/4:size(cwg,2)/2); k=k+1; end cg(1:size(cwg,2)/4)=cg(1:size(cwg,2)/4)+g*cwg(1:size(cwg,2)/4); b=0.1; %水印b的分解 [cwb,swb]=wavedec2(i2b,1,'haar'); %图像b的分解 [cb,sb]=wavedec2(i1b,2,'haar'); %水印的嵌入 cb(1:size(cwb,2)/16)=cb(1:size(cwb,2)/16)+b*cwb(1:size(cwb,2)/16); k=0; while k<=size(cb,2)/size(cwb,2)-1 cb(1+size(cb,2)/4+k*size(cwb,2)/4:size(cb,2)/4+(k+1)*size(cwb,2)/4)... =cb(1+size(cb,2)/4+k*size(cwb,2)/4:size(cb,2)/4+(k+1)*size(cwb,2)/4)+... b*cwb(1+size(cwb,2)/4:size(cwb,2)/2); cb(1+size(cb,2)/2+k*size(cwb,2)/4:size(cb,2)/2+(k+1)*size(cwb,2)/4)... =cb(1+size(cb,2)/2+k*size(cwb,2)/4:size(cb,2)/2+(k+1)*size(cwb,2)/4)+... b*cwb(1+size(cwb,2)/4:size(cwb,2)/4); cb(1+3*size(cb,2)/4+k*size(cwb,2)/4:3*size(cb,2)/4+(k+1)*size(cwb,2)/4)... =cb(1+3*size(cb,2)/4+k*size(cwb,2)/4:3*size(cb,2)/4+(k+1)... *size(cwb,2)/4)+b*cwb(1+3*size(cwb,2)/4:size(cwb,2)/2); k=k+1; end cb(1:size(cwb,2)/4)=cb(1:size(cwb,2)/4)+b*cwb(1:size(cwb,2)/4); %图像重构 i1r=waverec2(cr,sr,'haar'); i1g=waverec2(cg,sg,'haar'); i1b=waverec2(cb,sb,'haar'); %三色的叠加 temp=size(i1r); pic=zeros(temp(1),temp(2),3); for i=1:temp(1); for j=1:temp(2); pic(i,j,1)=i1r(i,j); pic(i,j,2)=i1g(i,j); pic(i,j,3)=i1b(i,j); end end ot=uint8(round(pic)); %转化为uint8 i2_image_u=uint8(ot); imwrite(i2_image_u,'watemarked.bmp','bmp'); %显示时间 e_time=cputime-start_time figure;imshow(i2_image_u); xlabel('数字图像水印效果')
Hadoop|
Apache Pig|
Apache Kafka|
Apache Storm|
Impala|
Zookeeper|
SAS|
TensorFlow|
人工智能基础|
Apache Kylin|
Openstack|
Flink|
MapReduce|
大数据|
云计算|
用户登录
还没有账号?立即注册
用户注册
投稿取消
文章分类: |
|
还能输入300字
上传中....