【问题标题】:Scramble the pixels of black and white images in Matlab在Matlab中打乱黑白图像的像素
【发布时间】:2018-10-18 12:18:16
【问题描述】:

我有一系列黑白图像(不是灰度,黑白;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 值within 进行了打乱,这意味着我发现了一个像素,例如RGB 0,255,0。所以我解决了一个问题,但实际上函数内部存在一个问题:它不会扰乱像素,它会扰乱生成原始图片中没有的颜色的值。

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

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

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

【问题讨论】:

  • 灰度是二维矩阵。 BW是指只有2个值的灰度图像。
  • @AnderBiguri 当我导入 BW 图像时,我获得了一个具有逻辑值(0 = 黑色,1 = 白色)的二维矩阵。
  • 是的,没关系,只是添加信息,以防你不知道。
  • 哦,好的,我知道了,但是谢谢! :)

标签: matlab image-processing pixels scramble


【解决方案1】:

打乱矩阵M的简单方法:

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

【讨论】:

  • 谢谢!我使用此代码甚至无需将其转换为 3D RGB 矩阵并将其保存为图像,它完全符合我的需要。非常感谢! (我会赞成你的回复,但我是新用户,它不允许我。)
  • 好的,结果我必须打乱像素块,而不是像素(请参阅上面的编辑 4)。有没有办法用你提供的代码做到这一点?非常感谢。
  • 我应该用这个函数解决它:it.mathworks.com/matlabcentral/fileexchange/…
【解决方案2】:

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

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

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

【讨论】:

  • repmat 会更简单。但这并没有按照 FEX 函数的预期将逻辑数组转换为 uint8
  • 嗨。我使用了您的建议并对其进行了一些修改,请参阅我在 OP 中的 EDIT 2 以了解发生了什么。
  • @CrisLuengo 为了解决这个问题,我使用了一个循环,将正确的 RGB uint8 值分配给逻辑值,但我发现用于打乱的函数存在问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-21
  • 1970-01-01
  • 2011-01-28
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多