我想计算二进制图像中六边形单元格的百分比,这意味着具有另外6个邻居单元格的单元格的数量。例如,标有1,2,3和4号的细胞都有6个邻居细胞。
我正在寻找可以在Matlab中实现这一功能的功能。我尝试过不同的Matlab函数,例如regionprops和bwconncomp。但是,没有人适合我。有什么想法吗?
这里有一个简单的图片:
答案 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;
结果如下:
Ps:你必须删除一个count
,因为单元格的分区出现在函数unique
中。
Pss:imcomplement
是必需的,因为bwlabeln
标记了白色值。