这是我的一个帖子中的Image Shuffling问题的继续。
%# 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的列和行是否都在此代码中进行了洗牌,或者只是列?
答案 0 :(得分:1)
sort(X,dim)
按维度dim
排序,即sort(X,1)
对每列中的行进行排序,sort(X,2)
对每行中的列进行排序。 sortrows(X,4)
根据第四行对行进行排序,如果要对列进行排序,则必须先转置X
。
sort(X(:)
对数组X
的所有元素进行排序。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