如何将矩阵元素设置为周围元素的平均值?

Pau*_*nta 5 matlab matrix octave

我有一个X表示受噪音影响的图像的矩阵.我还有一个布尔矩阵M,表示哪些像素受噪声影响.我想要做的是将每个"损坏的"像素设置为其八个相邻像素的平均值.

保证损坏的像素始终被未损坏的像素包围,并且图像边界上的像素都不会被破坏.我可以用什么函数来编写这个矢量化版本?

Bjo*_*n H 2

这可能不是最有效的解决方案,但它应该有效。

N = size(M, 1);
target_ind = find(M);
offset = [-N-1, -N, -N+1, -1, 0, 1, N-1, N, N+1];

area_ind = bsxfun(@plus, offset, target_ind);
X(target_ind) = median(X(area_ind), 2);
Run Code Online (Sandbox Code Playgroud)

由于所有损坏的像素都保证被像素包围,因此我们可以相当容易地计算每个损坏的像素的邻居的线性索引。这里我假设这X是一个灰度图像。

如果I有多个通道,那么我们可以循环每个通道并每次添加一个偏移 target_indarea_ind

for i = 1:size(X, 3)
    chan_offset = (i - 1)*size(X, 1)*size(X, 2) % Add the number of elements in previous channels to get indices in the current channel
    X(target_ind + chan_offset) = median(X(area_ind + chan_offset), 2);
end
Run Code Online (Sandbox Code Playgroud)