如何混淆图像?

时间:2014-11-23 05:22:44

标签: image matlab image-processing

如果输入是图像,我的输出应该是原始图像的乱码或混乱图像。不需要将图像分成子块并单独地对这些区域进行加扰。您可以在一次操作中对整个图像进行加扰。我怎样才能在MATLAB中实现这个目标?

1 个答案:

答案 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;

这是原始图片:

enter image description here

这就是加扰图像的样子:

enter image description here

当然看起来很吵!......并且乱糟糟的......至少我是这么认为的。通过重建,这就是图像的样子:

enter image description here


对图像进行加扰和解扰的关键是使randperm生成该向量。如果您没有这个,那么您无法重建原始图像。

祝你好运!