涉及模数和分度的计算

时间:2018-08-20 14:52:46

标签: matlab image-processing encryption

我的图像A的尺寸为s×s。所有像素强度A(i,j)在[1,s]之间。现在,我需要重新排列A的像素强度,并更改A中的强度值。

为此,我实现矩阵MAT并与向量[i, j, A(i,j)]相乘,其中(i,j)是像素索引,A(i,j)是像素强度。

结果保存在向量abc中,其中(a,b)应该是新索引,c应该是新索引强度值。

例如

  • 对于s=5和三元组(1,1,5),结果是三元组(3,5,3)
  • 现在,我将这个三元组做成一个像ENC这样的新矩阵ENC(3,5)=3
  • 眼前的问题是,如何获取(1,1)..(25,25)之类的所有索引,例如ENC,因为并不是所有索引都来了。以及如何将所有这些求反以取回A

这是我当前的代码:

format compact
s=3;  
A=randi(s,s);
[s,~]=size(A);
a=zeros(1,s*s);
b=zeros(1,s*s);
c=zeros(1,s*s);
t=1;
for i=1:s
    for j=1:s
        MAT=[2 1 3;3 2 5;2 1 4];
        newcord =MAT*[i j A(i,j)]'
        a(t)= mod(newcord(1)-1,s)+1;
        b(t)= mod(newcord(2)-1,s)+1;
        c(t)= mod(newcord(3)-1,s)+1;
        t=t+1;
    end
end

ENC=zeros(s,s);
for t=1:s^2
    ENC(a(t),b(t))=c(t)
end

我当前得到的输出是

A = [ 3     1     3
      2     3     2
      1     2     1 ]
a = [ 3     1     2     2     3     1     1     2     3 ]
b = [ 2     3     3     3     1     1     1     2     2 ]
c = [ 3     2     2     1     3     3     2     1     1 ]

我想要的输出是包含新值的矩阵ENC,并且也应该通过执行上述过程的逆操作从ENC中取回A。

1 个答案:

答案 0 :(得分:1)

使用randperm在这里:

% example data
A=11:19;A=reshape(A,3,3)';
% generate random permutation of the indices
rpind=randperm(prod(size(A)));
% just index the matrix
c=A(rpind);
% get the i,j indices of the said permutation (probably not needed as linear indices are enough)
[a,b]=ind2sub(size(A),rpind);