我已經將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