连通域的质心
- 在物理领域,质心就是质量中心,规则均密度物体的质心就是几何中心。不规则物体可以通过垂绳法来寻求
- 几何距(Geometric Moments)知识与质心寻找原理
Image Moments(图像距)是图像处理中非常有用的算法,可以用来计算区域图像的质心,方向等几何特性, 同时Mpq的高阶具有旋转不变性,可以用来实现图像的比较分类,数学表达式:
根据pq值不同,有M00,M01,M10可以用来计算质心,中心化后M11,M02,M20可以用来计算区域的方向/角度
二值图像中大于0的像素个数就是图像的面积
坐标x乘以每个像素点的值 求和,除以图像中像素值的和得到质心:
- 算法流程:
a. 输入图像转换为二值图像
b. 通过连通组件标记算法找到的所有的连通区域,并分别标记
c. 对每个连通域计算几何距算法得到质心
d. 用不同颜色绘制连通域和质心,然后输出图像 - 代码:
## 例1:单连通域的质心
img=imread('bw.tif');
[m,n]=size(img);
L=bwlabel(img);
sum_x=0;sum_y=0;area=0;
for i=1:m
for j=1:n
if L(i,j)==1
sum_x=sum_x+i; %所有x*f(x)的和
sum_y=sum_y+j; %所有y*f(y)的和
area=area+1; %面积求和
end
end
end
plot_x=fix(sum_x/area);
plot_y=fix(sum_y/area);
figure();
imshow(img);
hold on
plot(plot_y,plot_x,'*');
## 例2:多连通域的质心
I=imread('img.jpg');
I_gray=rgb2gray(I);
level=graythresh(I_gray);
[height,width]=size(I_gray);
I_bw=im2bw(I_gray,level);
for i=1:height %%循环中进行反色
for j=1:width
if I_bw(i,j)==1
I_bw(i,j)=0;
else I_bw(i,j)=1;
end
end
end
[L,num]=bwlabel(I_bw,8); %num是连通域个数
plot_x=zeros(1,num); %%用于记录质心位置的坐标
plot_y=zeros(1,num);
for k=1:num %%num个区域依次统计质心位置
sum_x=0;sum_y=0;area=0;
for i=1:height
for j=1:width
if L(i,j)==k
sum_x=sum_x+i;
sum_y=sum_y+j;
area=area+1;
end
end
end
plot_x(k)=fix(sum_x/area);
plot_y(k)=fix(sum_y/area);
end
figure(1);
imshow(I_bw);
for i=1:num
hold on
plot(plot_y(i) ,plot_x(i), '*');
end
## 例3:利用regionprops的'Centroid'表示方法
label=bwlabel(bw);
STATS = regionprops(label,'Centroid') %利用regionprops的'Centroid'表示方法
point=STATS.Centroid %point是一串坐标x1,y1,x2,y2...
figure();
imshow(bw);
hold on
plot(point(1) ,point(2), '*');
end
关于regionprops的使用,移步Matlab图像处理函数:regionprops