i want a randomly scramble of a divided image into 4 blocks

조회 수: 4 (최근 30일)
Samaa Yasser
Samaa Yasser 2021년 4월 23일
편집: Matt J 2021년 4월 23일
please if i have image 256X256 and i divided it into 4 blocks, how can i scramble the blocks randomly or change the orders of the 4 blocks ,then i stitch them together again after this permutation or this changing inorder to change the parameters of the image and got a cihper one??
should i convert it to vector and then permuted or i can permuted it in blocks case?? please i want the code

답변 (2개)

Matt J
Matt J 2021년 4월 23일
편집: Matt J 2021년 4월 23일
Using mat2tiles (which you must Download),
Image=imresize(imread('saturn.png'), [256,256]);
im=mat2tiles(Image,[128,128,inf]);
newImage=cell2mat( im(randperm(256/128), randperm(256/128)) );
subplot(1,2,1),imshow(Image);
subplot(1,2,2), imshow(newImage)

Jan
Jan 2021년 4월 23일
편집: Jan 2021년 4월 23일
img = uint8(((0:255) + (0:255).') / 2); % Test image
s = size(img);
% Split image to blocks:
img4 = reshape(img, s(1) / 2, 2, s(2) / 2, 2);
img4 = permute(img4, [1, 3, 2, 4]);
img4 = reshape(img4, s(1)/2, s(2)/2, 4);
% Mix:
img4 = img4(:, :, randperm(4));
% Get matrix again:
img4 = reshape(img4, s(1)/2, s(2)/2, 2, 2);
img4 = permute(img4, [1, 3, 2, 4]);
result = reshape(img4, s);
imagesc(result)
Or:
img = uint8(((0:255) + (0:255).') / 2); % Test image
s = size(img);
C = mat2cell(img, [s(1)/2, s(1)/2], [s(2)/2, s(2)/2]);
C(:) = C(randperm(4));
result = cell2mat(C);
imagesc(result)

카테고리

Help CenterFile Exchange에서 Computer Vision with Simulink에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by