我的图像A的尺寸为s×s。所有像素强度A(i,j)在[1,s]之间。现在,我需要重新排列A的像素强度,并更改A中的强度值。
为此,我实现矩阵MAT并与向量[i, j, A(i,j)]
相乘,其中(i,j)
是像素索引,A(i,j)
是像素强度。
结果保存在向量a
,b
和c
中,其中(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。
答案 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);