只是一個矩陣問題,可能很簡單,我無法弄清楚。假設我有一個20×20的矩陣A.我有另一個矩陣B,它是相同的大小但是是邏輯的。我想在阿那位置內的任何元素(比如說)的「1」在乙3,將被改變爲0。MATLAB基於周圍數據將元素更改爲零
詹姆斯
只是一個矩陣問題,可能很簡單,我無法弄清楚。假設我有一個20×20的矩陣A.我有另一個矩陣B,它是相同的大小但是是邏輯的。我想在阿那位置內的任何元素(比如說)的「1」在乙3,將被改變爲0。MATLAB基於周圍數據將元素更改爲零
詹姆斯
所述的圖像處理工具箱包括功能imdilate
,可以填補在B
附近的位置1
s也是1
s。然後我們只使用A
的邏輯索引。你提到的距離是使用歐幾里德距離計算的。如果您想要棋盤距離,請改爲使用neighborhood = ones(2*R+1)
。
R = 3;
[X,Y] = ndgrid(-ceil(R):ceil(R));
neighborhood = (X.^2 + Y.^2)<=R^2;
A(imdilate(B,neighborhood)) = 0;
代碼
bsxfun
基礎的辦法來解決這樣的問題 -
%// Form random A and B for demo purposes
N = 50; %// input datasize
A = rand(N);
B = rand(N)>0.9;
R = 2; %// neighbourhood radius
%// Find linear indices offsets within 2R*2R neighbourhood
offset_displacement = bsxfun(@plus,(-R:R)',[-R:R]*size(A,1)); %//'
offset_matches = bsxfun(@plus,(-R:R)'.^2,[-R:R].^2) <= R*R; %//'
offset_matched_displacement = offset_displacement(offset_matches);
%// Use those offsets to find actual linear indices for all '1' points in B
loc = bsxfun(@plus,find(B),offset_matched_displacement'); %//'
%// Set "eligible" points (based on loc) to zeros in A
A(loc(loc>=1 & loc<=numel(A)))=0;
調試輸入&輸出 -
你如何衡量矩陣元素之間的距離? – David 2015-02-10 00:49:15