Matlab 置乱图像

Matlab 置乱图像,matlab,encryption,Matlab,Encryption,我想使用matlab使用以下算法对图像进行置乱: 将图像转换为W X H像素的灰度 计算每行和每列的总和 分别生成h&w元素范围(2^bit depenth-1)的随机变量Kc和Kr 求和的模2 如果行和的模2为零,则将第i行向右旋转Kr(i)数量,否则将其向左旋转Kr(i)数量。列的情况也类似 显示图像 问题在于使用matlab中的circshift命令将第i行旋转Kr(i)量。此函数不使用特定行或列的索引 %%Encryption till scrambled image rgb = imr

我想使用matlab使用以下算法对图像进行置乱:

  • 将图像转换为W X H像素的灰度
  • 计算每行和每列的总和
  • 分别生成h&w元素范围(2^bit depenth-1)的随机变量Kc和Kr
  • 求和的模2
  • 如果行和的模2为零,则将第i行向右旋转Kr(i)数量,否则将其向左旋转Kr(i)数量。列的情况也类似
  • 显示图像
  • 问题在于使用matlab中的circshift命令将第i行旋转Kr(i)量。此函数不使用特定行或列的索引

    %%Encryption till scrambled image
    rgb = imread('image.jpg');
    I=rgb2gray(rgb);
    [w,h]=size(I);
    imshow(I);
    title('Original grayscale');
    info = imfinfo('image.jpg');
    bit=info.BitDepth;      
    range=(2^bit)-1;
        Kc=randi(range,[1,h]);       %generating a random array Kc of h
        Kr=randi(range,[1,w]);       %generating random array Kr
    
        alpha=sum(I);     %sum of all column element creating an linear array of h columns
        alpha1=sum(I,2); %sum of all row element creating an linear array of w rows
    
         M=mod(alpha,2); %linear array of h column
         M1=mod(alpha1,2); %linear array of w rows
         for i=1:h
         if M(1:i)==0
           I1=circshift(I(:,i),-Kc(i));      %shifts up
         else
          I1=circshift(I(:,i),Kc(i));        %shifts down
         end
         end
    
      for j=1:w
         if M1(j:1)==0
           I2=circshift(I1(j,:),Kr(j));      %shifts right
         else
          I2=circshift(I1(j,:),-Kr(j));     %shifts left
         end
     end
     figure
     imshow(I2);
     title('Scrambled Image');`
    

    circshift
    作用于大于1行的数组。试试循环移位(I1(j,:))。并阅读帮助文件!:-)谢谢你,卡尔!。它起作用了