2010-07-10 21 views
0

這是對我的一個主題中的Image Shuffling問題的延續。圖像在MATLAB中與另一個圖像混排

%# scramble autumn.tif with itself 

img1 = imread('autumn.tif'); 

%# scramble 
[dummy,scrambleIdx] = sort(img1(:)); 
img2 = img1; 
img2(:) = img1(scrambleIdx); %# note the (:). If you don't use it, img2 becomes a vector 

%# unscramble 
[dummy2,unscrambleIdx] = sort(scrambleIdx); 
img3 = img2; 
img3(:) = img2(unscrambleIdx); 

問題1:sort(X,dim)函數按升序排列X的列。這是否意味着X的所有維度?

問題2:img2的列和行是否在此代碼中混洗,或者只有列?

回答

1
  1. sort(X,dim)各種各樣沿着尺寸dim,即sort(X,1)各種各列中的行,並sort(X,2)排序每行內的列。 sortrows(X,4)根據第四行對行進行排序,如果要對列進行排序,則必須先轉置Xsort(X(:)排序數組X的所有元素。
  2. 在此代碼中,img2的所有元素都是混洗的。

而不是使用autumn.tif,你可能想嘗試在例如洗衣機上洗牌。 magic(5),一個5x5的魔方,讓你可以更好地看到發生了什麼。

編輯

下面是與magic(5)

>> m = magic(5) 
m = 
    17 24  1  8 15 
    23  5  7 14 16 
    4  6 13 20 22 
    10 12 19 21  3 
    11 18 25  2  9 

>> sort(m,1) %# sort rows in each column of m 
ans = 
    4  5  1  2  3 
    10  6  7  8  9 
    11 12 13 14 15 
    17 18 19 20 16 
    23 24 25 21 22 

>> sort(m,2) %# sort columns in each row of m 
ans = 
    1  8 15 17 24 
    5  7 14 16 23 
    4  6 13 20 22 
    3 10 12 19 21 
    2  9 11 18 25 

>> sortrows(m,3) %# sort the rows of m according to column 3 
ans = 
    17 24  1  8 15 
    23  5  7 14 16 
    4  6 13 20 22 
    10 12 19 21  3 
    11 18 25  2  9 

>> mt = m' %'# transpose m 
mt = 
    17 23  4 10 11 
    24  5  6 12 18 
    1  7 13 19 25 
    8 14 20 21  2 
    15 16 22  3  9 

>> sortrows(mt,2) %# sort the rows of the transpose of m according to col 2 
ans = 
    24  5  6 12 18 
    1  7 13 19 25 
    8 14 20 21  2 
    15 16 22  3  9 
    17 23  4 10 11 

>> mm = m; %# assign an output array for the next operation 
>> mm(:) = sort(m(:)) %# sort all elements of m 
mm = 
    1  6 11 16 21 
    2  7 12 17 22 
    3  8 13 18 23 
    4  9 14 19 24 
    5 10 15 20 25 
+0

的例子@ Jonas.In你的答案你所說的那種(X,2)排序每一行中的列,那麼爲什麼我們需要做轉置爲了排序所有的列(參考引用您的答覆)。此外,排序(X(:))排序所有元素,所以我想我們不必編寫單獨的語句排序行和列?這是命令一個矢量化的例子?再次感謝你。 – gavishna 2010-07-10 17:38:58

+0

我已經添加了幾個例子。請看看原始數組如何變化。也許這給你一個想法,你想如何洗牌你的形象。 – Jonas 2010-07-11 01:28:35

+0

@ Jonas。我真的很感謝你的努力,Jonas讓我明白我打算如何處理你的例子。我在Matlab中嘗試了這些。有兩個邏輯我不能理解.1。如何在每一列中對行進行排序(m,2)。 – gavishna 2010-07-11 06:58:38