zoukankan      html  css  js  c++  java
  • 连通域的质心

    1. 在物理领域,质心就是质量中心,规则均密度物体的质心就是几何中心。不规则物体可以通过垂绳法来寻求
    2. 几何距(Geometric Moments)知识与质心寻找原理
      Image Moments(图像距)是图像处理中非常有用的算法,可以用来计算区域图像的质心,方向等几何特性, 同时Mpq的高阶具有旋转不变性,可以用来实现图像的比较分类,数学表达式:
      1

    根据pq值不同,有M00,M01,M10可以用来计算质心,中心化后M11,M02,M20可以用来计算区域的方向/角度

    二值图像中大于0的像素个数就是图像的面积
    坐标x乘以每个像素点的值 求和,除以图像中像素值的和得到质心:

    1. 算法流程:
      a. 输入图像转换为二值图像
      b. 通过连通组件标记算法找到的所有的连通区域,并分别标记
      c. 对每个连通域计算几何距算法得到质心
      d. 用不同颜色绘制连通域和质心,然后输出图像
    2. 代码:
    ## 例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

  • 相关阅读:
    opacity背景层透明导致文字也透明
    [css3]叉叉旋转效果
    [css]当父元素的margin-top碰上子元素的margin-top
    Python_Mix*异常处理
    Python_Mix*OS模块,序列化模块种的json,pickle
    Python_Mix*random模块,time模块,sys模块,os模块
    Python_Mix*re模块基础方法,进阶,正则表达式的使用
    Python_Mix*re模块,元字符,量词
    Python_Mix*匿名函数,sorted,filter,map,递归函数,二分法查找
    Python_Mix*内置函数
  • 原文地址:https://www.cnblogs.com/thgpddl/p/12619049.html
Copyright © 2011-2022 走看看