بدءا من مصفوفة M
من تعداد الجسيمات ، سيحصل هذا على قناع في Mb
من الحدود كما تم تعريفها بالسؤال ،
% define particle count matrix and find non-zero locations
M = randi(5,10,10)-1
[nr,nc] = size(M);
[pRows,pCols] = find(M);
% identify locations that compose the "boundary" line
boundCoords = [accumarray(pCols,pRows',[nc 1],@min)', ...
accumarray(pCols,pRows',[nc 1],@max)', ...
1:nr 1:nr; ...
1:nc 1:nc, ...
accumarray(pRows,pCols',[nr 1],@min)', ...
accumarray(pRows,pCols',[nr 1],@max)'];
boundCoords = unique(boundCoords','rows');
boundCoords(any(boundCoords==0,2),:)=[]; %' remove possible (unlikely) zeros
% create a mask representation of the boundary line
Mb = false(size(M));
Mb(sub2ind(size(Mb),boundCoords(:,1),boundCoords(:,2))) = true
هذا ما أفهمه أنك تريد أن يبدو قناعك الحدودي. عدد وحدات البكسل التي تشكل الحدود
numBorderPix = sum(Mb(:))
بعد ذلك
numBorderParticles = sum(M(Mb))
ملاحظة: سيضمن هذا الحل ذلك كل نقطة على خط الحدود لديها عدد الجسيمات غير الصفر.