我有一个矩阵 X
表示受噪声影响的图像。我还有一个 bool 矩阵 M
表示哪些像素受到噪声的影响。我想要做的是将每个“损坏的”像素设置为其八个相邻像素的平均值。
保证损坏的像素始终被未损坏的像素包围,并且图像边界上的像素也不会损坏。我可以使用什么函数来编写它的矢量化版本?
最佳答案
对于您的情况,这应该执行得相当快
fixed = conv2 (image, [1 1 1; 1 0 1; 1 1 1]/8, "same")
# mask is a logical matrix for the corrupted pixels
image(mask) = fixed(mask)
说明:均值过滤器是通过 conv2
函数完成的。要计算像素及其相邻像素的平均值,使用的内核是 ones (3)/9
,这意味着每个像素值的 1/9 用于计算新值。由于您不想计算平均值中的中心像素,因此将其值设置为 0(在内核中),将其他设置为 1/8。
关于matlab - 如何将矩阵元素设置为周围元素的意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15586068/