我是成像處理的新手,我發現實施圖像平滑的一些困難。matlab圖像平滑與conv2
基本上,我有一個圖像A,我想用當地平均值代替所有像素。所以我定義了口罩M1 = ones(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
非常感謝您的幫助。
所以問題是你想用無意義的像素做什麼?你是否想用平均值替換它們,但不包括它們的平均值?你想保持它們的方式,用黑色替換它們... – Ali
我不在乎噪聲像素的值。最後它們可以設置爲0。在平均中排除它們是我想要的。 – nos
好的,我更新了我的答案,希望這有助於, – Ali