【数字图像处理】求图像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函数,进行连通域标记。不过老师要求尽量不要调用这些库函数,自己把他实现出来,这样理解的深刻一些,更好地提高编程能力。