MATLABでの秘密の視覚情報共有スキームの実装

はじめに


すべての人に良い一日を!



皆さんの多くはすでに秘密の視覚情報の共有に興味を持っていると思います。 もしそうなら、あなたはおそらく2013年4月19日の投稿だけでなく、視覚暗号化に専念しているMoni NaorとAdi Shamirの仕事に精通しているでしょう。 この記事で提案されたMATLABで書かれたアルゴリズムと関数コードを研究しましたが、合理的に書かれていないと結論に達しました。効率を上げるだけでなく、もっと短く書けます。 これを行う方法については、以下で説明します。 整理方法も検討してください。



コードの最適化


この関数の欠点は、プログラムが同じタイプのコードを何度も繰り返すことです。これにより、関数のサイズが大きくなり、実行が複雑になりますが、MATLABで利用可能なツールにより、より短く記述できます。



getShdwImg関数コードを次のように最適化することをお勧めします。



function [S1,S2] =getShdwImgrac2x2(Img) %    S1  S2     (Img) % %     [m,n] = size(Img); %       :) S1= zeros(2*m,2*n); S2= zeros(2*m,2*n); r1=[1 0; 1 0]; r2=[0 1; 0 1]; r3=[0 0; 1 1]; r4=[1 1; 0 0]; r5=[1 0; 0 1]; r6=[0 1; 1 0]; r=cat(3, r1, r2, r3, r4, r5, r6); %      -   . 1 % : for i=1:m-1 for j=1:n-1 k = randi(6); if(Img(i,j)==1) S1(2*i-1:2*i, 2*j-1:2*j)=r(:,:,k); S2(2*i-1:2*i, 2*j-1:2*j)=r(:,:,k); else if (mod(k,2) == 0) S1(2*i-1:2*i, 2*j-1:2*j)=r(:,:,k); S2(2*i-1:2*i, 2*j-1:2*j)=r(:,:,k-1); else S1(2*i-1:2*i, 2*j-1:2*j)=r(:,:,k); S2(2*i-1:2*i, 2*j-1:2*j)=r(:,:,k+1); end end end end
      
      







ソースコードと比較して、このコードの違いを詳細に検討しましょう。







画像

ソース画像



画像

バイナリに変換された元の画像



画像

最初の影の画像



画像

セカンドシャドウ画像



画像

論理演算子〜xorを使用して2つのシャドウ画像を結合して得られた画像



次に、バイナリイメージのShamir秘密共有スキーム(3.3)の関数コードに注目します。



バイナリイメージのShamirの秘密共有スキーム(3.3)の機能コード開発


この関数は、画像を3つの影に分割することを目的としています。 元の画像は、3つすべてのシャドウ画像を組み合わせることによってのみ復元できます。 一般に、そのコードは上記のコードに似ていますが、多くの重要な追加があります。



 function [S1,S2,S3] =getShdwImgrac3x3opt(Img) %        % S1, S2, S3     (Img) % %     [m,n] = size(Img); %  3        ) S1= zeros(2*m,2*n); S2= zeros(2*m,2*n); S3= zeros(2*m,2*n); %        c01=[0 0 1 1; 0 1 0 1; 0 1 1 0]; c02=[1 0 0 1; 1 0 1 0; 0 0 1 1]; c03=[1 1 0 0; 0 1 0 1; 1 0 0 1]; c04=[0 1 1 0; 1 0 1 0; 1 1 0 0]; c0=cat(3, c01, c02, c03, c04); c05=[1 1 0 0; 1 0 1 0; 1 0 0 1]; c06=[0 1 1 0; 0 1 0 1; 1 1 0 0]; c07=[0 0 1 1; 1 0 1 0; 0 1 1 0]; c08=[1 0 0 1; 0 1 0 1; 0 0 1 1]; c1=cat(3, c05, c06, c07, c08); %       3   %  for i=1:m-1 for j=1:n-1 d=randi(4); %     c k = randperm(3); %   if(Img(i,j)==1) S1(2*i-1:2*i, 2*j-1:2*j)=reshape(c0(k(1),1:4,d), 2, 2); S2(2*i-1:2*i, 2*j-1:2*j)=reshape(c0(k(2),1:4,d), 2, 2); S3(2*i-1:2*i, 2*j-1:2*j)=reshape(c0(k(3),1:4,d), 2, 2); else S1(2*i-1:2*i, 2*j-1:2*j)=reshape(c1(1,1:4, d), 2, 2); S2(2*i-1:2*i, 2*j-1:2*j)=reshape(c1(2,1:4, d), 2, 2); S3(2*i-1:2*i, 2*j-1:2*j)=reshape(c1(3,1:4, d), 2, 2); end end end
      
      







getShdwImgrac3x3opt関数とgetShdwImgrac2x2関数の違いを詳しく見てみましょう。







それを読んでくれたみんなに感謝します。 頑張って



All Articles