【发布时间】:2012-11-06 18:06:21
【问题描述】:
我是图像处理的新手,在实现图像平滑时发现了一些困难。
基本上,我有一个图像 A,我想用它的局部平均值替换所有像素。所以我定义了掩码 M1 = one(10) 并使用
newImage = conv2(A, M1,'same')
它工作正常。但是在图像 A 中,完全由于噪声而存在毫无意义的像素,我不想将它们包括在平均中。我该怎么做,比如说有意义的像素是通过另一个蒙版 M2 定义的?
我在图像上做了一个简单的循环。它可以工作,但比 conv2() 慢得多。
for i = 1:self.row
for j = 1:self.col
if self.M2(i,j) % only treat meaningful pixels
A(i,j) = self.createAvgPhasor(i,j);
end
end
end
function [s_avg]=createAvgPhasor(self,m,n)
% bound box along x
if m > self.rB
xl = m - self.rB;
else
xl = 1;
end
if m < self.row_rB
xu = m + self.rB;
else
xu = self.row;
end
% bound box along y
if n > self.rB
yl = n - self.rB;
else
yl = 1;
end
if n < self.col_rB
yu = n + self.rB;
else
yu = self.col;
end
M1 = false(self.row,self.col);
M1(xl:xu,yl:yu) = true;
msk = M1 & self.M2;
s_avg = mean(self.Phi(msk));
end
非常感谢您的帮助。
【问题讨论】:
-
所以问题是你想用无意义的像素做什么?您想用平均值替换它们但不将它们包括在平均值中吗?你想让它们保持原样吗,用黑色代替它们......
-
我不关心噪声像素的值。它们最终可以设置为 0。在平均中排除它们是我想要的。
-
好的,我更新了我的答案,希望这会有所帮助,
标签: image matlab average convolution smoothing