如图,我们需要求出硬币的面积(像素面积)。注意,如果要求实际面积,需要用到标定板,测量助手,涉及到相机标定相关的知识,我们暂且不作深入讨论。
首先,我们必须将硬币提取出来,去掉钥匙的干扰。那么采用blob分析是最佳方法。
我们采用中值滤波进行图像预处理。
多说一句,我们使用halcon做图像处理的手法(框架)一般很固定,简单说有:
1.采集图像
2.预处理(定位)。用到的操作包括中值滤波,均值滤波,高斯滤波,模板匹配,形态学等
3.特征提取。形状特征、颜色特征、纹理、概率,描述算子,梯度直方图等
本案例我们使用*中值滤波(也可以用均值滤波)去椒盐噪声 使图像变得平滑
然后二值化灰度图像
开运算
断成不同的连通域
connection
特征直方图,进行特征选择:
最好求面积和坐标:
完整实现:
* Code generated by Image Acquisition 01
dev_close_window ( )
dev_open_window_fit_size (0, 0, 640, 480, -1, -1, WindowHandle)
*读取灰度图像
read_image (Image, 'E:/SVN/Gavin/Learn/HalconHelp/photos/money.png')
*中值滤波(也可以用均值滤波)去椒盐噪声 使图像变得平滑
median_image (Image, ImageMedian, 'circle', 1, 'mirrored')
*mean_image (ImageMedian, ImageMean, 9, 9)
*灰度图像二值化
threshold (Image, Regions1, 120, 255)
*开运算 去像素
opening_circle (Regions1, RegionOpening, 8.5)
*填充孔洞
fill_up (RegionOpening, RegionFillUp)
stop ( )
*断成不同的连通域
connection (RegionFillUp, ConnectedRegions)
*特征选择,提取图像
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 12016.2, 16291.2)
area_center (SelectedRegions, Area, Row, Column)
disp_message (WindowHandle, '面积:'+Area+',坐标:'+'('+Row+','+Column+')', 'window', Row-100, Column-50, 'black', 'true')