我手头已经得到二值图像,图像上有几块不规则的小的白色区域,有什么办法可以得到每个白色区域的质心坐标(或者中心,只要靠近区域的中间就行了),并计算白色区域的个数,
该算法可以用来标记米粒的位置,和个数。
更进一步的话最好能够合并靠得比较近的白色区域。
求各位大侠思路算法,如有好得算法,可以再开贴加分!!

解决方案 »

  1.   

    思路:
    1、将你的二值图像转换成24位色的黑白图像
    2、用循环对白色区域用颜色x=(x+1){x的初始值设为1}进行FloodFill,如此每块白色区域就变成不同颜色的非黑白色区域,则x-1就是原白色区域的个数
    3、建立一个足够大的初始值为0的矩阵分别处理各色块,如为该色块则置1,如
       0 0 0 0 1 0 0 0 0
       0 0 1 1 1 1 1 0 0
       0 0 0 1 1 0 0 0 0
       1 1 1 1 1 1 0 0 0
       1 1 0 0 0 0 0 0 0
       0 0 0 0 0 0 0 0 0
       0 0 0 0 0 0 0 0 0
       0 0 0 0 0 0 0 0 0
       则该矩阵的有效大小为7*5,则中心为(4,3),再加上顶边和左边的偏移就是该区域的中心坐标
    缺点:最大计数为254*254*253(不过如果不够的话可以分成几块进行计数)
    特点:将若干个白色区域转化成唯一一个某色区域并同时完成计数工作,避免找边界;利用矩阵找中心
      

  2.   

    谢谢各位,我正在学习xhzxlqt的算法。
      

  3.   

    xhzxlqt的方法非常巧妙,需要调用DC和FloodFill函数,我现在手头24bit位图在内存里面,有没有什么办法不去调用DC呢。
      

  4.   

    谢谢xhzxlqt(多谦虚一点,多学一点),在你提到的方法中,要调用floodfill函数,我找了一下相关的资料,估计运算速度不快;
    谢谢flyjzy5(),在你提到的方法中,边界跟踪是个难点,因为图象的边缘有断点,不大好实现。
    这个问题我已经初步解决了:
    因为图上的白点不多,我写了一个算法,把距离近的点合并到一起,并找到坐标的平均直。各位高手有没有什么其他的更好的办法呢?