I've got a large matrix, mainly consisting of zeros and with some randomly placed values. I would like to be able to find the surrounding zeros of the non-zero values. If a single value is only surrounded by zeros it's no problem, but a cluster of values poses more problems. I could treat the values in the cluster as single values, but that means an extremely long runtime of the code. Is there a way to find all zeros surrounding a certain value? I don't have any additional toolboxes, but if there is one that could be usefull, I can always try to convince my boss that I need it...

 Akzeptierte Antwort

Andrei Bobrov
Andrei Bobrov am 4 Feb. 2012

0 Stimmen

bwdist from Image Processing Toolbox
OR
A - your array
[i1,j1] = find(A)
[y x] = ndgrid(1:size(A,1),1:size(A,2))
out = min(max(abs(bsxfun(@minus,x,reshape(j1,1,1,[]))),...
abs(bsxfun(@minus,y,reshape(i1,1,1,[])))),[],3)

4 Kommentare

M.J. Glasbergen
M.J. Glasbergen am 8 Feb. 2012
The 'matlab' function does not function completely the same as the bwdist, it also marks the diagonally touching cells (distance (sqrt(2)) as 1. Is there a way to mark only the cells touching side by side as 1 without the Image Processing Toolbox?
Andrei Bobrov
Andrei Bobrov am 8 Feb. 2012
out = conv2(A+0,[0 1 0;01 0 1;0 1 0],'same').*A~=0
Andrei Bobrov
Andrei Bobrov am 8 Feb. 2012
more variant
out = min(hypot(bsxfun(@minus,y,permute(i1,[3 2 1])),bsxfun(@minus,x,permute(j1,[3 2 1]))),[],3)
as 'bwdist' from 'Image Processing Toolbox'
M.J. Glasbergen
M.J. Glasbergen am 10 Feb. 2012
You're the greatest, this last one is the one I was looking for now :-)

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

M.J. Glasbergen
M.J. Glasbergen am 5 Feb. 2012

0 Stimmen

Seems to work great, thnx!

Produkte

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by