2017-06-09 87 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