2017-06-09 48 views
0

我在矩阵中有辐射映射的问题。 MxN矩阵用于记录每个x-y位置的读数(计数)。如果任何值超过阈值,那么我需要将该值与其周围值进行平均,以确定它是真的还是假的。比较矩阵中的环绕值

我的问题是,当我检查矩阵边缘的一个值时,我不知道如何处理这个问题。我会假设以A((i-1,j-1),(i-1,j),(i-1,j+1),(i,j-1),...,(i+1,j+1))的平均值开始。但是,如果在(i,j)上有值,例如左边缘,则没有j-1列。

例如,假设阈值为7

[ 1 4 2; 
    3 5 6; 
    2 6 10 ] 

考虑以后,这些值是56610。我的初始方法会暗示矩阵之外的零(我相信),从而扭曲平均值。

我如何在MATLAB或Python中解决这个问题?

+0

有几种方法可以对此进行编码 - 尤其是在两种语言中。所以我们可以建立一个而不只是为你写代码? – doctorlove

+1

您需要确定您想要设置的问题的边界条件(它们被称为那样)。我想说,就你而言,你想使用镜面边界条件,或Neumman边界条件设置为零。基本上向外重复角落值。这样你就不会让每个角落的价值成为一个异常值。 –

回答

0

MATLAB答案

threshold = 7; 
A = [1 4 2; 3 5 6; 2 6 10]; 
B = padarray(A,[1,1]); 
C = B; %Storing B so that values don't interfere with one another 
[x,y] = find(B>=threshold); 
for ii1 = 1:length(x) 
    for jj1 = 1:length(y) 
     ii = x(ii1); 
     jj = y(jj1); 
     C(ii,jj) = sum(sum(B(ii-1:ii+1,jj-1:jj+1)))./nnz(B(ii-1:ii+1,jj-1:jj+1)); 
    end 
end 
A = C(2:end-1,2:end-1); 

不干净的代码,但它应该完成这项工作。

+0

感谢您的帮助,padarray和nnz提示正是我所需要的。 – user8138050