Image MATLAB中图像与另一图像的混洗
这是我的一个帖子中的问题图片的延续Image MATLAB中图像与另一图像的混洗,image,matlab,image-processing,Image,Matlab,Image Processing,这是我的一个帖子中的问题图片的延续 %# 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 %# unscr
%# 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的列和行都被洗牌了,还是只洗牌了列
sort(X,dim)
沿维度排序dim
,即sort(X,1)
对每列中的行进行排序,sort(X,2)
对每行中的列进行排序sortrows(X,4)
根据第四行对行进行排序,如果要对列进行排序,则必须先转置X
。
sort(X(:)
对数组的所有元素进行排序X
img2
的所有元素都被洗牌秋.tif
,而想尝试在一个5x5的魔方上进行洗牌,例如magic(5)
,这样您可以更好地看到发生了什么
编辑
以下是magic(5)
@Jonas.在你的回答中,你说过sort(X,2)对每行中的列进行排序,那么为什么我们需要进行转置来对所有列进行排序(参考你的回答)。另外,sort(X(:)对所有元素进行排序,这样我们就不必分别编写语句来对行和列进行排序了。这个命令是矢量化的一个示例吗?再次感谢。我添加了几个示例。请看一下原始数组是如何变化的。也许这会让您了解如何洗牌图像。@Jonas。我非常感谢您的帮助Jonas努力让我理解我打算用你的例子做什么。我在Matlab中尝试了这些。有两个逻辑我不理解。1.行在每列中如何排序(m,2)。2.我想重新确认逻辑,以检查我是否清楚地理解img1的作用。在作为问题发布的代码中(这实际上是由您回复的),img1的元素通过命令sort(img1(:)按行和列进行排序。冒号的双重用途是同时获取行和列索引,而不是通过类似以下命令的方式分别获取行和列索引,img2=(:,colScramble,:);img2=img2(rowsamble,:,:);因此,冒号避免了这些步骤。是这样吗?那么,排序后的像素位置构成了对img2元素进行无序排列的索引。@乔纳斯,可以在不对另一个图像img1进行排序的情况下对图像进行无序排列吗?如何在[dummy,scrambleIdx]=sort(img1(:);而不对img1进行排序/排列的情况下获得scrambleIdx?
>> 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