我想打乱一张人脸图像。我不知道matlab编程中的哪个命令会让我的脸乱七八糟。你能指出我吗?
现在我想通过洗牌它的像素来打乱它。
你可以将 randperm 和 reshape 结合起来,就像这样:
img = reshape(img(randperm(numel(img))), size(img));
替代解决方案:"按像素块加扰"
你可以这样做:
img = imread('http://www.ricbit.com/uploaded_images/lena-713374.jpg');
blockSize = 64;
nRows = size(img, 1) / blockSize;
nCols = size(img, 2) / blockSize;
scramble = mat2cell(img, ones(1, nRows) * blockSize, ones(1, nCols) * blockSize, size(img, 3));
scramble = cell2mat(reshape(scramble(randperm(nRows * nCols)), nRows, nCols));
subplot(1,2,1), imshow(img); title('Source image');
subplot(1,2,2), imshow(scramble); title('Scrambled image');
其中blockSize
是块的宽度和高度,以像素为单位(例如:64 x 64)
注意:块大小必须是原始图像宽度和高度值的通用因素。