近來,有朋友問到,如何計算白色輪廓中的像素點的個數。我在這里就舉一個超級簡單的例子,就是假設一副二值圖片,其背景是黑色的,而你的邊緣是白色的,而且你的白色邊緣中不包含黑色的點,就如附件中的那個圖像。下面是一個簡單的計算輪廓包含起來的像素點的個數的程序:
%% 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 。我想這樣說你應該能明白了。至於面積的計算方法有很多中方法,我就不說了。或者可以用個數來代替面積。