我有一系列黑白图像(不是灰度,黑白;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