2011-03-18 57 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