【数字图像处理】求图像rice.png中米粒个数

 图像处理课程上老师布置的任务,要求求出图片rice.png中米粒的个数及其各米粒的大小。

rice.png:


大体步骤是:首先进行边缘检测,然后进行填充。然后进行开运算,可以使一些轻微连着的米粒分开来。然后是遍历图片,把各米粒进行标号,从1开始从小到大标号。每个米粒的各像素点值相同,第i个米粒的各像素点值均为i。其中采用了队列,用数组模拟。最大的米粒标号便是米粒的总个数。最后,遍历一遍图像数组,便可求出各米粒的面积。

参考代码(matlab实现):


运行结果:

边缘检测,填充,开运算之后的结果:


可以看出有些轻微连着的米粒被分开了。

进行标号后的结果:


米粒是从上到下从左到右依次编号的。从图中米粒的明暗程度可以看出来。

最终结果:

米粒的总个数:


RiceNumber =


    69


各米粒的大小(按照从上往下,从左往右的顺序):


RiceArea =


  Columns 1 through 20


   212   146   197   179   224   431   208   182   147   189   236   214   207   202   138   188   158   202   210   181


  Columns 21 through 40


   186   211   199   227   203   223   224   227   249   254   225   187   183   200   232   199   210   200   198   183


  Columns 41 through 60


   230   268   233   235   193   206   240   158   207   215   238   200   239   227   207   254   237   203   211   236


  Columns 61 through 69


   219   152   225   238   169   223   215   195   195

 有一个比较简单的方法是直接调用bwlabel函数,进行连通域标记。不过老师要求尽量不要调用这些库函数,自己把他实现出来,这样理解的深刻一些,更好地提高编程能力。


posted on 2011-10-27 10:22  江南烟雨hust  阅读(2242)  评论(0)    收藏  举报

导航