本文共 814 字,大约阅读时间需要 2 分钟。
近来,有朋友问到,如何计算白色轮廓中的像素点的个数。我在这里就举一个超级简单的例子,就是假设一副二值图片,其背景是黑色的,而你的边缘是白色的,而且你的白色边缘中不包含黑色的点,就如附件中的那个图像。下面是一个简单的计算轮廓包含起来的像素点的个数的程序: %% step 1 clear all clc I=imread('test.bmp');%读入图片 bwI=im2bw(I,0.5);%转化为二值图像 L=bwlabel(bwI,4);%将四连通区域进行标记 [r,c]=find(L==1);%查找其中的白色区域,r是白点的所在行组成的向量,c是白点所在的列组成的向量 %% step 2 %去除r中重复的数 new_r=[]; for i=1:length(r) nn=find(new_r==r(i)); if isempty(nn),new_r=[new_r r(i)];end end %% step 3 sum_zeros=0;%轮廓中总的点的个数 for i=1:length(new_r) n=find(bwI(new_r(i),:)==1);%查找有白点的行中白点所在的位置 if length(n)==1,continue;end%如果该行中只有一个白点,则返回 num_zeros=n(end)-n(1)+1-length(n);%否则计算夹在白点之间的黑点的个数 sum_zeros=sum_zeros+num_zeros; end 就是这样的,比如这一行是这样的001110000011100,那么step3中的n就是一个向量:3 4 5 11 12 13,这六个数分别是这行中白点的位置,那么其中的夹在1之间的0的个数就是:13-3+1-6=5 。我想这样说你应该能明白了。至于面积的计算方法有很多中方法,我就不说了。或者可以用个数来代替面积。 |