如果输入是图像,我的输出应该是原始图像的乱码或混乱图像。不需要将图像分成子块并单独地对这些区域进行加扰。您可以在一次操作中对整个图像进行加扰。我怎样才能在MATLAB中实现这个目标?
答案 0 :(得分:1)
如果你的意思是"扰乱"通过随机重新排列图像中的像素,您可以创建一个随机排列矢量,该矢量与图像中的像素总数一样长,重新整形,使其与图像的大小相同,然后使用这是索引它。具体来说,使用randperm
来帮助您完成此操作。例如,让我们使用cameraman.tif
作为MATLAB系统路径的一部分。做这样的事情:
im = imread('cameraman.tif');
vec = randperm(numel(im));
vec = reshape(vec, size(im));
out = im(vec);
如果您想撤消加扰,vec
包含像素需要在原始图像中重新映射到的位置的列主要索引。因此,只需分配一个空白图像,然后使用vec
索引到此空白图像并复制out
。这将做的是它将占用加扰图像中的位置,并将它们复制回由vec
索引的位置。这基本上解除了我们之前所做的争吵。因此:
reconstruct = zeros(size(im), class(im));
reconstruct(vec) = out;
这是原始图片:
这就是加扰图像的样子:
当然看起来很吵!......并且乱糟糟的......至少我是这么认为的。通过重建,这就是图像的样子:
对图像进行加扰和解扰的关键是使randperm
生成该向量。如果您没有这个,那么您无法重建原始图像。