MATLAB 简单的计算白色轮廓中像素点的个数

来源:互联网 发布:深圳大数据协会 编辑:程序博客网 时间:2024/04/30 03:26

MATLAB:简单的计算白色轮廓中的像素点的个数

近来,有朋友问到,如何计算白色轮廓中的像素点的个数。我在这里就举一个超级简单的例子,就是假设一副二值图片,其背景是黑色的,而你的边缘是白色的,而且你的白色边缘中不包含黑色的点,就如附件中的那个图像。下面是一个简单的计算轮廓包含起来的像素点的个数的程序:

%% 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 。我想这样说你应该能明白了。至于面积的计算方法有很多中方法,我就不说了。或者可以用个数来代替面积。


原创粉丝点击