日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【图像隐藏】基于小波变换+SURF、RANSAC、LT码、CRC(循环冗余检验)码多种算法实现图像隐藏(抗多种攻击)matlab源码

發布時間:2023/12/8 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【图像隐藏】基于小波变换+SURF、RANSAC、LT码、CRC(循环冗余检验)码多种算法实现图像隐藏(抗多种攻击)matlab源码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 算法介紹

1.1 小波變換

一維離散小波變換

從濾波器的觀點來看,對于一維小波變換就是把信號分別通過低通濾波器和高通濾波器把原始信號分解為原信號的近似系數和原信號的細節系數兩個部分,其物理思想就是去除信號在空間尺度的關聯關系,而用數值來表達原始信號。

通過離散小波變換提取我們感興趣的特征。離散小波變換可以將原信號分解為信號本身特征(低頻部分)和其細節特征(高頻部分)兩種,而且可以對于分解后得到的信號本身特征(低頻部分)也可以通過小波變換再得到該信號的本身特征和該信號的細節特征,這就為我們提供了多分辨率,我們可以根據自己的應用來決定對信號進行幾層變換。小波變換的實現算法是 mallat 算法。

二維離散小波變換

與一維小波變換相似,對于二維小波變換需要通過濾波器來消除信號中的關聯,但是二維信號有著橫向和縱向兩個方向上的聯系,故我們在使用濾波器時需要在橫向和縱向每個方向上使用兩次濾波器,才能消除信號在那兩個方向上的聯系。通常實現二維DWT采用分離計算方法。分離計算方法基于二維張量積多分辨分析中的二維尺度函數與小波函數的可分離的特點,用一維小波濾波器分別對二維信號(圖象)在水平和豎直進行卷積,最后得到所要的結果。

1988年,S.Mallat利用多分辨率分析的概念,提出了離散小波變換的快速分解與重構算法,即Mallat算法,解決了小波變換計算比較復雜的問題.在實際應用中,對于N×N的圖像,需要應用二維離散小波變換。二維離散小波變換的快速算法如下:

式中g和h為分解低通和高通小波濾波器;?表示能量集中的低頻子帶,體現灰度變化;?為水平低頻垂直高頻子帶,具有水平邊緣信息;?為水平高頻垂直低頻子帶,具有垂直邊緣信息;?為水平高頻垂直高頻子帶,具有對角邊緣信息;原始輸入信號為?,j為變換級數,?。

圖中表示下2采樣,即輸出只剩下輸入樣本數的一半。首先,原始圖像N×N經過水平濾波器組分解成低頻和高頻分量;然后,數據再通過垂直濾波器組,最終分解成為4個子帶圖像數據(N/2)×(N/2),完成一級變換.變換后的3個高頻分量LH,HL和HH直接輸出,而低頻分量LL,送到下一級濾波器組中進行第二級變換,依次類推,最終完成小波變換。


變換舉例:若使用haar小波基,按下面圖4.2,

  • 先列采樣,得到兩幅圖,一幅保留偶數列,一幅保留奇數列,行不變;

  • 然后兩幅圖像做差分,結果保留在其中一幅A,則A為高頻(H),另一幅B只參與運算,不改變結果,作為低頻(L);

  • 對圖A,做行采樣,得奇偶,差分得高頻圖像(HH)和低頻圖像(HL)。

  • 對圖B,做行采樣,差分得高頻圖像(LH)和低頻圖像(LL),完成一遍變換;

  • 對低頻(LL)作為一幅新的圖像,重復上面的變換。


  • PS:

  • 其中LL得到的過程中只是只參與的運算,未改變過自身,即LL只是原圖的一個采樣圖,如下圖3左上角所示。
  • 通過采樣進行多尺度多分辨率處理,提取的是特征點。如一個三角形,它的角是彎的,直接檢測不會被認為是角點,但采樣過后,這個彎的角點可能就變成尖的,就會被采集到。(多尺度的作用參考SIFT算法)
  • 用奇偶行(或列)進行差分得到高頻特征,是由Haar小波基的定義而來(一上一下,采樣后相當于小波基寬度加大,而其他小波基則對應卷積得到高頻,不處理為低頻?)。對于其他的小波基則不一定一樣。
  • 與傅立葉變換不同,小波變換能提取高頻分量及其對應的位置信息。

  • 1.2 RANSAC

    ? RANSAC算法的輸入是一組觀測數據,一個可以解釋或者適應于觀測數據的參數化模型,一些可信的參數。
    ??? RANSAC通過反復選擇數據中的一組隨機子集來達成目標。被選取的子集被假設為局內點,并用下述方法進行驗證:
    ??? 1.有一個模型適應于假設的局內點,即所有的未知參數都能從假設的局內點計算得出。
    ??? 2.用1中得到的模型去測試所有的其它數據,如果某個點適用于估計的模型,認為它也是局內點。
    ??? 3.如果有足夠多的點被歸類為假設的局內點,那么估計的模型就足夠合理。
    ??? 4.然后,用所有假設的局內點去重新估計模型,因為它僅僅被初始的假設局內點估計過。
    ??? 5.最后,通過估計局內點與模型的錯誤率來評估模型。
    ??? 這個過程被重復執行固定的次數,每次產生的模型要么因為局內點太少而被舍棄,要么因為比現有的模型更好而被選用。

    2 部分代碼

    % Example 3, Affine registration clear,close all; num=0; count=6; Ber_count=zeros(count,1);Psnr_count=zeros(count,1);Nc_count=zeros(count,1); thet_rv1=zeros(count,1);thet_rv2=zeros(count,1); Sx_rv1=zeros(count,1);Sy_rv1=zeros(count,1);S_un_rv1=zeros(count,1); Sx_rv2=zeros(count,1);Sy_rv2=zeros(count,1);S_un_rv2=zeros(count,1); T_m=cell(count,1);Scl_fc=zeros(count,1); while num<countnum=num+1;pause(0);close all;clearvars -except num count Ber_count Psnr_count Nc_count thet_rv1 thet_rv2 ...Sx_rv1 Sy_rv1 Sx_rv2 Sy_rv2 S_un_rv1 S_un_rv2 T_m; %% 讀取水印,兩層水印:1、空域做標志位的水印;2、DCT域具有版權保護的水印 % flg_grp=round(rand(5,16)); %% 空域做標志位的水印 wm_lca=[1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1]; flg_grp=[wm_lca;wm_lca;wm_lca;wm_lca;wm_lca]; I_wm=imread('480.bmp'); wm_cpy=~I_wm; % wm=load('wm_seq'); % wm1=wm.Li; % wm_cpy=reshape(wm1,24,length(wm1)/24)'; fig=6; % figure(fig); % subplot(2,4,1); % imshow(wm_cpy,[]),title('水印圖象'); % wm_cpy(14,:)=[]; % wm_cpy(14,:)=[]; % wm_cpy(14,:)=[]; % wm_cpy(end,:)=[]; % wm_cpy(end,:)=[]; % wm_cpy(end,:)=[]; figure(fig); subplot(2,4,1); imshow(wm_cpy,[]),title('水印圖象'); % key=10; % wm_cpy=Arnold(wm_cpy,key); dimI=size(wm_cpy); ro=dimI(1);co=dimI(2); amt=1; %每個包的長度 K1=ro*co/amt; %包數量 b_t=reshape(wm_cpy',amt,K1); b_t0=b_t'; b=cell(K1,1); n=1; for i=1:K1m=1;for j=1:amtb{n,1}(1,m)=b_t0(i,j);m=m+1;endn=n+1; end b_uncode=cell(K1,1); for i=1:K1for j=1:amtb_uncode{i,1}(1,j)=num2str(b{i,1}(1,j));end end % wm_cpr=imread('img64.bmp'); % dimI=size(wm_cpr); % ro=dimI(1);co=dimI(2); % amt=4; %每個8*8DCT塊嵌入的信息bits數 % K=ro*co/amt; %包數量 % wm_cpr1=reshape(wm_cpr',amt,K); %% 對版權水印信息進行LT碼編碼 K=length(b_uncode(:,1)); %包數量 L=length(b_uncode{1,1}); %包長度 redundancy=4.62; %編碼冗余 M=round(K*(1+redundancy))+6-mod(round(K*(1+redundancy)),6); % 考慮編碼冗余,形成M個編碼包 % Gen_array1=zeros(M,K); % mu=robust_soliton(K); % 魯棒孤波度分布 % mu_max=find(mu>0.1/K,1,'last') ; % mu=mu(1:mu_max); %去除mu后面數值接近于0的部分 % mu_M=randsample(1:length(mu),M,true,mu); % 給M個編碼包分別分配一個度數 % mu_M=uint8(round(mu_M)); % 度數取整 % % msg_coded=cell(M,2); %定義矩陣,存放編碼后的信息 % tic; % for i=1:M % k=mu_M(i); % 取一個度數 % x=cell(1,2);% x 為每個編碼后的包,定義為1*2的元胞 % pos=randperm(K); pos=pos(1:k); % 產生k個范圍在1~K之間的隨機數,作為參與混合的包的序號 % for n=1:k % Gen_array1(i,pos(n))=1; % end % x{1,1}=pos; % 元胞的第1個元存放參與混合的包的序號 % % x{1,2}='0' ; % 元胞的第2個元存放混合后的信息 % for j=pos % temp0=bin2dec(x{1,2}); % temp1=bin2dec(b_uncode{j,1}); % temp2=bitxor(temp0,temp1); % x{1,2}=dec2bin(temp2,amt); % end % msg_coded(i,:)=x; % end % t0=toc; % t0 % % save('G_nk-Matr.mat','Gen_array1');Gnk=load('G_nk-Matr.mat'); Gen_array1=Gnk.Gen_array1; msg_coded=cell(M,2); %定義矩陣,存放編碼后的信息 for i=1:Mpos=find(Gen_array1(i,:)==1);x{1,1}=pos; % 元胞的第1個元存放參與混合的包的序號x{1,2}='0' ; % 元胞的第2個元存放混合后的信息for j=postemp0=bin2dec(x{1,2});temp1=bin2dec(b_uncode{j,1});temp2=bitxor(temp0,temp1);x{1,2}=dec2bin(temp2,amt);endmsg_coded(i,:)=x; end % save('Msg_coded.mat','msg_coded'); code_pack=load('Msg_coded.mat'); mag_coded=code_pack.msg_coded; %% 將長度為1的LT碼數據包整理成長度為6的CRC碼包,準備生成校驗碼 crc4_ini0=cell(M/6,1); mm=1; for i=1:length(crc4_ini0)l=1;for j=1:6crc4_ini0{mm,1}(1,l)=msg_coded{6*(i-1)+j,2};l=l+1;endmm=mm+1; end%% 對編碼后的包進行CRC6初始化 % crc4_ini0=msg_coded(:,2); M=M/6; h=crc.generator('Polynomial',[1 0 0 0 0 1 1],... 'InitialState',[0 0 0 0 0 0], 'ReflectInput', false, 'ReflectRemainder', false,... 'FinalXOR',[0 0 0 0 0 0]); crc4_ini=cell(M,1); for i=1:Mtemp0=bin2dec(crc4_ini0{i,1});temp1=de2bi(temp0,6,'left-msb'); %注意:此處只能用de2bimsg=reshape(temp1',6, 1);crc4_ini{i,1}=generate(h,msg)'; end %%檢測crc6的算法正確性 crc4_tmp=cell(M,1); for i=1:Mfor j=1:length(crc4_ini{1,1})crc4_tmp{i,1}(1,j)=num2str(crc4_ini{i,1}(1,j));end end%% 先在DWT-DCT混合變換域嵌入版權水印,兩層DWT然后再8*8DCTI0=imread('lena.bmp'); % I0=imread('baboon0.bmp'); % wm_cpy=round(rand(4,8)); % I0=imresize(I0,[513 513],'bicubic'); [rm,cm]=size(I0); rect=[17 17 479 479]; I0_crp=imcrop(I0,rect); %%%對要嵌入的塊進行兩層DWT,然后再進行8*8DCT變換,嵌入水印 [rm_crp,cm_crp]=size(I0_crp); % I0_crpwm=zeros(rm_crp,rm_crp); amt1=8; % wm_cpy=round(rand(rm_crp/16*cm_crp/16,amt)); % K=rm_crp/16*cm_crp/16;Y_Matrix=[16 11 10 16 24 40 51 61;12 12 14 19 26 58 60 55;14 13 16 24 40 57 69 56;14 17 22 29 51 87 80 62;18 22 37 56 68 109 103 77;24 35 55 64 81 104 113 92;49 64 78 87 103 121 120 101;72 92 95 98 112 100 103 99]; Q50=2.5*Y_Matrix; im_l=6; len=M*length(crc4_ini{1,1})/im_l; rnd1=zeros(len,im_l); % for i=1:len % rnd1(i,:)=randperm(8,im_l); % end for i=1:lenrnd1(i,:)=[1,2,3,4,5,6]; end % for i=1:len % rnd1(i,:)=[2,3,4,5,6,7]; % end crc_tran=cell(len,1); m=1; for i=1:Mn=1;k=1;while k<=length(crc4_ini{1,1})/im_lk=k+1;for j=1:im_lcrc_tran{m,1}(1,j)=crc4_ini{i,1}(1,n);n=n+1;endm=m+1; end end m=1; % rr=1; gamma1=0.20;zt=1; %小波分解級數wtype = 'haar'; %小波分解類型[C,S] = wavedec2(I0_crp,zt,wtype);%多尺度二維小波分解%%尺度1低頻與高頻系數提取ca1 = appcoef2(C,S,wtype,1); %提取尺度1的低頻系數ch1 = detcoef2('h',C,S,1); %提取尺度1的水平方向高頻系數cv1 = detcoef2('v',C,S,1); %提取尺度1的垂直方向高頻系數cd1= detcoef2('d',C,S,1); %提取尺度1的斜線方向高頻系數temp=ca1;[rm2,cm2]=size(ca1);cda0=blkproc(temp,[8 8],'dct2');% c1=uint8([ca1,ch1;cv1,cd1]);% cda0=b0;% figure(2);% cda1=cda0;%%量化與反量化%%%%% psnr_cover=double(a0);% figure(2);cda1=cda0;%%水印的嵌入%%%% savefile = 'rnd1.mat';% save(savefile, 'rnd1');% rnd1=load('rnd1.mat');% rnd1=rnd1.rnd1;for s=1:rm2/8if m>lenbreak;endfor p=1:cm2/8if m>lenbreak;endx=(s-1)*8;y=(p-1)*8;l=1;for n=1:im_lk=rnd1(m,n); if k==1var=abs(cda0(x+1,y+2)/Q50(1,2));if crc_tran{m,1}(1,l)==0var1=2*floor(var/2+0.5);elseif crc_tran{m,1}(1,l)==1var1=2*floor(var/2)+1;endcda1(x+1,y+2)=(1-gamma1)*sign(cda0(x+1,y+2))*Q50(1,2)*var1+gamma1*cda0(x+1,y+2);endif k==2var=abs(cda0(x+2,y+1)/Q50(2,1));if crc_tran{m,1}(1,l)==0var1=2*floor(var/2+0.5);elseif crc_tran{m,1}(1,l)==1var1=2*floor(var/2)+1;endcda1(x+2,y+1)=(1-gamma1)*sign(cda0(x+2,y+1))*Q50(2,1)*var1+gamma1*cda0(x+2,y+1);endif k==3var=abs(cda0(x+3,y+1)/Q50(3,1));if crc_tran{m,1}(1,l)==0var1=2*floor(var/2+0.5);elseif crc_tran{m,1}(1,l)==1var1=2*floor(var/2)+1;endcda1(x+3,y+1)=(1-gamma1)*sign(cda0(x+3,y+1))*Q50(3,1)*var1+gamma1*cda0(x+3,y+1);endif k==4var=abs(cda0(x+2,y+2)/Q50(2,2));if crc_tran{m,1}(1,l)==0var1=2*floor(var/2+0.5);elseif crc_tran{m,1}(1,l)==1var1=2*floor(var/2)+1;endcda1(x+2,y+2)=(1-gamma1)*sign(cda0(x+2,y+2))*Q50(2,2)*var1+gamma1*cda0(x+2,y+2);endif k==5var=abs(cda0(x+1,y+3)/Q50(1,3));if crc_tran{m,1}(1,l)==0var1=2*floor(var/2+0.5);elseif crc_tran{m,1}(1,l)==1var1=2*floor(var/2)+1;endcda1(x+1,y+3)=(1-gamma1)*sign(cda0(x+1,y+3))*Q50(1,3)*var1+gamma1*cda0(x+1,y+3);endif k==6var=abs(cda0(x+1,y+4)/Q50(1,4));if crc_tran{m,1}(1,l)==0var1=2*floor(var/2+0.5);elseif crc_tran{m,1}(1,l)==1var1=2*floor(var/2)+1;endcda1(x+1,y+4)=(1-gamma1)*sign(cda0(x+1,y+4))*Q50(1,4)*var1+gamma1*cda0(x+1,y+4);endif k==7var=abs(cda0(x+2,y+3)/Q50(2,3));if crc_tran{m,1}(1,l)==0var1=2*floor(var/2+0.5);elseif crc_tran{m,1}(1,l)==1var1=2*floor(var/2)+1;endcda1(x+2,y+3)=(1-gamma1)*sign(cda0(x+2,y+3))*Q50(2,3)*var1+gamma1*cda0(x+2,y+3);endif k==8var=abs(cda0(x+3,y+2)/Q50(3,2));if crc_tran{m,1}(1,l)==0var1=2*floor(var/2+0.5);elseif crc_tran{m,1}(1,l)==1var1=2*floor(var/2)+1;endcda1(x+3,y+2)=(1-gamma1)*sign(cda0(x+3,y+2))*Q50(3,2)*var1+gamma1*cda0(x+3,y+2);endif k==9var=abs(cda0(x+4,y+1)/Q50(4,1));if crc_tran{m,1}(1,l)==0var1=2*floor(var/2+0.5);elseif crc_tran{m,1}(1,l)==1var1=2*floor(var/2)+1;endcda1(x+4,y+1)=(1-gamma1)*sign(cda0(x+4,y+1))*Q50(4,1)*var1+gamma1*cda0(x+4,y+1);endl=l+1;endm=m+1;endend % rr=rr+1; %%% 將8*8DCT塊進行IDCT,并將一個64*64的DWT-DCT變換塊進行IDWTca1_wm=blkproc(cda1,[8 8],'idct2');len1=S(1,1)*S(1,2); %A(2),H(2),V(2),D(2)的大小 % len2=S(3,1)*S(3,2); %H(1),V(1),D(1)的大小% len3=S(4,1)*S(4,2)*S(4,3); %H(1),V(1),D(1)的大小C(1:len1)=ca1_wm(1:end); %%將A(2)放入相應位置 % C(len1+1:2*len1)=ch2(1:end); %%將H(2),V(2),D(2)放入相應位置 % C(2*len1+1:3*len1)=cv2(1:end); % C(3*len1+1:4*len1)=cd2(1:end); % C(4*len1+1:4*len1+len2)=ch1(1:end); %%將H(1),V(1),D(1)放入相應位置 % C(4*len1+len2+1:4*len1+2*len2)=cv1(1:end); % C(4*len1+2*len2+1:4*len1+3*len2)=cd1(1:end); % I0_crpwm=waverec2(C,S,wtype);C(len1+1:2*len1)=ch1(1:end); %%將H(2),V(2),D(2)放入相應位置C(2*len1+1:3*len1)=cv1(1:end); C(3*len1+1:4*len1)=cd1(1:end); I0_crpwm=waverec2(C,S,wtype); % (rr0:rr1,cc0:cc1)=blk64wm; % end % end figure(fig);subplot(242); imshow(uint8(I0_crpwm),[]),title('嵌入水印后載體圖像(僅僅是嵌水印部分)'); I0_wm=double(I0); I0_wm(17:496,17:496)=I0_crpwm; figure(fig);subplot(243); imshow(uint8(I0_wm),[]),title('嵌入水印后載體圖像(小波重建后)');%% 然后利用奇偶量化的方法在空域的特殊位置嵌入一層水印, I0_wm=uint8(I0_wm); %% 嘗試一下到底是直接用double型去奇偶量化效果好些還是用整型好些 coordx_blk=5;coordy_blk=5; I0_wm=odd_even24(I0_wm,coordx_blk,coordy_blk,flg_grp(1,:)); coordx_blk=5;coordy_blk=78; I0_wm=odd_even24_lena12(I0_wm,coordx_blk,coordy_blk,flg_grp(2,:)); % coordx_blk=42;coordy_blk=42; % I0_wm=odd_even24(I0_wm,coordx_blk,coordy_blk,flg_grp(3,:)); coordx_blk=78;coordy_blk=5; I0_wm=odd_even24_lena21(I0_wm,coordx_blk,coordy_blk,flg_grp(4,:)); coordx_blk=78;coordy_blk=78; I0_wm=odd_even24(I0_wm,coordx_blk,coordy_blk,flg_grp(5,:)); % imwrite(I0_wm,'img_wm.bmp','bmp'); %% 含水印的圖像經過壓縮,濾波,剪切等等攻擊 I1=im2double(uint8(I0_wm)); % I2_0=I0_wm; % 先rotation后scale disp('對嵌入水印的圖象攻擊,選擇項(dt-dcqim法(6in8),加了LT碼和CRC6)'); disp('1—添加高斯白噪聲'); disp('2-添加椒鹽、加性或斑點噪聲'); disp('3--高斯低通濾波'); disp('4--均值濾波'); disp('5--中值濾波'); disp('6—直方圖統計算法對圖像進行增強'); disp('7—直方圖規定化對圖像進行增強'); disp('8—對圖像進行模糊集增強'); disp('9—JPEG 壓縮'); disp('10—對圖像進行毛玻璃扭曲'); disp('11—尺寸縮放'); disp('12—圖象剪切'); disp('13—對圖像進行一定角度旋轉'); disp('14—對圖像進行旋轉扭曲'); disp('15—對圖像進行平移'); disp('16—對圖像先rotation再scale(包括各種RS組合攻擊)'); disp('17—對圖像先scale再rotation(包括各種RST組合攻擊)'); disp('18—對圖像先scale再translation'); disp('19—對圖像先translation再scale'); disp('20—對圖像Rot和Crop的攻擊,不去黑色背景'); disp('21—對圖像Rot和Crop的攻擊,去黑色背景,類似Stirmark中RotCrop攻擊'); disp('22—對圖像Rot、Sca、Crop的攻擊,去黑色背景,類似Stirmark中RotScale攻擊'); disp('23—對圖像先Rot、再Trans的組合攻擊'); disp('24—對圖像先Trans、再Rot的組合攻擊'); disp('25—對圖像先Sca、再Rot、后Trans的組合攻擊'); disp('26—對圖像先Sca、再Trans、后Rot的組合攻擊'); disp('27—對圖像Shearing攻擊'); disp('28—對圖像Linear Geometric Transform/Linear Transform攻擊'); disp('29—對圖像隨機刪除幾行幾列'); disp('0—直接檢測水印') disp('其他—不攻擊'); d=input('請選擇(0-29)');I2_2=attack1(d,I0_wm,fig); %%%去除權威0的行和列,使本文算法可以抵抗RT、RST的組合攻擊 % [ro2,co2]=size(I2_2); % m=0;I2_21=[]; % for i=1:ro2 % if sum(uint8(I2_2(i,:)))>512 % m=m+1; % I2_21(m,:)=uint8(I2_2(i,:)); % end % end % n=0; % for i=1:co2 % if sum(I2_21(:,i))>512 % n=n+1; % I2_22(:,n)=I2_21(:,i); % end % end % I2_2=I2_22; % figure,imshow(uint8(I2_2));title('去除行列為0后的圖像')% I1=im2double(imread('TestImages/lena.bmp')); % rect=[20 20 460 460]; % I2_2=imcrop(uint8(I2_0),rect); % 先scale后rotation % Scl=614; % I2_1=imresize(I2_0,[Scl Scl],'bilinear'); %%無論是imrotate還是imresize采用'bicubic'是最好的 % I2_2=imrotate(I2_1,10,'bilinear'); I2=im2double(uint8(I2_2)); %先必須化為uint8型,然后用im2double歸一化 % Get the Key Points %% 受攻擊后的圖像與原圖像(備注:此處有誤,其實應該為嵌入水印的載體圖像)進行第一次特征點的匹配 Options.upright=true; Options.tresh=0.0002; Ipts1=OpenSurf(I1,Options); Ipts2=OpenSurf(I2,Options); % 挑選Scale在一定范圍內的點,因尺度太大或太小,受攻擊后易丟失,但受攻擊后的圖像不需要選擇 % m=0; % for i=1:length(Ipts1) % if Ipts1(i).scale>=2.0&&Ipts1(i).scale<=6.0 % m=m+1; % Ipts1_impv(m)=Ipts1(i); % end % end % save('fp_mult.mat','Ipts1_impv'); % fp_tst=load('fp_mult.mat'); % Ipts1_impv=fp_tst.Ipts1_impv;point_cnt=0;ip_tmp1=[]; for i=1:length(Ipts1)ip=Ipts1(i);S = 2 * fix(2.5 * ip.scale); % R = fix(S / 2);if S>=10.0&&S<=30ip_tmp1=[ip_tmp1;Ipts1(i)];point_cnt=point_cnt+1; % pt = [(ip.x), (ip.y)]; % ptR = [(R * cos(ip.orientation)), (R * sin(ip.orientation))]; % % if(ip.laplacian >0), myPen =[0 0 1]; else myPen =[1 0 0]; end % % rectangle('Curvature', [1 1],'Position', [pt(1)-R, pt(2)-R, S, S],'EdgeColor',myPen); % % plot([pt(1), pt(1)+ptR(1)]+1,[pt(2), pt(2)+ptR(2)]+1,'g');endend % orientation_max=max(ip_tmp1.orientation); % nc_max=max(Nc_sta(:,1)); % tmp=Nc_sta(:,1)>=0.86*nc_max; % nc_coord_alt=Nc_sta(tmp,:); [a1,idx1]=sort(abs([ip_tmp1.doh]),'descend'); ip_sort=ip_tmp1(idx1);nn=0;ip_fp=ip_sort(1); for i=2:length(ip_sort)if nn>=17break;endS_sort = 2 * fix(2.5 * ip_sort(i).scale);R_sort = fix(S_sort/2); % mm=0;kk=0;for j=1:length(ip_fp)S_fp = 2 * fix(2.5 * ip_fp(j).scale);R_fp = fix(S_fp/2); % mm=mm+1;if sqrt((ip_fp(j).x-ip_sort(i).x)^2+(ip_fp(j).y-ip_sort(i).y)^2)>=R_sort+R_fpkk=kk+1;endendif kk==length(ip_fp)nn=nn+1;ip_fp=[ip_fp;ip_sort(i)];end end save('fp_invT_480_lna1.mat','ip_fp'); figure,imshow(I1,[]);hold on; for i=1:length(ip_fp)ip=ip_fp(i);S = 2 * fix(2.5 * ip.scale);R = fix(S / 2);% if S>=12&&S<=30% ip_tmp1=[ip_tmp1;ipts(i)];% point_cnt=point_cnt+1;pt = [(ip.x), (ip.y)];ptR = [(R * cos(ip.orientation)), (R * sin(ip.orientation))];if(ip.laplacian >0), myPen =[0 0 1]; else myPen =[1 0 0]; endrectangle('Curvature', [1 1],'Position', [pt(1)-R, pt(2)-R, S, S],'EdgeColor',myPen);plot([pt(1), pt(1)+ptR(1)]+1,[pt(2), pt(2)+ptR(2)]+1,'g');endfp1=load('fp_invT_480_lna1.mat'); Ipts1_impv=fp1.ip_fp; % Ipts2_impv=[]; n=0; for i=1:length(Ipts2)if Ipts2(i).scale>=2.0&&Ipts2(i).scale<=6.5n=n+1;Ipts2_impv(n)=Ipts2(i);end end % Ipts2_impv=Ipts2; % Put the landmark descriptors in a matrix D1 = reshape([Ipts1_impv.descriptor],64,[]); D2 = reshape([Ipts2_impv.descriptor],64,[]);% Find the best % matches,最近鄰次近鄰比值的閾值設定法挑選,Ransac算法再進行一次挑選,是否要用到最小二乘法擬合那個矩陣??? err=zeros(1,length(Ipts1_impv)); % cor1=1:length(Ipts1_impv); cor2=zeros(1,length(Ipts1_impv)); ratio=zeros(length(Ipts1_impv),1); dis_store=zeros(length(Ipts1_impv),2); dis_ratio=zeros(length(Ipts1_impv),5); for i=1:length(Ipts1_impv)distance=sum((D2-repmat(D1(:,i),[1 length(Ipts2_impv)])).^2,1);dis_sort=sort(distance,'ascend');dis_store(i,:)=[dis_sort(1),dis_sort(2),];ratio(i)=dis_sort(1)/dis_sort(2); [err(i),cor2(i)]=min(distance);dis_ratio(i,:)=[dis_store(i,:) ratio(i) i cor2(i)]; enddis_ratio1=sortrows(dis_ratio,3); mask1=dis_ratio1(:,3)<=0.9; dis_ratio2=zeros(sum(mask1),5); nn=0; for i=1:length(dis_ratio1)if mask1(i)nn=nn+1;dis_ratio2(nn,:)=dis_ratio1(i,:);end end% 利用Ransac算法對匹配的點再進行一次挑選max_itera=50; %設置最大迭代次數 sigma=1.8; %設置擬合矩陣[m11,m12,m13;m21,m22,m23;0,0,1]還原的偏差 pretotal=0; %符合擬合模型的數據的個數 k=0; % sample=round(18*rand(50,3)); % save('Index.mat','sample'); sam_tmp=load('Index.mat'); Samp=sam_tmp.sample; while pretotal <= size(dis_ratio2,1)*0.75 && k<max_itera %有2/3的數據符合擬合模型或達到最大迭代次數就可以退出了SampIndex=Samp(k+1,:); % SampIndex=round(1+(size(dis_ratio2,1)-1)*rand(3,1)); %產生三個隨機索引,找樣本用,floor向下取整samp1_tmp=dis_ratio2(SampIndex,4); %對原數據隨機抽樣兩個樣本samp2_tmp=dis_ratio2(SampIndex,5);samp1=[Ipts1_impv(samp1_tmp).y;Ipts1_impv(samp1_tmp).x]; % 此處特別注意,其實在利用SURF算法時,其中有一步samp2=[Ipts2_impv(samp2_tmp).y;Ipts2_impv(samp2_tmp).x]; % 通過旋轉Haar小波模板求響應值,將X,Y的坐標對調了att_matr=Matrix_solv(samp1,samp2); %對兩組數據擬合出矩陣,或其他變種擬合方法total=0;dis_ratio3=[];for j=1:size(dis_ratio2,1)x_ini=Ipts1_impv(dis_ratio2(j,4)).y;y_ini=Ipts1_impv(dis_ratio2(j,4)).x;x_atk=Ipts2_impv(dis_ratio2(j,5)).y;y_atk=Ipts2_impv(dis_ratio2(j,5)).x;tmp=att_matr*[x_atk;y_atk;1];x_red=tmp(1);y_red=tmp(2);if sqrt((x_ini-x_red)^2+(y_ini-y_red)^2)<sigmatotal=total+1;dis_ratio3=[dis_ratio3;dis_ratio2(j,:)];endend % mask=abs(line*[data ones(size(data,1),1)]'); %求每個數據到擬合直線的距離 % total=sum(mask<sigma); %計算數據距離直線小于一定閾值的數據的個數if total>pretotal %找到符合擬合矩陣數據最多的擬合矩陣pretotal=total;bestmatr=att_matr; %找到最好的擬合矩陣best_disratio=dis_ratio3; %找到最符合條件的那些坐標best_matr_r=att_matr;end k=k+1; end best_matr_r1=inv(best_matr_r);% Sort matches on vector distance % [err, ind]=sort(err); cor1_1=best_disratio(:,4); cor2_1=best_disratio(:,5);%% 法1 用左除命令(m=A\b)來尋求矩陣m的最小二乘解 % coord_ini_matr=[];coord_x_att=[]; % for i=1:length(best_disratio) % tmp= % coord_ini_matr=[coord_ini_matr;] % tmp=ones(length(best_disratio),1); tmp=ones(size(best_disratio,1),1); coord_ini_matr=[[Ipts1_impv(cor1_1).y]',[Ipts1_impv(cor1_1).x]',tmp]; coord_x_att=[Ipts2_impv(cor2_1).y]'; att_matr_13=coord_ini_matr\coord_x_att; coord_y_att=[Ipts2_impv(cor2_1).x]'; att_matr_46=coord_ini_matr\coord_y_att; att_matr_ls=[att_matr_13';att_matr_46';0,0,1]; % T_m{num,1}=att_matr_ls;%%% 真實的放射攻擊矩陣%%%% 法2:先用已知X坐標擬合m11,m12,m13,再用已知Y坐標擬合m21,m22,m23,并和法1的結果相比較,驗證矩陣左除是否是LS解 % att_matr_13_1=lsqnonneg(coord_ini_matr,coord_x_att); % att_matr_46_1=lsqnonneg(coord_ini_matr,coord_y_att); % att_matr_ls1=[att_matr_13_1';att_matr_46_1';0,0,1]; %%這不是最小二乘法吧???和att_matr_ls差別非常大% Make vectors with the coordinates of the best matches Pos1=[[Ipts1_impv(cor1_1).y]',[Ipts1_impv(cor1_1).x]']; Pos2=[[Ipts2_impv(cor2_1).y]',[Ipts2_impv(cor2_1).x]']; % Pos1=Pos1(1:15,:); % Pos2=Pos2(1:15,:);% Show both images % I = zeros([size(I1,1) size(I1,2)*2 size(I1,3)]); % I(:,1:size(I1,2),:)=I1; I(:,size(I1,2)+1:size(I1,2)+size(I2,2),:)=I2; % figure, imshow(I); hold on; %%gray image I = zeros([round(1.6*size(I1,1)) round(size(I1,2)*2.6) ]); I(1:size(I1,1),1:size(I1,2))=I1; I(1:size(I2,1),size(I1,2)+1:size(I1,2)+size(I2,2))=I2; figure, imshow(I,[]); hold on;% Show the best matches plot([Pos1(:,2) Pos2(:,2)+size(I1,2)]',[Pos1(:,1) Pos2(:,1)]','-'); plot([Pos1(:,2) Pos2(:,2)+size(I1,2)]',[Pos1(:,1) Pos2(:,1)]','o');%% 等比例縮放與旋轉、不等比例縮放與旋轉、僅有不等比例縮放的判定,若為不等比例縮放與旋轉的攻擊,則判定先R還是先S m11=att_matr_ls(1,1);m12=att_matr_ls(1,2); m21=att_matr_ls(2,1);m22=att_matr_ls(2,2); % Sca_flag_un=0; %%不等比例縮放標志,對于先R在不等比例S,必須先還原S,然后再還原角度 % Sca_flag=0; % RS_dist_condi1=abs(abs(m12/m11)-abs(m21/m22)); %% 到底是先不等比S還先R的區別條件 % % RS_dist_condi2=abs(abs(m11/m22)-abs(m21/m12)); %% 備注:此處在多想一下,有沒有更精準的判定準則??? % % RS_dist_condi2 判定條件沒多大意義,不等比例S、R的組合攻擊都是如此 % if abs(m11-m22)>=0.05 %% 存在不等比例縮放或不等比例縮放與旋轉的攻擊 % if RS_dist_condi1<=0.015 %% 判定為先R再S(不等比)Plane這幅圖比較特殊,這個值需大一些 % % [Sx,theta1]=solve('Sx*cosd(theta1)=m11','-Sx*sind(theta1)=m12','Sx','theta1'); % % [Sy,theta2]=solve('Sy*sind(theta2)=m21','Sy*sind(theta2)=m22','Sy','theta2'); % theta1=atand(-m12/m11); theta2=atand(m21/m22); % Sx_nu=sqrt(m11^2+m12^2);Sy_nu=sqrt(m21^2+m22^2); % Sx_nu % Sy_nu % theta=(theta1+theta2)/2; % theta % if abs(theta)<0.25 % disp('僅存在不等比例縮放'); % Sx_nu=m11;Sy_nu=m22; % Sx_nu % Sy_nu % Rot_flag=0; % Sca_flag=1; %%此處還是用Sca_flag吧,為了和水印判斷那段程序統一 % [ro2,co2]=size(I2); % x_s_rev=round(ro2/Sx_nu);y_s_rev=round(co2/Sy_nu); % I4=imresize(im2uint8(I2),[x_s_rev y_s_rev],'bicubic'); %%將不等比例縮放還原 % Sx_rv1(num,1)=Sx_nu; Sy_rv1(num,1)=Sy_nu; % % % else % disp('存在不等比例縮放與旋轉的攻擊(先R再S)'); % [ro2,co2]=size(I2); % x_s_rev=round(ro2/Sx_nu);y_s_rev=round(co2/Sy_nu); %%對于先R再S的不等比例攻擊必須先還原S,若先還原角度則會造成類似于Shearing的攻擊 % I2=imresize(im2uint8(I2),[x_s_rev y_s_rev],'bicubic'); %%備注:論文中如何描述、闡明??? % Sca_flag=1; %%此處還是先用Sca_flag吧,為了和水印判斷那段程序統一 % I3_tmp=imrotate(im2uint8(I2),-theta,'bicubic','crop'); % I3=im2double(I3_tmp); % figure,imshow(I3,[]),title('旋轉theta角度后校正的圖像'); % Rot_flag=1; %imrotate攻擊標志 % I4=im2uint8(I3); % Sx_rv1(num,1)=Sx_nu; Sy_rv1(num,1)=Sy_nu; % thet_rv1(num,1)=theta; % end % else %% 判定為先S再R(不等比) % % [Sx,theta1]=solve('Sx*cosd(theta1)=m11','Sx*sind(theta1)=m21','Sx','theta1'); % % [Sy,theta2]=solve('-Sy*sind(theta2)=m12','Sy*cosd(theta2)=m22','Sy','theta2'); % theta1=atand(m21/m11); theta2=atand(-m12/m22); % Sx_nu=sqrt(m11^2+m21^2);Sy_nu=sqrt(m12^2+m22^2); % Sx_nu % Sy_nu % theta=(theta1+theta2)/2; % theta % if abs(theta)<0.25 % disp('僅存在不等比例縮放'); % Sx_nu=m11;Sy_nu=m22; % Sx_nu % Sy_nu % Rot_flag=0; % Sca_flag=1; %%此處還是用Sca_flag吧,為了和水印判斷那段程序統一 % [ro2,co2]=size(I2); % x_s_rev=round(ro2/Sx_nu);y_s_rev=round(co2/Sy_nu); % I4=imresize(im2uint8(I2),[x_s_rev y_s_rev],'bicubic'); %%將不等比例縮放還原 % Sx_rv1(num,1)=Sx_nu; Sy_rv1(num,1)=Sy_nu; % else % disp('存在不等比例縮放與旋轉的攻擊(先S再R)') % I3_tmp=imrotate(im2uint8(I2),-theta,'bicubic','crop'); % I3=im2double(I3_tmp); % figure,imshow(I3,[]),title('旋轉theta角度后校正的圖像'); %%%先還原角度 % Rot_flag=1; %imrotate攻擊標志 % [ro3,co3]=size(I3); % x_s_rev=round(ro3/Sx_nu);y_s_rev=round(co3/Sy_nu); % I3=imresize(im2uint8(I3),[x_s_rev y_s_rev],'bicubic'); %%%再還原縮放尺度 % I4=I3; % Sca_flag=1; %%此處還是先用Sca_flag吧,為了和水印判斷那段程序統一 % Sx_rv1(num,1)=Sx_nu; Sy_rv1(num,1)=Sy_nu; % thet_rv1(num,1)=theta; % end % end % else %%等比例縮放或旋轉或等比例縮放與旋轉攻擊同時有 % % % theta1=atand(-m12/m11); theta2=atand(m21/m22);theta3=atand(m21/m11);theta4=atand(-m12/m22); % theta=(theta1+theta2+theta3+theta4)/4; % theta % % S_un1=sqrt(m11^2+m12^2);S_un2=sqrt(m21^2+m22^2);S_un3=sqrt(m11^2+m21^2);S_un4=sqrt(m12^2+m22^2); % S_un=(S_un1+S_un2+S_un3+S_un4)/4; % S_un % % if abs(theta)<=0.25 % % figure,imshow(I2,[]);title('沒受到旋轉攻擊的圖片'); % I3=I2; % Rot_flag=0; % else % I3_tmp=imrotate(im2uint8(I2),-theta,'bicubic','crop'); % I3=im2double(I3_tmp); % figure,imshow(I3,[]),title('旋轉theta角度后校正的圖像'); % Rot_flag=1; %imrotate攻擊標志 % thet_rv1(num,1)=theta; % end % %%判定有無等比例縮放攻擊,若有則進行相應的還原 % if abs(S_un-1.0)<=0.015 % figure,imshow(I3);title('沒受到等比例縮放攻擊的圖片'); % I4=im2uint8(I3); % % Sca_flag=0; % else % [ro3,co3]=size(I3); % x_s_rev=round(ro3/S_un);y_s_rev=round(co3/S_un); % I4=imresize(im2uint8(I3),[x_s_rev y_s_rev],'bicubic'); % figure,imshow(uint8(I4),[ ]),title('縮放或旋轉縮放攻擊校正后的圖像'); % Sca_flag=1; %受到縮放攻擊的標志 % Sca_flag_un=1; % S_un_rv1(num,1)=S_un; % end % % end%% 求出仿射矩陣T,利用求逆來還原圖像 att_matr_ls1=[m22,m12,0;m21,m11,0;0,0,1]; T_m{num,1}=att_matr_ls1; T_inv=inv(att_matr_ls1); transa1=maketform('affine',T_inv); I4=imtransform(im2uint8(I2),transa1);%WIa為遭遇RST幾何攻擊后的圖像 figure;imshow(uint8(I4),[]); [ro4,co4]=size(I4); % I4=im2uint8(I4);m=0;I4_1=[]; for i=1:ro4if sum(uint8(I4(i,:)))>512*40m=m+1;I4_1(m,:)=I4(i,:);endendn=0;for i=1:co4if sum(I4_1(:,i))>512*40n=n+1;I4_2(:,n)=I4_1(:,i);endendI4=I4_2;%% 首先在空域尋找嵌入特殊信息的位置塊,以便定位到邊緣被破壞的圖片的邊界以及再一次精準校正Nc_total4=[];nc_coord_tal4=[];coord_avg4=[];coordx=25;coordy=25;[Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_66_1(I4,coordx,coordy,flg_grp(1,:));Nc_total4=[Nc_total4;Nc_sta];nc_coord_tal4=[nc_coord_tal4;nc_coord_alt];coord_avg4=[coord_avg4;coord_x_y];coordx=25;coordy=463;[Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_lena12(I4,coordx,coordy,flg_grp(2,:));Nc_total4=[Nc_total4;Nc_sta];nc_coord_tal4=[nc_coord_tal4;nc_coord_alt];coord_avg4=[coord_avg4;coord_x_y]; % coordx=247;coordy=247; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_66(I5,coordx,coordy,flg_grp(3,:)); % Nc_total=[Nc_total;Nc_sta];nc_coord_tal=[nc_coord_tal;nc_coord_alt];coord_avg=[coord_avg;coord_x_y];coordx=463;coordy=25;[Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_lena21(I4,coordx,coordy,flg_grp(4,:));Nc_total4=[Nc_total4;Nc_sta];nc_coord_tal4=[nc_coord_tal4;nc_coord_alt];coord_avg4=[coord_avg4;coord_x_y];coordx=463;coordy=463;[Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_66_1(I4,coordx,coordy,flg_grp(5,:));Nc_total4=[Nc_total4;Nc_sta];nc_coord_tal4=[nc_coord_tal4;nc_coord_alt];coord_avg4=[coord_avg4;coord_x_y];%%利用特殊位置的點相對距離求出像素的偏差,并且再一次精準校正x1x4_dis=coord_avg4(3,1)-coord_avg4(1,1);x2x5_dis=coord_avg4(4,1)-coord_avg4(2,1);x_devi=(438-(x1x4_dis+x2x5_dis)*0.5)/(438/512); %若x_devi為正則需要放大,為負則需要縮小y1y4_dis=coord_avg4(2,2)-coord_avg4(1,2);y2y5_dis=coord_avg4(4,2)-coord_avg4(3,2);y_devi=(438-(y1y4_dis+y2y5_dis)*0.5)/(438/512); %若y_devi為正則需要放大,為負則需要縮小[ro4,co4]=size(I4);if abs(x_devi)>=2.0&&abs(y_devi)>=2.0ro5=round(x_devi)+ro4;co5=round(y_devi)+co4;I5=imresize(I4,[ro5 co5],'bicubic');Scl_fc(count,1)=1;elseif abs(x_devi)>=2.0&&abs(y_devi)<2.0ro5=round(x_devi)+ro4;co5=co4;I5=imresize(I4,[ro5 co5],'bicubic');Scl_fc(count,1)=1;elseif abs(x_devi)<2.0&&abs(y_devi)>=2.0ro5=ro4;co5=round(y_devi)+co4;I5=imresize(I4,[ro5 co5],'bicubic');Scl_fc(count,1)=1;elseif abs(x_devi)<2.0&&abs(y_devi)<2.0I5=I4;end % Sx_rv2(num,1)=-x_devi/rm; % Sy_rv2(num,1)=-y_devi/cm; % Sx_un1=Sx_rv2(num,1); % Sy_un1=Sy_rv2(num,1); % Sx_un1 % Sy_un1 % if Sca_flag_un==1 % S_un_rv2(num,1)=-(x_devi+y_devi)/(2.0*cm); % S_un1=S_un_rv2(num,1); % S_un1 % end % end%% 定位水印嵌入起點并提取水印I7=I5;Nc_total7=[];nc_coord_tal7=[];coord_avg7=[];coordx=25;coordy=25;[Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_66_1(I7,coordx,coordy,flg_grp(1,:));Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y];coordx=25;coordy=463;[Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_lena12(I7,coordx,coordy,flg_grp(2,:));Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % coordx=247;coordy=247; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_66(I7,coordx,coordy,flg_grp(3,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y];coordx=463;coordy=25;[Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_lena21(I7,coordx,coordy,flg_grp(4,:));Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y];coordx=463;coordy=463;[Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_66_1(I7,coordx,coordy,flg_grp(5,:));Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y];%%% 求出x,y坐標起始點的誤差x_delt=25-round((coord_avg7(1,1)+coord_avg7(2,1))/2);y_delt=25-round((coord_avg7(1,2)+coord_avg7(3,2))/2);I7_rect=[17-y_delt 17-x_delt 479 479]; %%%特別注意:imcrop函數坐標體系不同于imscale,translate等% I6_rect=[17 17 479 479];I7_crp=imcrop(I7,I7_rect);%% 判斷縮放攻擊中是否有無平移攻擊,可直接根據那個矩陣best_matr_r1中(1,3)、(2,3)兩個系數與 %%% best_matr_s1中(1,3)、(2,3)變化的大小來判斷:若兩個系數變化率較大則是RS的組合攻擊, %%% 若變化率較小則為ST的組合攻擊,但是此法對于先平移再縮放的攻擊適用嗎??? %%% 備注,此法還是有問題,還是只能用特征點匹配法再匹配一次,然后平移回去 % Trans_flag=0;Rotcrp_flag=0; % if (Sca_flag==1&&Rot_flag==0)||(Rot_flag==1) % [ro4,co4]=size(I4); % % I4=im2uint8(I4); % m=0;I4_1=[]; % for i=1:ro4 % if sum(uint8(I4(i,:)))>512*40 % m=m+1; % I4_1(m,:)=I4(i,:); % end % end % n=0; % for i=1:co4 % if sum(I4_1(:,i))>512*40 % n=n+1; % I4_2(:,n)=I4_1(:,i); % end % end % I4=I4_2; % Ipts4=OpenSurf(im2double(uint8(I4)),Options); % D4 = reshape([Ipts4.descriptor],64,[]); % % % Find the best matches % % % matches,最近鄰次近鄰比值的閾值設定法挑選,Ransac算法再進行一次挑選,是否要用到最小二乘法擬合那個矩陣??? % err_s4=zeros(1,length(Ipts1_impv)); % % cor1=1:length(Ipts1_impv); % cor_s4=zeros(1,length(Ipts1_impv)); % ratio_s4=zeros(length(Ipts1_impv),1); % dis_store_s4=zeros(length(Ipts1_impv),2); % dis_ratio_s4=zeros(length(Ipts1_impv),5); % for i=1:length(Ipts1_impv) % distance=sum((D4-repmat(D1(:,i),[1 length(Ipts4)])).^2,1); % dis_sort_s4=sort(distance,'ascend'); % dis_store_s4(i,:)=[dis_sort_s4(1),dis_sort_s4(2),]; % ratio_s4(i)=dis_sort_s4(1)/dis_sort_s4(2); % [err_s4(i),cor_s4(i)]=min(distance); % dis_ratio_s4(i,:)=[dis_store_s4(i,:) ratio_s4(i) i cor_s4(i)]; % end % % dis_ratio1_s4=sortrows(dis_ratio_s4,3); % mask1=dis_ratio1_s4(:,3)<=0.65; % dis_ratio2_s4=zeros(sum(mask1),5); % nn=0; % for i=1:length(dis_ratio1_s4) % if mask1(i) % nn=nn+1; % dis_ratio2_s4(nn,:)=dis_ratio1_s4(i,:); % end % end % % % 利用Ransac算法對匹配的點再進行一次挑選 % % % max_itera=50; %設置最大迭代次數 % % sigma=4; %設置擬合矩陣[m11,m12,m13;m21,m22,m23;0,0,1]還原的偏差 % % pretotal=0; %符合擬合模型的數據的個數 % % k=0; % % while pretotal <= size(dis_ratio2_s,1)*0.75 && k<max_itera %有2/3的數據符合擬合模型或達到最大迭代次數就可以退出了 % % SampIndex=round(1+(size(dis_ratio2_s,1)-1)*rand(3,1)); %產生三個隨機索引,找樣本用,floor向下取整 % % % % samp1_tmp=dis_ratio2_s(SampIndex,4); %對原數據隨機抽樣兩個樣本 % % samp2_tmp=dis_ratio2_s(SampIndex,5); % % % % samp1=[Ipts1_impv(samp1_tmp).x;Ipts1_impv(samp1_tmp).y]; % % samp2=[Ipts3(samp2_tmp).x;Ipts3(samp2_tmp).y]; % % % % att_matr=Matrix_solv(samp1,samp2); %對兩組數據擬合出矩陣,或其他變種擬合方法 % % total=0;dis_ratio3=[]; % % for j=1:size(dis_ratio2_s,1) % % x_ini=Ipts1_impv(dis_ratio2_s(j,4)).x;y_ini=Ipts1_impv(dis_ratio2_s(j,4)).y; % % x_atk=Ipts3(dis_ratio2_s(j,5)).x;y_atk=Ipts3(dis_ratio2_s(j,5)).y; % % tmp=att_matr*[x_atk;y_atk;1]; % % x_red=tmp(1);y_red=tmp(2); % % if sqrt((x_ini-x_red)^2+(y_ini-y_red)^2)<sigma % % total=total+1; % % dis_ratio3=[dis_ratio3;dis_ratio2_s(j,:)]; % % end % % end % % % mask=abs(line*[data ones(size(data,1),1)]'); %求每個數據到擬合直線的距離 % % % total=sum(mask<sigma); %計算數據距離直線小于一定閾值的數據的個數 % % % % if total>pretotal %找到符合擬合矩陣數據最多的擬合矩陣 % % pretotal=total; % % bestmatr=att_matr; %找到最好的擬合矩陣 % % best_disratio_s=dis_ratio3; %找到最符合條件的那些坐標 % % end % % k=k+1; % % end % % % Sort matches on vector distance % % [err, ind]=sort(err); % cor1_s4=dis_ratio2_s4(:,4); % cor3_s4=dis_ratio2_s4(:,5); % % % Make vectors with the coordinates of the best matches % Pos1_s4=[[Ipts1_impv(cor1_s4).y]',[Ipts1_impv(cor1_s4).x]']; % Pos3_s4=[[Ipts4(cor3_s4).y]',[Ipts4(cor3_s4).x]']; % % I = zeros([1.5*size(I1,1) size(I1,2)*2.5 ]); % I(1:size(I1,1),1:size(I1,2))=im2uint8(I1); I(1:size(I4,1),size(I1,2)+1:size(I1,2)+size(I4,2))=I4; % figure, imshow(I,[]),title('縮放校正后再進行一次特征點匹配'); hold on; % % % Show the best matches % plot([Pos1_s4(:,2) Pos3_s4(:,2)+size(I1,2)]',[Pos1_s4(:,1) Pos3_s4(:,1)]','-'); % plot([Pos1_s4(:,2) Pos3_s4(:,2)+size(I1,2)]',[Pos1_s4(:,1) Pos3_s4(:,1)]','o'); % % Pos3_l4=length(Pos3_s4); % dis_stor_s4=zeros(Pos3_l4*(Pos3_l4-1)/2,3); %第一列記錄兩坐標間的距離,第二列記錄受攻擊后圖像起始坐標序號,第三列記錄終點坐標序號 % Pos1_s4(:,3)=1:Pos3_l4; Pos3_s4(:,3)=1:Pos3_l4; % % Pos1_tc=Pos1_s4; % Pos4_tc=Pos3_s4; % % dis_ratio2_tc=dis_ratio2_s; % % dis_coor_tc=dis_coor_s; % % point=20; % x_tc_cnt4=zeros(length(Pos1_tc),1);y_tc_cnt4=zeros(length(Pos4_tc),1); % for i=1:length(Pos1_tc) % % x1_tc=Pos1_tc(i,1);y1_tc=Pos1_tc(i,2); % 此處特別注意,其實在利用SURF算法時,其中有一步 % x1_tca=Pos4_tc(i,1);y1_tca=Pos4_tc(i,2); % 此處特別注意,其實在利用SURF算法時,其中有一步 % x_tcd=x1_tca-x1_tc;y_tcd=y1_tca-y1_tc; % x_tc_cnt4(i)=x_tcd;y_tc_cnt4(i)=y_tcd; % end % % x_tcd_sort4=sort(x_tc_cnt4);y_tcd_sort4=sort(y_tc_cnt4); % devi=0.075; % m=0;n=0; % med_vaule=round(length(Pos1_tc)/2); % for i=1:length(Pos1_tc) % if abs(x_tcd_sort4(i))>=abs(x_tcd_sort4(med_vaule))*(1-devi)&&abs(x_tcd_sort4(i))<=abs(x_tcd_sort4(med_vaule))*(1+devi) % m=m+1; % x_tcd_fil4(m)=x_tcd_sort4(i); % end % if abs(y_tcd_sort4(i))>=abs(y_tcd_sort4(med_vaule))*(1-devi)&&abs(y_tcd_sort4(i))<=abs(y_tcd_sort4(med_vaule))*(1+devi) % n=n+1; % y_tcd_fil4(n)=y_tcd_sort4(i); % end % end % x_tcd_init4=sum(x_tcd_fil4)/length(x_tcd_fil4); % y_tcd_init4=sum(y_tcd_fil4)/length(y_tcd_fil4); % x_tcd_init4 % y_tcd_init4 % % % TC_thresh1=1.5; % if abs(x_tcd_init4)>=TC_thresh1||abs(y_tcd_init4)>=TC_thresh1 % disp('有平移攻擊(且有縮放攻擊)'); % Trans_flag=1; % Rotcrp_flag=1; %%剪切也是平移的一種 % x_tcd_rev=round(-x_tcd_init4);y_tcd_rev=round(-y_tcd_init4); % se = translate(strel(1), [x_tcd_rev y_tcd_rev]); % I4= imdilate(I4,se); % figure,imshow(uint8(I4),[ ]),title('平移粗略校正后的圖像(且帶縮放)'); % end % end % % thet_count(m,1)=atan((x2_ad*x3_d-x2_d*x3_ad)/(y2_ad*x3_d-x2_d*y3_ad)); % % end % % % % 將圖像黑色背景和過渡的那一兩行去掉 % % 備注:此種去除黑色背景的方法有問題,必須改進,可能把圖片中間的某行或某列去除了 % [ro4,co4]=size(I4); % % I4=im2uint8(I4); % if (ro4==co4&&ro4==512)||(Sca_flag==1&&Rot_flag==0)||Trans_flag==1 % I5=I4; % else % m=0;I4_1=[]; % for i=1:ro4 % if sum(uint8(I4(i,:)))>512*40 % m=m+1; % I4_1(m,:)=I4(i,:); % end % end % n=0; % for i=1:co4 % if sum(I4_1(:,i))>512*40 % n=n+1; % I5(:,n)=I4_1(:,i); % end % end % end % % figure,imshow(I5,[]);title('去除黑色背景后的RS校正圖像'); % % % %% 首先在空域尋找嵌入特殊信息的位置塊,以便定位到邊緣被破壞的圖片的邊界以及再一次精準校正 % if Sca_flag==1||Sca_flag_un==1; % Nc_total=[];nc_coord_tal=[];coord_avg=[]; % coordx=25;coordy=25; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1_1(I5,coordx,coordy,flg_grp(1,:)); % Nc_total=[Nc_total;Nc_sta];nc_coord_tal=[nc_coord_tal;nc_coord_alt];coord_avg=[coord_avg;coord_x_y]; % coordx=25;coordy=463; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1(I5,coordx,coordy,flg_grp(2,:)); % Nc_total=[Nc_total;Nc_sta];nc_coord_tal=[nc_coord_tal;nc_coord_alt];coord_avg=[coord_avg;coord_x_y]; % % coordx=247;coordy=247; % % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_66(I5,coordx,coordy,flg_grp(3,:)); % % Nc_total=[Nc_total;Nc_sta];nc_coord_tal=[nc_coord_tal;nc_coord_alt];coord_avg=[coord_avg;coord_x_y]; % coordx=463;coordy=25; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1(I5,coordx,coordy,flg_grp(4,:)); % Nc_total=[Nc_total;Nc_sta];nc_coord_tal=[nc_coord_tal;nc_coord_alt];coord_avg=[coord_avg;coord_x_y]; % coordx=463;coordy=463; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla2(I5,coordx,coordy,flg_grp(5,:)); % Nc_total=[Nc_total;Nc_sta];nc_coord_tal=[nc_coord_tal;nc_coord_alt];coord_avg=[coord_avg;coord_x_y]; % % %%利用特殊位置的點相對距離求出像素的偏差,并且再一次精準校正 % x1x4_dis=coord_avg(3,1)-coord_avg(1,1); % x2x5_dis=coord_avg(4,1)-coord_avg(2,1); % x_devi=(438-(x1x4_dis+x2x5_dis)*0.5)/(438/512); %若x_devi為正則需要放大,為負則需要縮小 % y1y4_dis=coord_avg(2,2)-coord_avg(1,2); % y2y5_dis=coord_avg(4,2)-coord_avg(3,2); % y_devi=(438-(y1y4_dis+y2y5_dis)*0.5)/(438/512); %若y_devi為正則需要放大,為負則需要縮小 % [ro5,co5]=size(I5); % ro6=round(x_devi)+ro5;co6=round(y_devi)+co5; % I6=imresize(I5,[ro6 co6],'bicubic'); % Sx_rv2(num,1)=-x_devi/rm; % Sy_rv2(num,1)=-y_devi/cm; % Sx_un1=Sx_rv2(num,1); % Sy_un1=Sy_rv2(num,1); % Sx_un1 % Sy_un1 % if Sca_flag_un==1 % S_un_rv2(num,1)=-(x_devi+y_devi)/(2.0*cm); % S_un1=S_un_rv2(num,1); % S_un1 % end % end % % %% 角度的精細校正,此處特別注意,需分四種情況:1、只有imrotate攻擊;2、同時有imrotate和scale攻擊;3、同時有imrotate和imcrop攻擊;4、同時有imrotate、scale、imcrop攻擊 % if (Rot_flag==1&&Rotcrp_flag==0)&&Sca_flag==0 % % I3=im2uint8(I3); % % [ro3,co3]=size(I3); % % m=0;I3_1=[]; % % for i=1:ro3 % % if sum(uint8(I3(i,:)))>460*40 % % m=m+1; % % I3_1(m,:)=I3(i,:); % % end % % end % % n=0; % % for i=1:co3 % % if sum(I3_1(:,i))>460*40 % % n=n+1; % % I3_2(:,n)=I3_1(:,i); % % end % % end % % I3=I3_2; % %%% 利用坐標來校正角度 % Nc_total5=[];nc_coord_tal5=[];coord_avg5=[]; % coordx=25;coordy=25; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1_1(I5,coordx,coordy,flg_grp(1,:)); % Nc_total5=[Nc_total5;Nc_sta];nc_coord_tal5=[nc_coord_tal5;nc_coord_alt];coord_avg5=[coord_avg5;coord_x_y]; % coordx=25;coordy=463; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1(I5,coordx,coordy,flg_grp(2,:)); % Nc_total5=[Nc_total5;Nc_sta];nc_coord_tal5=[nc_coord_tal5;nc_coord_alt];coord_avg5=[coord_avg5;coord_x_y]; % % coordx=247;coordy=247; % % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_66(I5,coordx,coordy,flg_grp(3,:)); % % Nc_total=[Nc_total;Nc_sta];nc_coord_tal=[nc_coord_tal;nc_coord_alt];coord_avg=[coord_avg;coord_x_y]; % coordx=463;coordy=25; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1(I5,coordx,coordy,flg_grp(4,:)); % Nc_total5=[Nc_total5;Nc_sta];nc_coord_tal5=[nc_coord_tal5;nc_coord_alt];coord_avg5=[coord_avg5;coord_x_y]; % coordx=463;coordy=463; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla2(I5,coordx,coordy,flg_grp(5,:)); % Nc_total5=[Nc_total5;Nc_sta];nc_coord_tal5=[nc_coord_tal5;nc_coord_alt];coord_avg5=[coord_avg5;coord_x_y]; % % %%利用特殊位置的點相對距離求出像素的偏差,并且再一次對角度精準校正 % x1x3_dis=abs(coord_avg5(3,1)-coord_avg5(1,1));y1y3_dis=coord_avg5(3,2)-coord_avg5(1,2); % angle1=atand(y1y3_dis/x1x3_dis); % x3x4_dis=coord_avg5(4,1)-coord_avg5(3,1);y3y4_dis=abs(coord_avg5(4,2)-coord_avg5(3,2)); % angle2=atand(-x3x4_dis/y3y4_dis); % x4x2_dis=abs(coord_avg5(2,1)-coord_avg5(4,1));y4y2_dis=coord_avg5(2,2)-coord_avg5(4,2); % angle3=atand(-y4y2_dis/x4x2_dis); % x2x1_dis=coord_avg5(1,1)-coord_avg5(2,1);y2y1_dis=abs(coord_avg5(1,2)-coord_avg5(2,2)); % angle4=atand(x2x1_dis/y2y1_dis); % angle_avg=(angle1+angle2+angle3+angle4)/4; % disp('角度精確矯正的值') % angle_avg % I5=imrotate(I5,-angle_avg,'bicubic'); % %%% 再一次去掉邊界部分 % [ro5,co5]=size(I5); % m=0;I5_1=[]; % for i=1:ro5 % if sum(uint8(I5(i,:)))>460*40 % m=m+1; % I5_1(m,:)=uint8(I5(i,:)); % end % end % n=0; % for i=1:co5 % if sum(I5_1(:,i))>460*40 % n=n+1; % I5_2(:,n)=I5_1(:,i); % end % end % I5=I5_2; % end % % if Rot_flag==1&&Sca_flag==1 %%同時有imrotate、scale、攻擊,可能有imcrop攻擊,此時的imcrop攻擊包含Translate攻擊 % %%% 利用坐標來校正角度 % Nc_total6=[];nc_coord_tal6=[];coord_avg6=[]; % coordx=25;coordy=25; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1_1(I6,coordx,coordy,flg_grp(1,:)); % Nc_total6=[Nc_total6;Nc_sta];nc_coord_tal6=[nc_coord_tal6;nc_coord_alt];coord_avg6=[coord_avg6;coord_x_y]; % coordx=25;coordy=463; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1(I6,coordx,coordy,flg_grp(2,:)); % Nc_total6=[Nc_total6;Nc_sta];nc_coord_tal6=[nc_coord_tal6;nc_coord_alt];coord_avg6=[coord_avg6;coord_x_y]; % coordx=463;coordy=25; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1(I6,coordx,coordy,flg_grp(4,:)); % Nc_total6=[Nc_total6;Nc_sta];nc_coord_tal6=[nc_coord_tal6;nc_coord_alt];coord_avg6=[coord_avg6;coord_x_y]; % coordx=463;coordy=463; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla2(I6,coordx,coordy,flg_grp(5,:)); % Nc_total6=[Nc_total6;Nc_sta];nc_coord_tal6=[nc_coord_tal6;nc_coord_alt];coord_avg6=[coord_avg6;coord_x_y]; % % %%利用特殊位置的點相對距離求出像素的偏差,并且再一次對角度精準校正 % x1x3_dis=abs(coord_avg6(3,1)-coord_avg6(1,1));y1y3_dis=coord_avg6(3,2)-coord_avg6(1,2); % angle1=atand(y1y3_dis/x1x3_dis); % x3x4_dis=coord_avg6(4,1)-coord_avg6(3,1);y3y4_dis=abs(coord_avg6(4,2)-coord_avg6(3,2)); % angle2=atand(-x3x4_dis/y3y4_dis); % x4x2_dis=abs(coord_avg6(2,1)-coord_avg6(4,1));y4y2_dis=coord_avg6(2,2)-coord_avg6(4,2); % angle3=atand(-y4y2_dis/x4x2_dis); % x2x1_dis=coord_avg6(1,1)-coord_avg6(2,1);y2y1_dis=abs(coord_avg6(1,2)-coord_avg6(2,2)); % angle4=atand(x2x1_dis/y2y1_dis); % angle_avg=(angle1+angle2+angle3+angle4)/4; % disp('角度精確矯正的值') % angle_avg % I6=imrotate(I6,-angle_avg,'bicubic'); % %%% 再一次去掉邊界部分 % [ro6,co6]=size(I6); % m=0;I6_1=[]; % for i=1:ro6 % if sum(uint8(I6(i,:)))>512*10 % m=m+1; % I6_1(m,:)=uint8(I6(i,:)); % end % end % n=0; % for i=1:co6 % if sum(I6_1(:,i))>512*10 % n=n+1; % I6_2(:,n)=I6_1(:,i); % end % end % I6=I6_2; % end % % %%% imrotate和imcrop攻擊同時存在,但沒有縮放 % if (Rot_flag==1&&Rotcrp_flag==1)&&Sca_flag==0 % % %%% 利用坐標來校正角度 % Nc_total5=[];nc_coord_tal5=[];coord_avg5=[]; % coordx=25;coordy=25; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1_1(I5,coordx,coordy,flg_grp(1,:)); % Nc_total5=[Nc_total5;Nc_sta];nc_coord_tal5=[nc_coord_tal5;nc_coord_alt];coord_avg5=[coord_avg5;coord_x_y]; % coordx=25;coordy=463; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1(I5,coordx,coordy,flg_grp(2,:)); % Nc_total5=[Nc_total5;Nc_sta];nc_coord_tal5=[nc_coord_tal5;nc_coord_alt];coord_avg5=[coord_avg5;coord_x_y]; % % coordx=247;coordy=247; % % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_66(I5,coordx,coordy,flg_grp(3,:)); % % Nc_total=[Nc_total;Nc_sta];nc_coord_tal=[nc_coord_tal;nc_coord_alt];coord_avg=[coord_avg;coord_x_y]; % coordx=463;coordy=25; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1(I5,coordx,coordy,flg_grp(4,:)); % Nc_total5=[Nc_total5;Nc_sta];nc_coord_tal5=[nc_coord_tal5;nc_coord_alt];coord_avg5=[coord_avg5;coord_x_y]; % coordx=463;coordy=463; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla2(I5,coordx,coordy,flg_grp(5,:)); % Nc_total5=[Nc_total5;Nc_sta];nc_coord_tal5=[nc_coord_tal5;nc_coord_alt];coord_avg5=[coord_avg5;coord_x_y]; % % %%利用特殊位置的點相對距離求出像素的偏差,并且再一次對角度精準校正 % x1x3_dis=abs(coord_avg5(3,1)-coord_avg5(1,1));y1y3_dis=coord_avg5(3,2)-coord_avg5(1,2); % angle1=atand(y1y3_dis/x1x3_dis); % x3x4_dis=coord_avg5(4,1)-coord_avg5(3,1);y3y4_dis=abs(coord_avg5(4,2)-coord_avg5(3,2)); % angle2=atand(-x3x4_dis/y3y4_dis); % x4x2_dis=abs(coord_avg5(2,1)-coord_avg5(4,1));y4y2_dis=coord_avg5(2,2)-coord_avg5(4,2); % angle3=atand(-y4y2_dis/x4x2_dis); % x2x1_dis=coord_avg5(1,1)-coord_avg5(2,1);y2y1_dis=abs(coord_avg5(1,2)-coord_avg5(2,2)); % angle4=atand(x2x1_dis/y2y1_dis); % angle_avg=(angle1+angle2+angle3+angle4)/4; % disp('角度精確矯正的值') % angle_avg % I5=imrotate(I5,-angle_avg,'bicubic'); % %%% 再一次去掉邊界部分 % [ro5,co5]=size(I5); % m=0;I5_1=[]; % for i=1:ro5 % if sum(uint8(I5(i,:)))>460*20 % m=m+1; % I5_1(m,:)=uint8(I5(i,:)); % end % end % n=0; % for i=1:co5 % if sum(I5_1(:,i))>460*20 % n=n+1; % I5_2(:,n)=I5_1(:,i); % end % end % I5=I5_2; % end % if Rot_flag==1 % thet_rv2(num,1)=angle_avg; % end % %% 平移或剪切的校正。如果沒有Scale攻擊同時沒有Rotate攻擊則無需再次進行特征點的匹配; % % 若有,則經過粗校正和精確校正的圖片必須再次進行特征點的匹配,檢查X,Y坐標的變化情況 % Crop_flag=0; % if Sca_flag==0&&Rot_flag==0 % I5=im2double(uint8(I5)); % Ipts5=OpenSurf(I5,Options); % % % Ipts4=OpenSurf(im2double(uint8(I4)),Options); % D5 = reshape([Ipts5.descriptor],64,[]); % % % Find the best matches % % % matches,最近鄰次近鄰比值的閾值設定法挑選,Ransac算法再進行一次挑選,是否要用到最小二乘法擬合那個矩陣??? % err_s5=zeros(1,length(Ipts1_impv)); % % cor1=1:length(Ipts1_impv); % cor_s5=zeros(1,length(Ipts1_impv)); % ratio_s5=zeros(length(Ipts1_impv),1); % dis_store_s5=zeros(length(Ipts1_impv),2); % dis_ratio_s5=zeros(length(Ipts1_impv),5); % for i=1:length(Ipts1_impv) % distance=sum((D5-repmat(D1(:,i),[1 length(Ipts5)])).^2,1); % dis_sort_s5=sort(distance,'ascend'); % dis_store_s5(i,:)=[dis_sort_s5(1),dis_sort_s5(2),]; % ratio_s5(i)=dis_sort_s5(1)/dis_sort_s5(2); % [err_s5(i),cor_s5(i)]=min(distance); % dis_ratio_s5(i,:)=[dis_store_s5(i,:) ratio_s5(i) i cor_s5(i)]; % end % % dis_ratio1_s5=sortrows(dis_ratio_s5,3); % mask1=dis_ratio1_s5(:,3)<=0.65; % dis_ratio2_s5=zeros(sum(mask1),5); % nn=0; % for i=1:length(dis_ratio1_s5) % if mask1(i) % nn=nn+1; % dis_ratio2_s5(nn,:)=dis_ratio1_s5(i,:); % end % end % % % 利用Ransac算法對匹配的點再進行一次挑選 % % % max_itera=50; %設置最大迭代次數 % % sigma=4; %設置擬合矩陣[m11,m12,m13;m21,m22,m23;0,0,1]還原的偏差 % % pretotal=0; %符合擬合模型的數據的個數 % % k=0; % % while pretotal <= size(dis_ratio2_s,1)*0.75 && k<max_itera %有2/3的數據符合擬合模型或達到最大迭代次數就可以退出了 % % SampIndex=round(1+(size(dis_ratio2_s,1)-1)*rand(3,1)); %產生三個隨機索引,找樣本用,floor向下取整 % % % % samp1_tmp=dis_ratio2_s(SampIndex,4); %對原數據隨機抽樣兩個樣本 % % samp2_tmp=dis_ratio2_s(SampIndex,5); % % % % samp1=[Ipts1_impv(samp1_tmp).x;Ipts1_impv(samp1_tmp).y]; % % samp2=[Ipts3(samp2_tmp).x;Ipts3(samp2_tmp).y]; % % % % att_matr=Matrix_solv(samp1,samp2); %對兩組數據擬合出矩陣,或其他變種擬合方法 % % total=0;dis_ratio3=[]; % % for j=1:size(dis_ratio2_s,1) % % x_ini=Ipts1_impv(dis_ratio2_s(j,4)).x;y_ini=Ipts1_impv(dis_ratio2_s(j,4)).y; % % x_atk=Ipts3(dis_ratio2_s(j,5)).x;y_atk=Ipts3(dis_ratio2_s(j,5)).y; % % tmp=att_matr*[x_atk;y_atk;1]; % % x_red=tmp(1);y_red=tmp(2); % % if sqrt((x_ini-x_red)^2+(y_ini-y_red)^2)<sigma % % total=total+1; % % dis_ratio3=[dis_ratio3;dis_ratio2_s(j,:)]; % % end % % end % % % mask=abs(line*[data ones(size(data,1),1)]'); %求每個數據到擬合直線的距離 % % % total=sum(mask<sigma); %計算數據距離直線小于一定閾值的數據的個數 % % % % if total>pretotal %找到符合擬合矩陣數據最多的擬合矩陣 % % pretotal=total; % % bestmatr=att_matr; %找到最好的擬合矩陣 % % best_disratio_s=dis_ratio3; %找到最符合條件的那些坐標 % % end % % k=k+1; % % end % % % Sort matches on vector distance % % [err, ind]=sort(err); % cor1_s1=dis_ratio2_s5(:,4); % cor3_s5=dis_ratio2_s5(:,5); % % % Make vectors with the coordinates of the best matches % Pos1_s5=[[Ipts1_impv(cor1_s1).y]',[Ipts1_impv(cor1_s1).x]']; % Pos3_s5=[[Ipts5(cor3_s5).y]',[Ipts5(cor3_s5).x]']; % % I5=im2uint8(I5); % I = zeros([1.5*size(I1,1) size(I1,2)*2.5 ]); % I(1:size(I1,1),1:size(I1,2))=im2uint8(I1); I(1:size(I5,1),size(I1,2)+1:size(I1,2)+size(I5,2))=I5; % figure, imshow(I,[]),title('縮放校正后再進行一次特征點匹配'); hold on; % % % Show the best matches % plot([Pos1_s5(:,2) Pos3_s5(:,2)+size(I1,2)]',[Pos1_s5(:,1) Pos3_s5(:,1)]','-'); % plot([Pos1_s5(:,2) Pos3_s5(:,2)+size(I1,2)]',[Pos1_s5(:,1) Pos3_s5(:,1)]','o'); % % Pos3_l5=length(Pos3_s5); % dis_stor_s5=zeros(Pos3_l5*(Pos3_l5-1)/2,3); %第一列記錄兩坐標間的距離,第二列記錄受攻擊后圖像起始坐標序號,第三列記錄終點坐標序號 % Pos1_s5(:,3)=1:Pos3_l5; Pos3_s5(:,3)=1:Pos3_l5; % % Pos1_tc=Pos1_s5; % Pos5_tc=Pos3_s5; % % dis_ratio2_tc=dis_ratio2_s; % % dis_coor_tc=dis_coor_s; % % point=20; % x_tc_cnt4=zeros(length(Pos1_tc),1);y_tc_cnt4=zeros(length(Pos5_tc),1); % for i=1:length(Pos1_tc) % % x1_tc=Pos1_tc(i,1);y1_tc=Pos1_tc(i,2); % 此處特別注意,其實在利用SURF算法時,其中有一步 % x1_tca=Pos5_tc(i,1);y1_tca=Pos5_tc(i,2); % 此處特別注意,其實在利用SURF算法時,其中有一步 % x_tcd=x1_tca-x1_tc;y_tcd=y1_tca-y1_tc; % x_tc_cnt4(i)=x_tcd;y_tc_cnt4(i)=y_tcd; % end % % x_tcd_sort4=sort(x_tc_cnt4);y_tcd_sort4=sort(y_tc_cnt4); % devi=0.075; % m=0;n=0; % med_vaule=round(length(Pos1_tc)/2); % for i=1:length(Pos1_tc) % if abs(x_tcd_sort4(i))>=abs(x_tcd_sort4(med_vaule))*(1-devi)&&abs(x_tcd_sort4(i))<=abs(x_tcd_sort4(med_vaule))*(1+devi) % m=m+1; % x_tcd_fil4(m)=x_tcd_sort4(i); % end % if abs(y_tcd_sort4(i))>=abs(y_tcd_sort4(med_vaule))*(1-devi)&&abs(y_tcd_sort4(i))<=abs(y_tcd_sort4(med_vaule))*(1+devi) % n=n+1; % y_tcd_fil4(n)=y_tcd_sort4(i); % end % end % x_tcd_init=sum(x_tcd_fil4)/length(x_tcd_fil4); % y_tcd_init=sum(y_tcd_fil4)/length(y_tcd_fil4); % x_tcd_init % y_tcd_init % % % Pos1_tc=Pos1_s; % % Pos4_tc=Pos3_s; % % % dis_ratio2_tc=dis_ratio2_s; % % % dis_coor_tc=dis_coor_s; % % % point=20; % % x_tc_cnt=zeros(length(Pos1_tc),1);y_tc_cnt=zeros(length(Pos4_tc),1); % % for i=1:length(Pos1_tc) % % % % x1_tc=Pos1_tc(i,1);y1_tc=Pos1_tc(i,2); % 此處特別注意,其實在利用SURF算法時,其中有一步 % % % x2_tc=Pos1_tc(dis_coor_tc(i,3),1);y2_tc=Pos1_tc(dis_coor_tc(i,3),2); % 通過旋轉Haar小波模板求響應值,將X,Y的坐標對調了 % % % x3=coord_ini(selt2(i+1),1);y3=coord_ini(selt2(i+1),2); % % x1_tca=Pos4_tc(i,1);y1_tca=Pos4_tc(i,2); % 此處特別注意,其實在利用SURF算法時,其中有一步 % % % x2_tca=Pos3_tc(dis_coor_tc(i,3),1);y2_tca=Pos3_tc(dis_coor_tc(i,3),2); % % % x3_a=coord_attk(selt2(i+1),1);y3_a=coord_attk(selt2(i+1),2); % % x_tcd=x1_tca-x1_tc;y_tcd=y1_tca-y1_tc; % % % x_norm=x_d/sqrt(x_d^2+y_d^2);y_norm=y_d/sqrt(x_d^2+y_d^2); %%旋轉前的向量坐標歸一化 % % x_tc_cnt(i)=x_tcd;y_tc_cnt(i)=y_tcd; % % % % end % % x_tcd_sort=sort(x_tc_cnt);y_tcd_sort=sort(y_tc_cnt); % % devi=0.050; % % m=0;n=0; % % med_vaule=round(length(Pos1_tc)/2); % % for i=1:length(Pos1_tc) % % if abs(x_tcd_sort(i))>=abs(x_tcd_sort(med_vaule))*(1-devi)&&abs(x_tcd_sort(i))<=abs(x_tcd_sort(med_vaule))*(1+devi) % % m=m+1; % % x_tcd_fil(m)=x_tcd_sort(i); % % end % % if abs(y_tcd_sort(i))>=abs(y_tcd_sort(med_vaule))*(1-devi)&&abs(y_tcd_sort(i))<=abs(y_tcd_sort(med_vaule))*(1+devi) % % n=n+1; % % y_tcd_fil(n)=y_tcd_sort(i); % % end % % end % % x_tcd_init=sum(x_tcd_fil)/length(x_tcd_fil); % % y_tcd_init=sum(y_tcd_fil)/length(y_tcd_fil); % % x_tcd_init % % y_tcd_init % % % 沒有剪切和平移的攻擊 % TC_thresh=0.8; % % if abs(x_tcd_init)<=TC_thresh&&abs(y_tcd_init)<=TC_thresh % disp('無剪切和平移攻擊'); % Crop_flag=0;Trans_flag=0; % I7=I5; % end % % % 只有剪切(或同時沿X軸負方向、Y軸負方向的平移) % if x_tcd_init<=-TC_thresh&&y_tcd_init<=-TC_thresh % Crop_flag=1; % [ro5,co5]=size(I5); % if ro5==co5&&ro5==512 % x_tcd_rev=round(-x_tcd_init);y_tcd_rev=round(-y_tcd_init); % se = translate(strel(1), [x_tcd_rev y_tcd_rev]); % I7= imdilate(I5,se); % figure,imshow(uint8(I7),[ ]),title('平移校正后的圖像'); % else % x_tcd_rev=round(-x_tcd_init);y_tcd_rev=round(-y_tcd_init); % I7=zeros(512,512); % I7(1+x_tcd_rev:ro5+x_tcd_rev,1+y_tcd_rev:co5+y_tcd_rev)=I5; % end % elseif (x_tcd_init)>=TC_thresh&&y_tcd_init>=TC_thresh %%同時沿X軸正方向、Y軸正方向的平移 % Trans_flag=1; % disp('沿X軸正方向、Y軸正方向的平移'); % [ro5,co5]=size(I5); % if ro5==co5&&ro5==512 % x_tcd_rev=round(-x_tcd_init);y_tcd_rev=round(-y_tcd_init); % se = translate(strel(1), [x_tcd_rev y_tcd_rev]); % I7= imdilate(I5,se); % figure,imshow(uint8(I7),[ ]),title('平移校正后的圖像'); % elseif ro5<512&&co5<512 % x_tcd_rev=round(-x_tcd_init);y_tcd_rev=round(-y_tcd_init); % I7=zeros(512,512); % I7(1+x_tcd_rev:ro5+x_tcd_rev,1+y_tcd_rev:co5+y_tcd_rev)=I5; %%這是為了兼容剪切攻擊的,那么怎樣兼容LGT/LT、Shearing攻擊呢?? % elseif ro5~=512||co5~=512 % x_tcd_rev=round(-x_tcd_init);y_tcd_rev=round(-y_tcd_init); %%兼容LGT/LT、Shearing攻擊呢 % se = translate(strel(1), [x_tcd_rev y_tcd_rev]); % I7= imdilate(I5,se); % figure,imshow(uint8(I7),[ ]),title('平移校正后的圖像'); % end % % end % % X,Y方向不一致的平移攻擊 % if (abs(x_tcd_init)>=TC_thresh&&abs(y_tcd_init)>=TC_thresh)&&y_tcd_init*x_tcd_init<=0 % disp('有平移攻擊'); % Trans_flag=1; % x_tcd_rev=round(-x_tcd_init);y_tcd_rev=round(-y_tcd_init); % se = translate(strel(1), [x_tcd_rev y_tcd_rev]); % I7= imdilate(I5,se); % figure,imshow(uint8(I7),[ ]),title('平移校正后的圖像'); % end % % thet_count(m,1)=atan((x2_ad*x3_d-x2_d*x3_ad)/(y2_ad*x3_d-x2_d*y3_ad)); % end % % %%% 同時有縮放和平移攻擊或RST的組合攻擊都有,縮放攻擊已經過粗校正和精細校正,所以必須再次進行特征點的匹配,以進行平移的精確校正, % %%% 備注:平移的精確校正其實有點沒必要,因為搜索范圍是一個16*16的區域,平移可以不同精確校正 % % if (Sca_flag==1&&Rot_flag==0)||Rot_flag==1 % % if Rot_flag==1&&Sca_flag==0 % % I6=I5; % % end % % %%% 同時有縮放和平移攻擊或RST的組合攻擊都有,縮放攻擊已經過粗校正和精細校正,所以必須再次進行特征點的匹配,以進行平移的精確校正, % %%% 備注:平移的精確校正其實有點沒必要,因為搜索范圍是一個16*16的區域,平移可以不同精確校正 % % if (Sca_flag==1&&Rot_flag==0)||Rot_flag==1 % % if Rot_flag==1&&Sca_flag==0 % % I6=I5; % % end % if Sca_flag==1&&Rot_flag==0 % % Ipts6=OpenSurf(im2double(uint8(I6)),Options); % D6 = reshape([Ipts6.descriptor],64,[]); % % % Find the best matches % % % matches,最近鄰次近鄰比值的閾值設定法挑選,Ransac算法再進行一次挑選,是否要用到最小二乘法擬合那個矩陣??? % err_s6=zeros(1,length(Ipts1_impv)); % % cor1=1:length(Ipts1_impv); % cor_s6=zeros(1,length(Ipts1_impv)); % ratio_s6=zeros(length(Ipts1_impv),1); % dis_store_s6=zeros(length(Ipts1_impv),2); % dis_ratio_s6=zeros(length(Ipts1_impv),5); % for i=1:length(Ipts1_impv) % distance=sum((D6-repmat(D1(:,i),[1 length(Ipts6)])).^2,1); % dis_sort_s6=sort(distance,'ascend'); % dis_store_s6(i,:)=[dis_sort_s6(1),dis_sort_s6(2),]; % ratio_s6(i)=dis_sort_s6(1)/dis_sort_s6(2); % [err_s6(i),cor_s6(i)]=min(distance); % dis_ratio_s6(i,:)=[dis_store_s6(i,:) ratio_s6(i) i cor_s6(i)]; % end % % dis_ratio1_s6=sortrows(dis_ratio_s6,3); % mask1=dis_ratio1_s6(:,3)<=0.65; % dis_ratio2_s6=zeros(sum(mask1),5); % nn=0; % for i=1:length(dis_ratio1_s6) % if mask1(i) % nn=nn+1; % dis_ratio2_s6(nn,:)=dis_ratio1_s6(i,:); % end % end % % % 利用Ransac算法對匹配的點再進行一次挑選 % % % max_itera=50; %設置最大迭代次數 % % sigma=4; %設置擬合矩陣[m11,m12,m13;m21,m22,m23;0,0,1]還原的偏差 % % pretotal=0; %符合擬合模型的數據的個數 % % k=0; % % while pretotal <= size(dis_ratio2_s,1)*0.75 && k<max_itera %有2/3的數據符合擬合模型或達到最大迭代次數就可以退出了 % % SampIndex=round(1+(size(dis_ratio2_s,1)-1)*rand(3,1)); %產生三個隨機索引,找樣本用,floor向下取整 % % % % samp1_tmp=dis_ratio2_s(SampIndex,4); %對原數據隨機抽樣兩個樣本 % % samp2_tmp=dis_ratio2_s(SampIndex,5); % % % % samp1=[Ipts1_impv(samp1_tmp).x;Ipts1_impv(samp1_tmp).y]; % % samp2=[Ipts3(samp2_tmp).x;Ipts3(samp2_tmp).y]; % % % % att_matr=Matrix_solv(samp1,samp2); %對兩組數據擬合出矩陣,或其他變種擬合方法 % % total=0;dis_ratio3=[]; % % for j=1:size(dis_ratio2_s,1) % % x_ini=Ipts1_impv(dis_ratio2_s(j,4)).x;y_ini=Ipts1_impv(dis_ratio2_s(j,4)).y; % % x_atk=Ipts3(dis_ratio2_s(j,5)).x;y_atk=Ipts3(dis_ratio2_s(j,5)).y; % % tmp=att_matr*[x_atk;y_atk;1]; % % x_red=tmp(1);y_red=tmp(2); % % if sqrt((x_ini-x_red)^2+(y_ini-y_red)^2)<sigma % % total=total+1; % % dis_ratio3=[dis_ratio3;dis_ratio2_s(j,:)]; % % end % % end % % % mask=abs(line*[data ones(size(data,1),1)]'); %求每個數據到擬合直線的距離 % % % total=sum(mask<sigma); %計算數據距離直線小于一定閾值的數據的個數 % % % % if total>pretotal %找到符合擬合矩陣數據最多的擬合矩陣 % % pretotal=total; % % bestmatr=att_matr; %找到最好的擬合矩陣 % % best_disratio_s=dis_ratio3; %找到最符合條件的那些坐標 % % end % % k=k+1; % % end % % % Sort matches on vector distance % % [err, ind]=sort(err); % cor1_s6=dis_ratio2_s6(:,4); % cor3_s6=dis_ratio2_s6(:,5); % % % Make vectors with the coordinates of the best matches % Pos1_s6=[[Ipts1_impv(cor1_s6).y]',[Ipts1_impv(cor1_s6).x]']; % Pos3_s6=[[Ipts6(cor3_s6).y]',[Ipts6(cor3_s6).x]']; % % I = zeros([1.5*size(I1,1) size(I1,2)*2.5 ]); % I(1:size(I1,1),1:size(I1,2))=im2uint8(I1); I(1:size(I6,1),size(I1,2)+1:size(I1,2)+size(I6,2))=I6; % figure, imshow(I,[]),title('尺度校正后再進行一次特征點匹配'); hold on; % % % Show the best matches % plot([Pos1_s6(:,2) Pos3_s6(:,2)+size(I1,2)]',[Pos1_s6(:,1) Pos3_s6(:,1)]','-'); % plot([Pos1_s6(:,2) Pos3_s6(:,2)+size(I1,2)]',[Pos1_s6(:,1) Pos3_s6(:,1)]','o'); % % Pos3_l6=length(Pos3_s6); % dis_stor_s6=zeros(Pos3_l6*(Pos3_l6-1)/2,3); %第一列記錄兩坐標間的距離,第二列記錄受攻擊后圖像起始坐標序號,第三列記錄終點坐標序號 % Pos1_s6(:,3)=1:Pos3_l6; Pos3_s6(:,3)=1:Pos3_l6; % % Pos1_tc=Pos1_s6; % Pos4_tc=Pos3_s6; % % dis_ratio2_tc=dis_ratio2_s; % % dis_coor_tc=dis_coor_s; % % point=20; % x_tc_cnt=zeros(length(Pos1_tc),1);y_tc_cnt=zeros(length(Pos4_tc),1); % for i=1:length(Pos1_tc) % % x1_tc=Pos1_tc(i,1);y1_tc=Pos1_tc(i,2); % 此處特別注意,其實在利用SURF算法時,其中有一步 % x1_tca=Pos4_tc(i,1);y1_tca=Pos4_tc(i,2); % 此處特別注意,其實在利用SURF算法時,其中有一步 % x_tcd=x1_tca-x1_tc;y_tcd=y1_tca-y1_tc; % x_tc_cnt(i)=x_tcd;y_tc_cnt(i)=y_tcd; % end % % x_tcd_sort=sort(x_tc_cnt);y_tcd_sort=sort(y_tc_cnt); % devi=0.075; % m=0;n=0; % med_vaule=round(length(Pos1_tc)/2); % for i=1:length(Pos1_tc) % if abs(x_tcd_sort(i))>=abs(x_tcd_sort(med_vaule))*(1-devi)&&abs(x_tcd_sort(i))<=abs(x_tcd_sort(med_vaule))*(1+devi) % m=m+1; % x_tcd_fil(m)=x_tcd_sort(i); % end % if abs(y_tcd_sort(i))>=abs(y_tcd_sort(med_vaule))*(1-devi)&&abs(y_tcd_sort(i))<=abs(y_tcd_sort(med_vaule))*(1+devi) % n=n+1; % y_tcd_fil(n)=y_tcd_sort(i); % end % end % x_tcd_init=sum(x_tcd_fil)/length(x_tcd_fil); % y_tcd_init=sum(y_tcd_fil)/length(y_tcd_fil); % x_tcd_init % y_tcd_init % % % 沒有剪切和平移的攻擊 % TC_thresh1=1.5; % if abs(x_tcd_init)<=TC_thresh1&&abs(y_tcd_init)<=TC_thresh1 % disp('縮放和平移攻擊都有,但平移經粗略校正即可'); % Crop_flag=0;Trans_flag=0; % I7=uint8(I6); % end % % % % 只有剪切(或同時沿X軸負方向、Y軸負方向的平移)(剪切和縮放的組合攻擊不做) % % if abs(x_tcd_init)>=1.0&&abs(y_tcd_init)>=1.0 % % Crop_flag=1; % % [ro6,co6]=size(I6); % % if ro6==co6&&ro6==512 % % x_tcd_rev=round(-x_tcd_init);y_td_rev=round(-y_tcd_init); % % se = translate(strel(1), [x_tcd_rev y_td_rev]); % % I7= imdilate(I6,se); % % figure,imshow(uint8(I7),[ ]),title('平移校正后的圖像'); % % else % % I7=zeros(512,512); % % I7(1-x_tcd_rev:ro6-x_tcd_rev,1-y_tcd_rev:co6-y_tcd_rev)=I6; % % end % % end % % 只有平移的攻擊 % if abs(x_tcd_init)>=TC_thresh1||abs(y_tcd_init)>=TC_thresh1 % disp('有平移攻擊(且有縮放攻擊)'); % Trans_flag=1; % x_tcd_rev=round(-x_tcd_init);y_tcd_rev=round(-y_tcd_init); % se = translate(strel(1), [x_tcd_rev y_tcd_rev]); % I7= imdilate(uint8(I6),se); % figure,imshow(uint8(I7),[ ]),title('平移精確校正后的圖像'); % end % % thet_count(m,1)=atan((x2_ad*x3_d-x2_d*x3_ad)/(y2_ad*x3_d-x2_d*y3_ad)); % end % % % %% 特殊位置的點定位出圖像的邊界,最重要的是起始點,但是若coord_x_y的x,y均小于25或一個大于25、 % % 另外一個小于25,則怎么辦??故而邊界上的8*8DCT塊不要嵌入信息 % if Crop_flag==0 % if (Sca_flag==1&&Trans_flag==0)||(Sca_flag==1&&Rot_flag==1&&Rotcrp_flag==0) % I7=uint8(I6); %%僅僅只有Scale攻擊或Rotate、Scale的組合攻擊,備注:有沒有漏掉一些其他的攻擊??? % Nc_total7=[];nc_coord_tal7=[];coord_avg7=[]; % coordx=25;coordy=25; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1_1(I7,coordx,coordy,flg_grp(1,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % coordx=25;coordy=463; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1(I7,coordx,coordy,flg_grp(2,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % % coordx=247;coordy=247; % % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_66(I7,coordx,coordy,flg_grp(3,:)); % % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % coordx=463;coordy=25; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1(I7,coordx,coordy,flg_grp(4,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % coordx=463;coordy=463; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla2(I7,coordx,coordy,flg_grp(5,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % %%% 求出x,y坐標起始點的誤差 % x_delt=25-round((coord_avg7(1,1)+coord_avg7(2,1))/2);y_delt=25-round((coord_avg7(1,2)+coord_avg7(3,2))/2); % I7_rect=[17-y_delt 17-x_delt 479 479]; %%%特別注意:imcrop函數坐標體系不同于imscale,translate等 % % I6_rect=[17 17 479 479]; % I7_crp=imcrop(I7,I7_rect); % % elseif (Rot_flag==1)&&(Sca_flag==0&&Trans_flag==0) % I7=I5; % Nc_total7=[];nc_coord_tal7=[];coord_avg7=[]; % coordx=25;coordy=25; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1_1(I7,coordx,coordy,flg_grp(1,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % coordx=25;coordy=463; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1(I7,coordx,coordy,flg_grp(2,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % % coordx=247;coordy=247; % % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_66(I7,coordx,coordy,flg_grp(3,:)); % % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % coordx=463;coordy=25; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1(I7,coordx,coordy,flg_grp(4,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % coordx=463;coordy=463; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla2(I7,coordx,coordy,flg_grp(5,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % %%% 求出x,y坐標起始點的誤差 % x_delt=25-round((coord_avg7(1,1)+coord_avg7(2,1))/2);y_delt=25-round((coord_avg7(1,2)+coord_avg7(3,2))/2); % I7_rect=[17-y_delt 17-x_delt 479 479]; %%%特別注意:imcrop函數坐標體系不同于imscale,translate等 % % I6_rect=[17 17 479 479]; % I7_crp=imcrop(I7,I7_rect); % % elseif (Rot_flag==1&&Rotcrp_flag==1)&&Sca_flag==0 % %%imrotate、imcrop的組合攻擊,但沒有Scale,也包含RT的組合攻擊 % I7=I5; % Nc_total7=[];nc_coord_tal7=[];coord_avg7=[]; % coordx=25-x_tcd_rev;coordy=25-y_tcd_rev; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1_1(I7,coordx,coordy,flg_grp(1,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % coordx=25-x_tcd_rev;coordy=463-y_tcd_rev; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1(I7,coordx,coordy,flg_grp(2,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % % coordx=247;coordy=247; % % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_66(I7,coordx,coordy,flg_grp(3,:)); % % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % coordx=463-x_tcd_rev;coordy=25-y_tcd_rev; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1(I7,coordx,coordy,flg_grp(4,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % coordx=463-x_tcd_rev;coordy=463-y_tcd_rev; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla2(I7,coordx,coordy,flg_grp(5,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % %%% 求出x,y坐標起始點的誤差 % x_delt=25-x_tcd_rev-round((coord_avg7(1,1)+coord_avg7(2,1))/2);y_delt=25-y_tcd_rev-round((coord_avg7(1,2)+coord_avg7(3,2))/2); % I7_rect=[17-y_tcd_rev-y_delt 17-x_tcd_rev-x_delt 479 479]; %%%特別注意:imcrop函數坐標體系不同于imscale,translate等 % % I6_rect=[17 17 479 479]; % I7_crp=imcrop(I7,I7_rect); % % % elseif (Rot_flag==1&&Rotcrp_flag==1)&&Sca_flag==1 % %%imrotate、imcrop的組合攻擊,同時有Scale,其實也包含RST組合攻擊 % I7=I6; % Nc_total7=[];nc_coord_tal7=[];coord_avg7=[]; % coordx=25-x_tcd_rev;coordy=25-y_tcd_rev; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1_1(I7,coordx,coordy,flg_grp(1,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % coordx=25-x_tcd_rev;coordy=463-y_tcd_rev; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1(I7,coordx,coordy,flg_grp(2,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % % coordx=247;coordy=247; % % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_66(I7,coordx,coordy,flg_grp(3,:)); % % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % coordx=463-x_tcd_rev;coordy=25-y_tcd_rev; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1(I7,coordx,coordy,flg_grp(4,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % coordx=463-x_tcd_rev;coordy=463-y_tcd_rev; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla2(I7,coordx,coordy,flg_grp(5,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % %%% 求出x,y坐標起始點的誤差 % x_delt=25-x_tcd_rev-round((coord_avg7(1,1)+coord_avg7(2,1))/2);y_delt=25-y_tcd_rev-round((coord_avg7(1,2)+coord_avg7(3,2))/2); % I7_rect=[17-y_tcd_rev-y_delt 17-x_tcd_rev-x_delt 479 479]; %%%特別注意:imcrop函數坐標體系不同于imscale,translate等 % % I6_rect=[17 17 479 479]; % I7_crp=imcrop(I7,I7_rect); % % elseif (Rot_flag==0&&Sca_flag==1)&&(Trans_flag==1) % %%刪除行列造成的攻擊之一,以及ST的組合攻擊 % Nc_total7=[];nc_coord_tal7=[];coord_avg7=[]; % coordx=25;coordy=25; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1_1(I7,coordx,coordy,flg_grp(1,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % coordx=25;coordy=463; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1(I7,coordx,coordy,flg_grp(2,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % % coordx=247;coordy=247; % % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_66(I7,coordx,coordy,flg_grp(3,:)); % % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % coordx=463;coordy=25; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1(I7,coordx,coordy,flg_grp(4,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % coordx=463;coordy=463; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla2(I7,coordx,coordy,flg_grp(5,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % %%% 求出x,y坐標起始點的誤差 % x_delt=25-round((coord_avg7(1,1)+coord_avg7(2,1))/2);y_delt=25-round((coord_avg7(1,2)+coord_avg7(3,2))/2); % I7_rect=[17-y_delt 17-x_delt 479 479]; %%%特別注意:imcrop函數坐標體系不同于imscale,translate等 % % I6_rect=[17 17 479 479]; % I7_crp=imcrop(I7,I7_rect); % % % elseif (Rot_flag==1&&Trans_flag==1) % %%RT、RST的組合攻擊,但其實根本沒有走到這里,因為Rot_flag==1,其實就是Trans==1 % Nc_total7=[];nc_coord_tal7=[];coord_avg7=[]; % coordx=25;coordy=25; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1_1(I7,coordx,coordy,flg_grp(1,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % coordx=25;coordy=463; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1(I7,coordx,coordy,flg_grp(2,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % % coordx=247;coordy=247; % % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_66(I7,coordx,coordy,flg_grp(3,:)); % % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % coordx=463;coordy=25; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1(I7,coordx,coordy,flg_grp(4,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % coordx=463;coordy=463; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla2(I7,coordx,coordy,flg_grp(5,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % %%% 求出x,y坐標起始點的誤差 % x_delt=25-round((coord_avg7(1,1)+coord_avg7(2,1))/2);y_delt=25-round((coord_avg7(1,2)+coord_avg7(3,2))/2); % I7_rect=[17-y_delt 17-x_delt 479 479]; %%%特別注意:imcrop函數坐標體系不同于imscale,translate等 % % I6_rect=[17 17 479 479]; % I7_crp=imcrop(I7,I7_rect); % % elseif (Rot_flag==0&&Sca_flag==0)&&(Trans_flag==1) % %%刪除行列造成的攻擊之二,以及只有T的攻擊 % Nc_total7=[];nc_coord_tal7=[];coord_avg7=[]; % coordx=25;coordy=25; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1_1(I7,coordx,coordy,flg_grp(1,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % coordx=25;coordy=463; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1(I7,coordx,coordy,flg_grp(2,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % % coordx=247;coordy=247; % % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_66(I7,coordx,coordy,flg_grp(3,:)); % % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % coordx=463;coordy=25; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla1(I7,coordx,coordy,flg_grp(4,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % coordx=463;coordy=463; % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_pla2(I7,coordx,coordy,flg_grp(5,:)); % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % %%% 求出x,y坐標起始點的誤差 % % x_delt=25-round((coord_avg7(1,1)+coord_avg7(2,1))/2);y_delt=25-round((coord_avg7(1,2)+coord_avg7(3,2))/2); % I7_rect=[17-y_delt 17-x_delt 479 479]; %%%特別注意:imcrop函數坐標體系不同于imscale,translate等 % % I6_rect=[17 17 479 479]; % I7_crp=imcrop(I7,I7_rect); % elseif (Rot_flag==0&&Sca_flag==0)&&(Trans_flag==0) % I7_rect=[17 17 479 479]; % % I6_rect=[17 17 479 479]; % I7_crp=imcrop(I7,I7_rect); % end % % elseif (Crop_flag==1)&&(Sca_flag==0) % I7_rect=[17 17 479 479]; % % I6_rect=[17 17 479 479]; % I7_crp=imcrop(I7,I7_rect); % % elseif (Sca_flag==1)&&(Trans_flag==1) %%刪除行列造成的攻擊之三,以及ST的組合攻擊 % % Nc_total7=[];nc_coord_tal7=[];coord_avg7=[]; % % coordx=25;coordy=25; % % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_66(I7,coordx,coordy,flg_grp(1,:)); % % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % % coordx=25;coordy=463; % % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_66(I7,coordx,coordy,flg_grp(2,:)); % % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % % coordx=247;coordy=247; % % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_66(I7,coordx,coordy,flg_grp(3,:)); % % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % % coordx=463;coordy=25; % % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_66(I7,coordx,coordy,flg_grp(4,:)); % % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % % coordx=463;coordy=463; % % [Nc_sta,nc_coord_alt,coord_x_y]=odd_even_ext24_66(I7,coordx,coordy,flg_grp(5,:)); % % Nc_total7=[Nc_total7;Nc_sta];nc_coord_tal7=[nc_coord_tal7;nc_coord_alt];coord_avg7=[coord_avg7;coord_x_y]; % % %%% 求出x,y坐標起始點的誤差 % % x_delt=25-round(coord_avg7(1,1));y_delt=25-round(coord_avg7(1,2)); % % I7_rect=[17-x_delt 17-y_delt 479 479]; % % % I6_rect=[17 17 479 479]; % % I7_crp=imcrop(I7,I7_rect); % % end %% 提取版權水印 crc_tran0=cell(len,1); % wm_ext=zeros(rm_crp/16*cm_crp/16,amt); m=1;zt=1; %小波分解級數wtype = 'haar'; %小波分解類型[C,S] = wavedec2(I7_crp,zt,wtype);%多尺度二維小波分解%%尺度1低頻與高頻系數提取ca1_6 = appcoef2(C,S,wtype,1); %提取尺度1的低頻系數temp=ca1_6;[rm2,cm2]=size(ca1_6);cda0_I6=blkproc(temp,[8 8],'dct2');for s=1:rm2/8if m>lenbreak;endfor p=1:cm2/8if m>lenbreak;endx=(s-1)*8;y=(p-1)*8; l=1;for n=1:im_lk=rnd1(m,n);if k==1d=round(cda0_I6(x+1,y+2)/Q50(1,2));elseif k==2d=round(cda0_I6(x+2,y+1)/Q50(2,1));elseif k==3d=round(cda0_I6(x+3,y+1)/Q50(3,1));elseif k==4d=round(cda0_I6(x+2,y+2)/Q50(2,2));elseif k==5d=round(cda0_I6(x+1,y+3)/Q50(1,3));elseif k==6d=round(cda0_I6(x+1,y+4)/Q50(1,4));elseif k==7d=round(cda0_I6(x+2,y+3)/Q50(2,3));elseif k==8d=round(cda0_I6(x+3,y+2)/Q50(3,2));elseif k==9d=round(cda0_I6(x+4,y+1)/Q50(4,1));end% d1(i,j,n)=d;if mod(d,2)==0crc_tran0{m,1}(1,l)='0';elsecrc_tran0{m,1}(1,l)='1';endl=l+1;endm=m+1;endend % rr=rr+1; % end % end %% 將提取的水印組合成crc6校驗所需長度,并且進行校驗%% crc4_att=cell(M,1); chk_1=2; temp=(reshape(crc_tran0,chk_1,len/chk_1))'; % un_code=cell(ro*co/10,1); for i=1:len/chk_1m=1;for j=1:chk_1for k=1:6crc4_att{i,1}(1,m)=temp{i,j}(1,k);m=m+1;endend end det=crc.detector('Polynomial',[1 0 0 0 0 1 1], 'InitialState',[0 0 0 0 0 0], ...'ReflectInput',false,'ReflectRemainder',false, ...'FinalXOR', [0 0 0 0 0 0]); error1=zeros(M,1); for i=1:Mtemp0=bin2dec(crc4_att{i,1});temp1=de2bi(temp0,12,'left-msb'); %注意:此處只能用de2bi[outdata error] = detect(det,temp1');error1(i,1)=error;if temp0==0error1(i,1)=1;end end %%檢測crc6算法的正確性 error2=ones(M,1); for i=1:Mif crc4_tmp{i,1}==crc4_att{i,1};error2(i)=0;end end err=zeros(M,1); for i=1:Mif error2(i)~=error1(i);err(i)=1;end end disp('crc6未檢測出的錯誤'); sum(err) mm=sum(error1); disp('crc6檢測出的錯誤'); mm (length(error1)-sum(error1))*6/K %%未檢測到錯誤的那些包的數據 cc=find(err==1); cc1=length(cc); cc2=cell(cc1,1); for i=1:cc1cc2{i,1}=crc4_att{cc(i),1}; end ll=length(error1)-sum(error1); j=1; msg_decoded0=cell(ll,1); for i=1:Mif error1(i,1)==0; %做標志位千萬不能用'0'字符類型,否則會出現意想不到的錯誤msg_decoded0{j,1}=dec2bin(bin2dec(crc4_att{i,1}),12);j=j+1;end end msg_decoded=cell(ll*6,1); nn=1; for i=1:llfor j=1:length(crc4_att{1,1})-6msg_decoded{nn,1}=msg_decoded0{i,1}(1,j);nn=nn+1;end end % msg_decoded=msg_coded_rev(:,2); Gen_array=zeros(ll*6,K); m=1; for i=1:Mif error1(i,1)==0Gen_array(6*(m-1)+1:6*(m-1)+6,:)=Gen_array1(6*(i-1)+1:6*(i-1)+6,:);m=m+1;end end %% LT解碼%% xx=0; Random_dec_array=cell(K,1); while xx<=60xx=xx+1;if sum(sum(Gen_array))==0break;endfor i=1:ll*6aa=find(Gen_array(i,:)==1);if isempty(aa)==1continue;elseV=aa(1);kk=length(aa);if kk==1Random_dec_array{V,1}=dec2bin(bin2dec(msg_decoded{i,1}),1);Gen_array(i,V)=0;pac=find(Gen_array(:,V)==1);for m=1:length(pac)temp0=bin2dec(Random_dec_array{V,1});temp1=bin2dec(msg_decoded{pac(m),1});temp3=bitxor(temp0,temp1);msg_decoded{pac(m),1}=dec2bin(temp3,1);Gen_array(pac(m),V)=0;endendendend end xx % t1=toc; % t1 BE=0; fail_pac=0; for i=1:Kfor j=1:amt if isempty(Random_dec_array{i,1})==0if b{i,1}(1,j)~=str2double(Random_dec_array{i,1}(1,j))BE=BE+1;endendend end for i=1:Kfor j=1:amtif isempty(Random_dec_array{i,1})==1Random_dec_array{i,1}=num2str(~b_t0(i,j));fail_pac=fail_pac+1;BE=BE+amt; endend end disp('未解出包的個數'); fail_pac BER=BE/(K*amt); Ber_count(num)=BER; disp('誤碼個數'); BE disp('誤碼率'); BER tmp0=zeros(K,amt); for i=1:Kfor j=1:amttmp0(i,j)=str2double(Random_dec_array{i,1}(1,j));end end tmp1=tmp0'; mark2=(reshape(tmp1,co,ro))'; figure(fig) subplot(2,4,4); % mark2=uint8(mark2); imshow(mark2,[ ]),title('提取水印crc6圖像(DCQIM法)');[ro7,co7]=size(I7); if ro7==co7&&ro7==512PSNR=psnr(I0,I7,cm,rm);% PSNR=psnr(psnr_cover,psnr_watermarked,cm,rm);Psnr_count(num)=PSNR;PSNR % Psnr_count(num)=PSNR; % else % continue; end %%%%%%% Oringinal mark and mark test %%%%%%%%%% disp('原水印圖象與提取水印圖象互相關系系數') NC=nc(mark2,wm_cpy); Nc_count(num)=NC; NC end

    3 仿真結果

    disp('對嵌入水印的圖象攻擊,選擇項(dt-dcqim法(6in8),加了LT碼和CRC6)'); disp('1—添加高斯白噪聲'); disp('2-添加椒鹽、加性或斑點噪聲'); disp('3--高斯低通濾波'); disp('4--均值濾波'); disp('5--中值濾波'); disp('6—直方圖統計算法對圖像進行增強'); disp('7—直方圖規定化對圖像進行增強'); disp('8—對圖像進行模糊集增強'); disp('9—JPEG 壓縮'); disp('10—對圖像進行毛玻璃扭曲'); disp('11—尺寸縮放'); disp('12—圖象剪切'); disp('13—對圖像進行一定角度旋轉'); disp('14—對圖像進行旋轉扭曲'); disp('15—對圖像進行平移'); disp('16—對圖像先rotation再scale(包括各種RS組合攻擊)'); disp('17—對圖像先scale再rotation(包括各種RST組合攻擊)'); disp('18—對圖像先scale再translation'); disp('19—對圖像先translation再scale'); disp('20—對圖像Rot和Crop的攻擊,不去黑色背景'); disp('21—對圖像Rot和Crop的攻擊,去黑色背景,類似Stirmark中RotCrop攻擊'); disp('22—對圖像Rot、Sca、Crop的攻擊,去黑色背景,類似Stirmark中RotScale攻擊'); disp('23—對圖像先Rot、再Trans的組合攻擊'); disp('24—對圖像先Trans、再Rot的組合攻擊'); disp('25—對圖像先Sca、再Rot、后Trans的組合攻擊'); disp('26—對圖像先Sca、再Trans、后Rot的組合攻擊'); disp('27—對圖像Shearing攻擊'); disp('28—對圖像Linear Geometric Transform/Linear Transform攻擊'); disp('29—對圖像隨機刪除幾行幾列'); disp('0—直接檢測水印')

    4 參考文獻

    5 代碼下載

    ?

    總結

    以上是生活随笔為你收集整理的【图像隐藏】基于小波变换+SURF、RANSAC、LT码、CRC(循环冗余检验)码多种算法实现图像隐藏(抗多种攻击)matlab源码的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    丁香色婷婷| 国产99爱| 制服丝袜在线 | 国产精品久久在线观看 | 97超碰国产在线 | 欧美成人一区二区 | 久久国产精品一区二区 | 亚洲福利精品 | 欧美ⅹxxxxxx | 国产中文a| 午夜性福利 | 国产日韩欧美在线看 | 狠狠地日 | 国产一级精品视频 | 日韩资源在线播放 | 天天插天天狠 | 99 久久久久| 2024国产精品视频 | 久久综合导航 | 五月天亚洲婷婷 | 99国产精品久久久久久久久久 | 久久激情影院 | 日韩综合视频在线观看 | 天天草天天干天天 | 三级性生活视频 | 在线免费看片 | www.久久爱.cn| 国产精品久久久久久久久久直播 | av天天色| 国产综合91 | 欧美日韩国产综合网 | av大片免费在线观看 | 午夜精品一二区 | 日韩精品免费一区二区三区 | 免费视频你懂的 | 96超碰在线 | 久久成人国产精品免费软件 | 欧美激情在线看 | 日日夜夜精品免费观看 | 亚洲高清视频在线观看免费 | 日日爱999| 久久婷婷一区二区三区 | 天天操天天摸天天射 | 在线观看视频中文字幕 | 人人澡人 | 三级黄色在线观看 | 国产在线精品观看 | 色综合久久五月天 | 福利一区在线视频 | 黄污网站在线观看 | 国产精品美女久久久久久久久久久 | 亚洲激情六月 | 国产露脸91国语对白 | 五月天色网站 | 久久精品免费看 | 99久久精品免费一区 | 波多野结衣小视频 | 天天干,天天射,天天操,天天摸 | 国产18精品乱码免费看 | 国产一区二区免费 | 久久久久久久久免费视频 | 亚洲色图27p | 久久99免费 | 天天激情天天干 | 亚洲欧美综合精品久久成人 | 天天综合网在线观看 | 国产精品久久99综合免费观看尤物 | 欧美日韩高清 | 国产精品久久久久久久7电影 | 亚洲午夜久久久久久久久 | 人人爽久久久噜噜噜电影 | 韩日精品在线 | 久久久久国产视频 | 久久天天拍 | 激情网在线视频 | 久久久久久久久久久影视 | 久久99热精品这里久久精品 | 91黄在线看 | 片黄色毛片黄色毛片 | 国产精品av在线免费观看 | 91精品国产麻豆国产自产影视 | 国产精品美女久久久网av | 又紧又大又爽精品一区二区 | 日本在线精品视频 | 天天综合中文 | www.色就是色 | 欧美整片sss| 亚洲h在线播放在线观看h | 国产又粗又硬又爽的视频 | 天天拍天天操 | 国产精品自在线拍国产 | 国产精品久久精品 | 欧美精品一区二区性色 | 亚洲精品美女久久 | 国产资源在线观看 | 狠狠狠色丁香婷婷综合久久五月 | 麻豆精品视频在线观看免费 | 中文字幕电影网 | 日韩在线观看电影 | 91麻豆精品国产91久久久无需广告 | 国产一区91| 欧美成年性 | 九九欧美视频 | 亚洲高清视频在线观看免费 | 狠狠色伊人亚洲综合网站色 | 视频国产 | 精品一区在线看 | 色午夜影院 | av在线免费在线 | 片黄色毛片黄色毛片 | www.大网伊人 | 一级片视频免费观看 | 欧美有色 | 91精品国产综合久久福利不卡 | 国产一区不卡在线 | 欧美日韩视频在线观看一区二区 | 久久久久女人精品毛片九一 | 亚洲撸撸| 91福利社在线观看 | 国产精品美女久久久久久免费 | 在线看成人片 | 伊人天堂网 | 久久综合婷婷国产二区高清 | 美女精品 | 免费观看性生交 | 一区二区三区电影大全 | 九草在线观看 | a级片韩国| 久久精品欧美视频 | 中文字幕在线观看资源 | 亚洲1区 在线 | 夜又临在线观看 | 激情在线免费视频 | 超级碰99| www.91成人| 国产高清不卡 | 国产一区二区在线免费播放 | 欧美俄罗斯性视频 | 日日碰狠狠添天天爽超碰97久久 | av手机版 | 精品久久久影院 | 欧美尹人 | 天天操操 | 久久99久| 久草网视频 | 激情综合站 | 精产嫩模国品一二三区 | 97电影手机版 | 亚洲国产三级 | av国产在线观看 | 丁香六月中文字幕 | www日日夜夜 | 欧美日韩高清国产 | 九九九九热精品免费视频点播观看 | 成人av免费看 | 国产精品专区在线 | 久久久久久久综合色一本 | 日韩在线观看一区二区 | 精品在线视频一区 | 久久不见久久见免费影院 | 日一日干一干 | 欧美精品久久久久久久久免 | 伊人久久精品久久亚洲一区 | 99久久夜色精品国产亚洲 | 亚洲国产播放 | 91免费网| 激情视频在线高清看 | 国内99视频| 免费看的黄色片 | 国产亚洲欧美精品久久久久久 | 中文字幕在线观看三区 | 亚洲综合少妇 | 亚洲欧美国产视频 | 国产精品一区二区av麻豆 | 国产人免费人成免费视频 | 制服丝袜一区二区 | 一级性视频 | 国内精品久久久久影院优 | 麻豆国产露脸在线观看 | 伊人久久在线观看 | www.天天操| 久久久麻豆精品一区二区 | 久草在线精品观看 | 人人讲下载 | 亚洲精品高清在线观看 | 亚洲美女视频在线 | 嫩草av影院 | 亚洲视频 中文字幕 | 国产精品一区二区无线 | 91亚洲精| 国产精品扒开做爽爽的视频 | 特级西西人体444是什么意思 | 高清中文字幕 | 黄色av网站在线观看免费 | 伊人手机在线 | 日韩精品不卡在线 | 最新中文字幕在线播放 | 97视频在线免费观看 | 中文字幕视频一区 | 狠狠色伊人亚洲综合网站色 | 韩国一区二区在线观看 | 日韩精品一区二区在线观看视频 | 午夜日b视频 | 欧美九九视频 | 国产欧美日韩精品一区二区免费 | av黄色av| 成片免费| 日韩专区一区二区 | 色婷婷国产在线 | 一区二区三区在线观看免费 | 日韩精品免费一区二区 | 久久久久久伊人 | 毛片永久免费 | 亚洲精品99久久久久久 | 在线影院中文字幕 | 免费看三级网站 | 色综合久久五月天 | 国产在线欧美在线 | 在线观看国产高清视频 | 美女视频网 | 亚洲精品网页 | 午夜精品一区二区国产 | 四虎8848免费高清在线观看 | 婷婷激情小说网 | 91尤物国产尤物福利在线播放 | 天天曰天天干 | 热热热热热色 | 在线视频99 | 日本精品视频一区 | 国产精品免费观看视频 | 99视频在线精品国自产拍免费观看 | 亚洲国产免费看 | 免费精品视频在线 | 国产精品九九九九九 | 中文字幕在线观看视频一区 | 日韩精品在线视频免费观看 | 日韩欧在线 | 亚洲免费永久精品国产 | 狠狠的干狠狠的操 | 国产精品视频你懂的 | 人人干人人草 | 国产黄色理论片 | 91精品国产欧美一区二区成人 | 99视频精品全国免费 | 久久亚洲电影 | 精品国产一区二区三区不卡 | 最新久久免费视频 | 国产区网址 | 久草在线在线精品观看 | 美女视频a美女大全免费下载蜜臀 | 丁香六月伊人 | 国产高清专区 | 国产91免费在线观看 | 日韩免费三区 | 香蕉久久久久 | 99久久激情| 美女视频免费一区二区 | 午夜精品一区二区三区免费 | 天天草天天干天天 | 国产美女在线精品免费观看 | 91看片成人 | 欧美一区二区精品在线 | 欧美做受高潮 | 最近能播放的中文字幕 | 欧美国产日韩一区二区三区 | 亚洲成人av一区二区 | 国产精品久久久久久欧美 | 久草在线免费资源站 | 久久伊人国产精品 | 久久久久久视频 | 亚洲性视频| 国产尤物在线观看 | 色婷婷电影 | 狠狠成人 | 天天玩天天操天天射 | 国内精品久久久久影院优 | 久久久久久久电影 | 在线免费亚洲 | 国产精品99久久久久久小说 | 国产成人精品综合久久久 | 天天人人| 亚洲一区尤物 | 美女黄频在线观看 | 日韩电影一区二区三区在线观看 | 伊人热 | 激情网色| 日夜夜精品视频 | 色偷偷av男人天堂 | 少妇性aaaaaaaaa视频 | 区一区二区三区中文字幕 | 超碰在线公开免费 | 天天操天天玩 | 国产一区在线免费观看 | 六月丁香在线视频 | 亚洲精品国产成人av在线 | 亚洲丝袜中文 | 99精品美女 | 中文字幕中文字幕在线中文字幕三区 | 少妇高潮流白浆在线观看 | 欧美少妇影院 | 精品视频免费 | 亚洲在线网址 | 久久爱992xxoo | a级国产乱理论片在线观看 伊人宗合网 | 精品天堂av | 午夜美女网站 | 午夜av一区| 午夜视频在线观看一区二区三区 | 色噜噜日韩精品欧美一区二区 | 久久久久久久久久网站 | 午夜视频一区二区三区 | 久久精品激情 | 国产黄在线观看 | 中文字幕在线久一本久 | 天天天天射 | 国产一级小视频 | 免费av网站在线看 | 国语久久 | 久久久久久久免费 | 国产亚洲精品久久久久久大师 | 日韩av一区二区三区在线观看 | 久久久久久毛片精品免费不卡 | 91视频传媒 | 欧洲视频一区 | 中文字幕一区2区3区 | 国产剧情一区在线 | 亚洲经典中文字幕 | 亚洲日本一区二区在线 | 亚洲永久国产精品 | 国产91精品一区二区麻豆亚洲 | 午夜美女影院 | 日韩xxx视频 | 激情六月婷婷久久 | a电影在线观看 | 日韩一级电影在线 | 99视频国产精品 | 在线播放日韩 | 欧美性大战久久久久 | 久久不射电影网 | 久久久www成人免费毛片 | 国产成人综合图片 | 91精品久| 国产精品久久久久久一二三四五 | 久久精品三| 国产手机视频在线播放 | 久久精品理论 | 国产精品va在线播放 | 日本精品久久久久中文字幕5 | 亚洲精品国产自产拍在线观看 | 精品999在线 | 国产视频一区在线播放 | 国产一区在线视频 | 二区三区av | 午夜影院在线观看18 | 91人人澡人人爽 | 国产精品视频app | 色天天综合网 | 日日夜夜精品网站 | 色婷婷五 | 九九九九精品九九九九 | 亚洲欧美视频 | 经典三级一区 | 天天草天天色 | 友田真希x88av | 中文字幕在线免费97 | 91免费视频国产 | 91porny九色91啦中文 | 午夜黄网 | 日韩高清不卡在线 | 国产理伦在线 | 精品久久网站 | 久久男人中文字幕资源站 | 欧美日韩一级久久久久久免费看 | 最新av在线网站 | 亚洲视频 视频在线 | 麻豆精品视频在线 | 国产精品一区二区三区在线 | 91人网站 | 精品久久国产 | 在线观看视频日韩 | 精品成人在线 | 久久国产精品99久久久久 | 国产无遮挡又黄又爽馒头漫画 | 97av色| 久久视频免费看 | 日日爽视频 | 97视频在线播放 | 成人国产精品一区 | 在线国产能看的 | 国产精品网红直播 | 日韩精品一区二区三区免费视频观看 | a极黄色片 | 久久久99国产精品免费 | 91麻豆精品国产91久久久无限制版 | 亚洲精品看片 | 国产 色| 亚洲免费精品一区二区 | 2024国产精品视频 | 日韩精品免费一区二区在线观看 | 亚洲日韩精品欧美一区二区 | 亚洲视频www| 成人激情开心网 | 国产亚洲精品久久久久久久久久久久 | 尤物九九久久国产精品的分类 | 一本一道久久a久久精品 | 狠狠干网 | 国产一二区免费视频 | 99r在线观看 | 日韩国产精品一区 | 九九久久免费视频 | 日韩免费成人 | 欧美性生爱 | 91视频在线免费观看 | 中文网丁香综合网 | 亚洲九九影院 | 成人av中文字幕在线观看 | 日韩视频免费观看高清完整版在线 | av在线免费网 | 久久精品人人做人人综合老师 | 久久视频中文字幕 | 精品国产_亚洲人成在线 | 97av在线视频免费播放 | 五月天九九 | 欧美做受高潮1 | 国产无遮挡又黄又爽在线观看 | 久久高清 | 亚洲精品美女久久久 | 一区二区三区在线观看免费视频 | 国产麻豆果冻传媒在线观看 | 亚洲伊人天堂 | 丁香久久五月 | 成人在线视频一区 | 成年人黄色免费看 | 高清在线一区 | 中文字幕av全部资源www中文字幕在线观看 | 五月丁色| 精品99在线| 一区免费在线 | 色婷婷久久久综合中文字幕 | 日韩在线精品一区 | 久久综合九色综合欧美就去吻 | 丁香视频全集免费观看 | 亚洲精品在线二区 | 久久免费视频在线观看30 | 少妇bbbb揉bbbb日本 | 又黄又爽的免费高潮视频 | 欧美精品在线免费 | 日韩在线中文字幕视频 | 日韩av片在线| 成人欧美一区二区三区黑人麻豆 | 国产精品久久久久久电影 | 92精品国产成人观看免费 | 四虎成人av | 在线久草视频 | 亚洲成人黄色av | 国产亚洲欧美一区 | 久久99精品久久久久久 | 久久精品中文字幕一区二区三区 | 亚洲精品影院在线观看 | 欧美一进一出抽搐大尺度视频 | 久草网在线| 国产999视频 | 日韩精品欧美专区 | 国产一区在线观看免费 | 天天操天天草 | 欧美精品少妇xxxxx喷水 | 欧美日韩免费一区二区 | 久久精品国产免费看久久精品 | 中文字幕成人av | 久久国产精品99精国产 | 玖玖国产精品视频 | 中文字幕一区二区三区在线播放 | 91天天操 | 亚洲精品 在线视频 | 成人免费观看在线视频 | 国产欧美三级 | 日韩精品高清视频 | 欧美 日韩 国产 中文字幕 | www免费 | 最近久乱中文字幕 | 中文字幕第一页在线视频 | 国产一区视频在线 | 97精品国产91久久久久久 | 久久久久亚洲国产精品 | 亚洲国产精品成人女人久久 | 色婷婷导航 | av福利网址导航大全 | 国产中文在线视频 | 久久久高清一区二区三区 | 日日干天夜夜 | 99re6热在线精品视频 | 日韩免费观看视频 | 91色一区二区三区 | 9色在线视频 | 日本黄色大片免费看 | 91av在线免费播放 | 亚洲精品国产视频 | 丝袜美腿av | 国产精品免费观看网站 | 免费av视屏 | 久久99国产精品二区护士 | 国产精品黑丝在线观看 | 成年人免费在线观看网站 | 成人高清av在线 | 成人av一区二区三区 | 国产精品黄色影片导航在线观看 | 9在线观看免费 | 亚洲精品在线视频播放 | 九九久久国产精品 | 国产亚洲欧美精品久久久久久 | 亚洲国产精品一区二区尤物区 | 久久影院一区 | 国产一区免费视频 | 色婷婷成人 | 亚洲精品久久久久999中文字幕 | 免费h精品视频在线播放 | 国产又粗又猛又色又黄视频 | 久久99国产精品久久99 | 午夜少妇av | 久久久国际精品 | 国产美女精彩久久 | 91中文字幕视频 | 久久91久久久久麻豆精品 | 97国产视频| 久久字幕精品一区 | 成人91在线观看 | av免费观看高清 | 四虎影视成人 | 韩国精品福利一区二区三区 | 色99之美女主播在线视频 | 超碰在线9 | 九九热精品在线 | 欧美精品黑人性xxxx | 亚洲欧美经典 | av中文字幕不卡 | 成人av电影在线观看 | 亚洲成av人影院 | 久久人人爽人人人人片 | 国产精品免费一区二区 | 久久久亚洲电影 | 精品国产一区二区三区噜噜噜 | 激情深爱五月 | 91av视频在线播放 | 国产九九热 | 香蕉视频91 | 91成人精品国产刺激国语对白 | 91禁在线观看 | 免费亚洲视频 | 亚洲国产中文字幕在线观看 | 国产精品成人在线 | a天堂最新版中文在线地址 久久99久久精品国产 | 午夜成人免费影院 | 97成人资源站 | 中文av字幕在线观看 | 日日干视频 | 国产精品丝袜久久久久久久不卡 | 免费高清在线观看成人 | 精品1区二区 | 亚洲成人网av | 黄色软件视频网站 | 国产午夜一区二区 | 精品美女久久 | 天天操夜夜操天天射 | 一级淫片a| 国产高清一 | 97日日碰人人模人人澡分享吧 | 久久精品毛片 | 日本午夜在线观看 | 欧美日韩亚洲在线 | 久久爱资源网 | 国产精品麻豆三级一区视频 | 蜜桃av观看 | 一区二区三区国产欧美 | 国产日韩精品一区二区三区在线 | 99久久精品久久久久久清纯 | 最新在线你懂的 | 91在线视频| 九九精品久久久 | 日韩视频一区二区三区在线播放免费观看 | 国模精品一区二区三区 | 国产免费亚洲高清 | 久精品一区 | 九九视频免费观看视频精品 | 午夜精品久久久久久久久久久久 | 精品在线播放视频 | 激情久久久久久久久久久久久久久久 | 99精品视频网站 | 亚洲欧美乱综合图片区小说区 | 亚洲电影影音先锋 | 国产成人免费观看久久久 | 欧美一区二区三区免费观看 | www色com | 久草9视频| 香蕉在线影院 | 91片网 | 精品成人在线 | 热久久最新地址 | 91av成人| 久久国产91 | 色av色av色av | 欧美日韩精品在线 | 深夜福利视频在线观看 | 青青河边草手机免费 | 超碰免费97 | 国产精品美女免费视频 | 深爱激情开心 | 岛国精品一区二区 | 97色免费视频 | 国产精品久久久久久久av电影 | 国产高清视频色在线www | 91丨九色丨蝌蚪丨老版 | 久久免费大片 | 天天爽天天爽天天爽 | 国产精品欧美久久久久三级 | 久久精品2 | 国产精品久久久久一区二区 | 正在播放久久 | 日韩欧美一区二区三区免费观看 | 久久精品一 | 国内久久精品 | 国产精品第2页 | 欧美成人高清 | 久久久久亚洲精品成人网小说 | 婷婷中文字幕综合 | 国产亚洲精品av | 五月婷影院 | 天天爱天天草 | 日本天天操 | 久久国产经典 | 91精品推荐 | 一级黄色片在线播放 | 黄a在线看 | 五月婷婷综合激情 | 在线精品视频免费播放 | 97热久久免费频精品99 | 久久精品久久精品久久 | 亚洲 综合 国产 精品 | 日日操日日插 | 亚洲精品高清在线 | 麻豆视频免费版 | 99视频在线精品 | 亚洲一级影院 | 在线免费试看 | 91精品国产九九九久久久亚洲 | 欧美日韩在线观看一区 | 9在线观看免费高清完整版在线观看明 | 国精产品999国精产品岳 | 中文字幕123区 | 国产中文自拍 | 国产护士在线 | 日日操网| www黄色 | 中文字幕欧美激情 | 日韩欧美xx| 久久精品a| 看国产黄色片 | 日日夜夜免费精品 | 亚洲综合最新在线 | 国产成人精品亚洲 | 国产成人av综合色 | 五月天激情视频 | 99高清视频有精品视频 | 这里有精品在线视频 | 欧美精品一区二区性色 | 91视频亚洲 | 日韩伦理一区二区三区av在线 | 久久精品视频播放 | 欧美亚洲三级 | 五月天综合网站 | 亚洲精品免费观看视频 | 久久久久久久久久久影视 | 五月天久久久久久 | 国产在线a免费观看 | 精品主播网红福利资源观看 | 欧美午夜性生活 | 免费的黄色的网站 | 操处女逼 | 亚洲精品国产精品久久99热 | 日韩中文在线视频 | 亚洲综合欧美精品电影 | 久久久久久久久久久久电影 | 毛片在线网 | 亚洲欧美激情精品一区二区 | 91最新视频 | 久久激情五月激情 | 黄色一级大片在线观看 | 黄色av一级 | 久久黄色美女 | 天天射网站 | 国产精品一区二区久久 | 亚洲无人区小视频 | 精品久久一区二区三区 | 黄色aa久久| 91av在线免费视频 | 黄色片亚洲 | 亚洲 成人 欧美 | 一级全黄毛片 | 美女网站色在线观看 | 日韩精品久久一区二区 | 久久久久国产精品www | 天天色天天操天天爽 | 91精品国产91久久久久福利 | 免费网站在线观看人 | 91中文字幕在线播放 | 911av视频 | 五月天六月丁香 | 99久久精品免费看国产一区二区三区 | 国产高清99| 国产精品成人免费 | 久久久久久久久毛片精品 | 国产一区二区在线免费视频 | 久久夜靖品 | 天堂av影院| 91视频久久 | 中文字幕亚洲欧美日韩 | 欧美日韩精品国产 | 蜜桃传媒一区二区 | 欧美肥妇free | 99久久综合国产精品二区 | 国产 在线 日韩 | 欧美在线一二 | 日本久久成人 | av观看免费在线 | 在线视频你懂 | 国产四虎影院 | 97人人添人澡人人爽超碰动图 | 不卡视频国产 | 91成人精品 | 97在线影院 | 99色亚洲| 国产精品嫩草在线 | 亚洲精品视频一二三 | 免费看国产精品 | 粉嫩高清一区二区三区 | 亚洲国产成人久久综合 | 国产美女视频免费 | 狠狠精品 | 日本成人免费在线观看 | av在线中文| 国产中文字幕视频在线 | 亚洲最大免费成人网 | 色吊丝在线永久观看最新版本 | 丁香影院在线 | 日韩特级黄色片 | 久久99久国产精品黄毛片入口 | 国产精品视频线看 | 四虎成人免费影院 | 嫩小bbbb摸bbb摸bbb | 日韩精品免费在线视频 | 在线观看激情av | 草久在线观看 | 天天艹天天 | 日韩伦理片一区二区三区 | 欧洲亚洲女同hd | 99在线观看免费视频精品观看 | 99精品在线看| 亚洲综合丁香 | a在线视频v视频 | 黄色在线看网站 | 国产成人精品一区二区三区在线 | 成人资源在线 | 九九热1 | 久草视频资源 | 六月色丁香 | 久久成人国产精品入口 | 久久精品电影 | 综合伊人久久 | 成人在线网站观看 | 日韩在线观看你懂得 | 国产精品四虎 | 亚洲成人免费观看 | 久久综合导航 | 久久久久久久久久久综合 | 欧美精品第一 | 天天干夜夜干 | 又色又爽又黄高潮的免费视频 | 亚洲精品美女久久17c | 黄色日本片| 在线看一区二区 | 精品久久久久久亚洲综合网 | 国产成人精品一区二区三区网站观看 | 综合激情av | 91久久人澡人人添人人爽欧美 | 欧美在线视频精品 | av中文在线影视 | 久久精品国产精品亚洲 | 免费视频 三区 | 日日夜夜精品 | 97电影在线观看 | 国产日韩亚洲 | 国产成人三级在线播放 | 久久久免费视频播放 | 麻豆av电影 | 在线免费黄色av | 亚洲人成在线电影 | 久久婷婷丁香 | 国产只有精品 | 日本公妇在线观看高清 | 国产在线色视频 | 91精品蜜桃 | 91在线永久 | 狠狠狠狠狠狠干 | 日韩av看片 | 婷婷综合激情 | 91精品在线免费观看视频 | 国产精品一区二区你懂的 | 玖玖视频网| 日韩黄在线观看 | 欧美日韩二三区 | 久久av在线播放 | 91大神电影| 福利二区视频 | av黄色在线播放 | 99九九视频 | 国产一区二区不卡视频 | 亚洲天堂在线观看完整版 | 日韩精选在线 | 久久精品中文视频 | 久久久久久久久久久久久久电影 | 欧美成人免费在线 | 婷婷在线看 | 国产成人综 | 欧美精品一区二区免费 | 韩国精品视频在线观看 | 欧洲视频一区 | 久久99久久精品 | 国产高清在线免费视频 | 久久精品1区 | 97香蕉久久超级碰碰高清版 | 激情五月在线视频 | 97视频在线观看网址 | 在线免费观看国产 | 国产婷婷色| 欧美一级网站 | 国产午夜视频在线观看 | 国产高清免费在线观看 | 中文字幕在线播放一区 | 免费三级影片 | 日韩高清精品免费观看 | 这里只有精品视频在线观看 | 一级片色播影院 | 九九热精品在线 | 欧美日韩调教 | 粉嫩av一区二区三区四区五区 | 五月天婷婷视频 | 久久免费视频在线观看30 | www五月天 | 正在播放一区二区 | 日本三级吹潮在线 | 国产精品久久久久久久久久三级 | 又黄又爽又刺激的视频 | 久草在线免费在线观看 | 中文字幕一区二区三区精华液 | 精品国产乱码久久久久 | 亚洲乱码久久 | 香蕉视频网址 | 国产99在线 | 国产91亚洲精品 | 亚洲国产中文字幕在线视频综合 | 国产成人精品999 | 国产成人一区二区三区电影 | 国产在线观看你懂得 | 国产亚洲精品久久久久秋 | 黄色av一级| 在线va网站| 丁香六月天婷婷 | 国产精品毛片一区视频 | 丁香六月国产 | 国产特级毛片 | 国产成人一区二区在线观看 | 欧美一区二区三区免费观看 | 国语麻豆 | 国产精品久久久久亚洲影视 | 91av网站在线观看 | 很黄很污的视频网站 | 日韩区欠美精品av视频 | 中文乱幕日产无线码1区 | 天天插日日射 | 国产精品午夜免费福利视频 | 香蕉影视在线观看 | 99久高清在线观看视频99精品热在线观看视频 | 国产精品白虎 | 亚洲激情小视频 | 亚洲一区网站 | 国产精品久久久久久久久久久久午夜片 | 国产91全国探花系列在线播放 | 国产精品va最新国产精品视频 | 五月天色丁香 | 久久久久久久久精 | av免费在线观看网站 | 亚洲va综合va国产va中文 | 成人免费观看网址 | 成人啊 v | 午夜精品一区二区三区在线视频 | 91精品导航 | 精品免费视频123区 午夜久久成人 | 成人动漫视频在线 | 人人爽人人澡 | 国产精品日韩久久久久 | 在线观看国产v片 | 日韩城人在线 | 欧美日韩在线第一页 | 欧美日韩免费在线观看视频 | 91干干干 | 日韩狠狠操 | 在线韩国电影免费观影完整版 | 久久黄色小说 | 毛片基地黄久久久久久天堂 | 射久久久| 一区二区三区日韩视频在线观看 | 国产精品中文久久久久久久 | 国产精品中文字幕在线观看 | 九九热免费在线视频 | 欧美一区成人 | av免费在线观看1 | 国产不卡一 | 激情网站五月天 | 国产成人精品999在线观看 | 天天操天天操天天操天天操天天操天天操 | 国产二区免费视频 | 天堂入口网站 | 欧美另类交人妖 | 天天躁天天狠天天透 | 亚洲一区二区精品在线 | 国产精品av免费 | 00av视频 | 亚洲视频久久久 | 亚洲色图美腿丝袜 | 欧美高清视频不卡网 | av国产在线观看 | 又黄又色又爽 | 高清在线观看av | 国产成人精品一区在线 | 97在线观看| 91女神的呻吟细腰翘臀美女 | 99 色| 91精品啪在线观看国产81旧版 | 色av男人的天堂免费在线 | 天天干com | 国产精品亚洲a | 国产高清在线一区 | 麻豆视频免费网站 | 欧美一级电影在线观看 | 六月丁香激情综合 | 国产高清免费视频 | 欧美a性| 久久精品999 | 久久精品成人热国产成 | 亚洲精品字幕在线观看 | 国产亚洲婷婷 | 国产区在线看 | 中文字幕中文字幕中文字幕 | av网站手机在线观看 | 91人人澡人人爽人人精品 | 亚洲 欧美 成人 | 婷婷免费在线视频 | 久久精品看 | 中文字幕 欧美性 | 国产日本在线播放 | 久色小说 | 欧美动漫一区二区三区 | 中文字幕一区二区三区在线视频 | 日韩av福利在线 | 99久久日韩精品免费热麻豆美女 | 99久久久| 亚洲 欧洲av| 91在线中文字幕 | 成人91在线观看 | 91人人爽人人爽人人精88v | 午夜美女福利直播 | 超碰在线网 | 九九久久久久久久久激情 | 久久久久久中文字幕 | 久久韩国免费视频 | 久久成人精品电影 | 成人精品福利 | 91麻豆免费版 | 99久久99久国产黄毛片 | 成人午夜影院在线观看 | 久久撸在线视频 | 在线欧美最极品的av | 欧洲一区二区三区精品 | 国产麻豆视频在线观看 | 精品在线观 | 久影院 | 亚洲综合小说电影qvod | 久久视屏网| 性色av一区二区三区在线观看 | 蜜臀久久99精品久久久无需会员 | 激情欧美日韩一区二区 | 亚洲人成在线电影 | 午夜av在线播放 | 911久久香蕉国产线看观看 | 久久久久女教师免费一区 | 色欧美综合| 欧美精品久久久久久久久久白贞 | 久久久久综合网 | 美女视频黄,久久 |