代码之家  ›  专栏  ›  技术社区  ›  s.gastaldon

Matlab中黑白图像的像素置乱

  •  0
  • s.gastaldon  · 技术社区  · 6 年前

    我有一系列黑白图像(不是灰度、黑白;Matlab中的2D矩阵),我需要随机置乱像素。我在Mathworks文件交换中找到此包( https://it.mathworks.com/matlabcentral/fileexchange/66472-image-shuffle );其中一个功能, ImScramperrand公司 ,完全符合我的需要,但它适用于RGB图像(3D矩阵)。有没有办法改变b&将图像转换为3D矩阵,以便我可以使用该功能?或者有人能推荐其他符合我需要的脚本吗?请记住,我不熟悉Matlab,但我会尽全力。

    非常感谢。

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

    编辑2: 我改编了上述软件包中的演示代码,并使用了@Jonathan的建议,将2D矩阵转换为3D矩阵,并添加了一个循环,将逻辑值转换为RGB整数值,然后使用 ImScramperrand公司 作用这是可行的,但我得到的是下图: 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 回复  |  直到 6 年前
        1
  •  1
  •   nhowe    6 年前

    对矩阵M进行置乱的一种简单方法:

    r = rand(size(M));
    [~,ri] = sort(r(:));
    M(ri) = M;
    
        2
  •  0
  •   Jonathan    6 年前

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

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

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

    推荐文章