我已经将512X512图像分成2X2像素块。因此我总共有65536个街区。每个块有四个像素。如何随机遍历块的图像?
现在我要遍历以随机顺序图像。例如:从第6块开始,然后到第3块,然后到第8块,然后到第1块......像这样,直到整个图像被遍历。
重要提示:我需要存储遍历顺序以备后用。
请帮我写一个MATLAB代码。许多许多人提前感谢。
我已经将512X512图像分成2X2像素块。因此我总共有65536个街区。每个块有四个像素。如何随机遍历块的图像?
现在我要遍历以随机顺序图像。例如:从第6块开始,然后到第3块,然后到第8块,然后到第1块......像这样,直到整个图像被遍历。
重要提示:我需要存储遍历顺序以备后用。
请帮我写一个MATLAB代码。许多许多人提前感谢。
容易,让我们的小矩阵(6×6)为例
Im = rand(6,6);
nblocks = 9;
blocksize = 2;
您将有大小2×2块(共3×3 = 9块)。 将矩阵重塑为2 x 18矩阵。
Im = reshape(Im, numel(Im)/blocksize, blocksize);
现在产生由块的大小分离索引的随机置换:
idx = randperm(nblocks) * blocksize;
的Et瞧。现在,您可以访问第5块只是在做:
currentblock = Im(idx(5):idx(5)+blocksize, :);
使用循环横向每个块。
谢谢,遍历意味着从一个块到另一个块,直到所有块都到达,访问完每个块之后,我将对该块进行一些操作,然后转到另一个块。 – matlabcoder
我们可以使用循环吗? – matlabcoder
我们是否可以使用循环扫描或随机顺序遍历,因为我需要存储遍历顺序以供以后使用 – matlabcoder
您可以将图像分成块并使用this great answer沿第三维平铺。然后循环遍历第三维索引的随机排列:
A = randn(12,12);
m = 3;
n = 6;
T = permute(reshape(permute(reshape(A, size(A, 1), n, []), [2 1 3]), n, m, []), [2 1 3]);
% each third-dim slice is an mxn block
scan_order = randperm(size(T,3)); % random permutation of block indices
for b = scan_order
block = T(:,:,b);
% Do stuff with current block
end
定义_traverse_:您想对每个块做什么? –
其中格式是图片,你已经有一个matlab中的单个块? – Finn
谢谢。遍历意味着从一个块到另一个块,直到到达所有块。在访问每个块之后,我会对该块进行一些操作,然后转到另一个块。我可以以光栅扫描顺序遍历或扫描块。但不是随机的顺序:-( – matlabcoder