imfill()函数。BW2 = imfill(BW,’holes’)。bw为二值化图像,即由0和1组成的图像。其中,结合前篇,二值化后图像必须进行反色,使得背景为黑色,即灰度值为0,前景即object为白色,即灰度值为255(归一化后为1—>逻辑矩阵)。
—->这里,holes必须是由白色围城的孔洞,这样才能使用imfill()进行填充。
连通域删除使用bwareaopen()函数。目前我的方法是,通过二值图与原图的比较,大约估计灰尘和单个颗粒之间连通域大小。一般的颗粒,在一定的解像力的基础上,在二值图案上形成的是圆形斑,所以基本上单个颗粒之间的连通域像素面积(总数)区别不是很大,通过逐步的比较和观察,大约可以得到一个临界值,这个值,用8连通域进行分析并删除,可以排除一些灰尘或者脏斑的干扰。
所以这边就是三步。
J1=~J; bin2=imfill(J1,’holes’); bin2=bwareaopen(bin2,38,8);
[\matlab]
第一步,将二值化图反色。第二步,填补因为颗粒的反光而在连通域的白色斑中形成的黑色孔洞。第三步,进行连通域删除。