0

我有一系列黑白图像(不是灰度,黑白;Matlab 中的二维矩阵),我需要随机打乱像素。我在 Mathworks File Exchange ( https://it.mathworks.com/matlabcentral/fileexchange/66472-image-shuffle ) 中找到了这个包;其中一个函数imScrambleRand完全符合我的需要,但它适用于 RGB 图像(3D 矩阵)。有没有办法将黑白图像转换为 3D 矩阵,以便我可以使用该功能?或者任何人都可以建议任何其他符合我需要的脚本吗?请记住,我不熟悉 Matlab,但我会尽力而为。

谢谢你。

编辑 1:当我导入 BW 图像时,我得到一个逻辑值的二维矩阵(0 = 黑色,1 = 白色)。我认为不同的数据格式(逻辑与整数)是在将函数用于 RGB 图像时产生错误的原因。

编辑 2:我改编了上述软件包中的演示代码,并使用@Jonathan 的建议将 2D 矩阵转换为 3D 矩阵,并添加了一个循环将逻辑值转换为 RGB 整数值,然后使用imScrambleRand函数。它有效,但我得到的是以下图像:SCRAMBLED IMAGE。这是我开始的 BW 图片:BW IMAGE。所以我检查了加扰的图像,FEX 文件中的函数实际上在 RGB 值加扰,这意味着我发现了一个像素,例如,RGB 为 0,255,0. 所以我解决了一个问题,但实际上函数内部存在一个问题:它不会扰乱像素,它会扰乱生成原始图片中不存在的颜色的值。

编辑 3:我使用了@nhowe 提供的代码,我得到了我需要的东西,谢谢!

编辑 4:好的,事实证明,打乱像素是不行的,因为它会使图像过于分散并且与起始图像不同(你不是说?),但我需要打乱像素块,这样你就不能真正识别图像,但黑色像素不是太分散。有没有办法使用@nhowe 提供的代码来做到这一点?

编辑5:这个功能应该没问题:https ://it.mathworks.com/matlabcentral/fileexchange/56160-hio-been-hb-imagescramble

4

2 回答 2

1

打乱矩阵 M 的简单方法:

r = rand(size(M));
[~,ri] = sort(r(:));
M(ri) = M;
于 2018-05-08T18:50:50.763 回答
0

从灰度到 RGB 的最简单解决方案可能是:

rgbImage = cat(3, grayImage, grayImage, grayImage);

然后从 FEX 应用您的函数并提取一个颜色通道,假设 FEX 函数将产生三个相同的颜色通道。

于 2018-05-08T14:00:59.013 回答