在Matlab中加扰黑白图像的像素

时间:2018-05-08 13:57:11

标签: matlab image-processing pixels scramble

我有一系列黑白图像(不是灰度,黑白; Matlab中的2D矩阵),我需要随机加扰像素。我在Mathworks文件交换中找到了这个包(https://it.mathworks.com/matlabcentral/fileexchange/66472-image-shuffle);其中一个函数 imScrambleRand 完全符合我的需要,但它适用于RGB图像(3D矩阵)。有没有办法将b& w图像转换成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

2 个答案:

答案 0 :(得分:1)

加扰矩阵M的简单方法:

r = rand(size(M));
[~,ri] = sort(r(:));
M(ri) = M;

答案 1 :(得分:0)

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

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

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