2011-03-18 56 views
1

存在N * M大小的行M,列N的图像X.还有其他2个与X大小相同的图像A,B。目标是将行的X随行从A中提取并且用从B中提取的列对X的列进行混洗,导致完全修改的img。矩形图像的语法错误

我被困在同时发生这种情况的地步。我知道代码运行的冒号操作符,但对于方形图像。请帮助如何去解决它。

X=imread('picture.jpg'); 
[r c]=size(X); 
[dummy,rowscrambleIdx]=sort(A,1); 
X_shuffled=X; 
[dummy,colscrambleIdx]=sort(B,2); 

编辑:下面的代码适用于正方形图像和我想为矩形大小的图像做类似的操作。但是,此代码不适用于矩形大小的图像。我试图让第一代码遵循类似的逻辑,但它不具有非方形RGB图像工作,说256 * 240 * 3大小

X=imread('picture.jpg'); 

    [dummy,scrambleIdx]=sort(A(:)); 
    X_shuffled=X; 
    X_shuffled(:)=A(scrambleIdx); 

%now unscrambling 
[dummy,unscrambleIdx] = sort(scrambleIdx); 
X_recovered=X; 
X_recovered(:)=X_shuffled(unscrambleIdx); 
+0

(其中的问题已基本上修改接收到应答之后一段时间的另一种情况 - 回滚)。 – halfer 2016-06-20 10:08:22

回答

1

为什么不使用randi随机创建indicies的一些数从A拉,有些从B拉?

实施例:

m=10; 
n=5; 
A=rand(m,n) 
B=ones(m,n) 

%3x1 vector of random ints b/w 1 and 10 
index=randi([1 10],3,1); 

rand_row = A(index,:); 
B(index,:)=rand_row 

然后输出是:

index = 

    10 
    9 
    4 

A = 

0.9797 0.1174 0.7303 0.6241 0.2619 
0.4389 0.2967 0.4886 0.6791 0.3354 
0.1111 0.3188 0.5785 0.3955 0.6797 
0.2581 0.4242 0.2373 0.3674 0.1366 
0.4087 0.5079 0.4588 0.9880 0.7212 
0.5949 0.0855 0.9631 0.0377 0.1068 
0.2622 0.2625 0.5468 0.8852 0.6538 
0.6028 0.8010 0.5211 0.9133 0.4942 
0.7112 0.0292 0.2316 0.7962 0.7791 
0.2217 0.9289 0.4889 0.0987 0.7150 


B = 

    1  1  1  1  1 
    1  1  1  1  1 
    1  1  1  1  1 
    1  1  1  1  1 
    1  1  1  1  1 
    1  1  1  1  1 
    1  1  1  1  1 
    1  1  1  1  1 
    1  1  1  1  1 
    1  1  1  1  1 


B = 

    1.0000 1.0000 1.0000 1.0000 1.0000 
    1.0000 1.0000 1.0000 1.0000 1.0000 
    1.0000 1.0000 1.0000 1.0000 1.0000 
    0.2581 0.4242 0.2373 0.3674 0.1366 
    1.0000 1.0000 1.0000 1.0000 1.0000 
    1.0000 1.0000 1.0000 1.0000 1.0000 
    1.0000 1.0000 1.0000 1.0000 1.0000 
    1.0000 1.0000 1.0000 1.0000 1.0000 
    0.7112 0.0292 0.2316 0.7962 0.7791 
    0.2217 0.9289 0.4889 0.0987 0.7150 
+0

@Chris:矩阵B中的所有行需要被A的所有行替换,并且类似于列。而且,希望得到矩阵B的原始形式,使得操作可逆。那么这将如何反转,因为B中的像素信息将会丢失,除非它被存储?从你的答案索引= randi([1 10],3,1);应该修改为index = randi([1 256],(256 * 256),1);请澄清。 – SKM 2011-03-19 06:38:05

+0

如果你的OP有一个原始矩阵X,并且用X的所有列替换了A的所有列,那么X现在将与A相同。如果你将所有X的列(它看起来像A现在)与B的所有列,X现在将与B相同。除非您正在做一些加/减/重叠值等。也许我误解了这个问题? – Chris 2011-03-19 18:17:03

+0

@Chris:我已经编辑了问题,并将正在为sqaure图像工作的代码添加到代码中,但没有添加代码。也许,看到手术会更清楚。 – SKM 2011-03-19 18:22:29