如何计算每个单元的邻居数?

时间:2016-03-01 23:07:58

标签: image matlab image-processing

我想计算二进制图像中六边形单元格的百分比,这意味着具有另外6个邻居单元格的单元格的数量。例如,标有1,2,3和4号的细胞都有6个邻居细胞。

我正在寻找可以在Matlab中实现这一功能的功能。我尝试过不同的Matlab函数,例如regionprops和bwconncomp。但是,没有人适合我。有什么想法吗?

这里有一个简单的图片:

enter image description here

1 个答案:

答案 0 :(得分:1)

您好,您可以使用bwlabeln功能和一系列形态功能。

以下代码完成了这项工作:

% load image and post processing
A = imread('LR0gx.png');
I = rgb2gray(A);
I = imcomplement(I);

% labelling of the image
L = bwlabeln(I);

figure; subplot 121;
imagesc(L); title('cells labeling')

% search and count the neighbours using the dilate function
label = unique(L);
for ii = label(2:end)'
    I_temp = L == ii;
    I_temp = bwmorph(I_temp,'dilate',2) - I_temp;
    I_temp2 = L; I_temp2(~I_temp) = 0;
    number_of_neighbours(ii) = size(unique(I_temp2), 1)-1; 
end

L_2 = zeros(size(L));
for ii = label(2:end)'
    L_2(L == ii) = number_of_neighbours(ii);
end
subplot 122;
imagesc(L_2); title('number of neighbours'); colorbar;

结果如下:

enter image description here

Ps:你必须删除一个count,因为单元格的分区出现在函数unique中。

Pss:imcomplement是必需的,因为bwlabeln标记了白色值。