与select_shape算子类似,灰度值图像也可以快捷地根据特征值选择符合设定条件的区域。select_gray算子用于实现这一功能,该算子能接受一组区域作为输入,然后根据选定的特征计算其是否满足特定的条件。当所有区域的特征都计算结束后,图像将在原来的灰度图上输出符合设定条件的区域。该算子的原型如下:
select_gray ( Regions, Image : SelectedRegions : Features, Operation, Min, Max:)
其各参数的含义如下。
参数1:Regions(输入参数),表示图像上待检查的一组区域。
参数2:Image(输入参数),表示输入的单通道图像。
参数3:SelectedRegions(输出参数),表示特征的局部关联性。
参数4:Features(输入参数),表示选择的特征。
参数5:Operation(输入参数),表示低于最大绝对灰度值的百分比。
参数6:Min(输入参数),表示最小的灰度值,默认为128。
参数7:Max(输入参数),表示最大的灰度值,默认为255。
下面以一个例子说明,如所示。其中图(a)为输入的彩图转化的灰度图像,目标是提取湖面区域;图(b)为灰度图像经过阈值分割的结果;图(c)为使用select_shape 算子进行面积筛选的结果,得到了两部分区域。
为了将这两部分区域进一步区分,这里使用了灰度特征中的deviation参数,因为两部分中的灰度偏差明显不同。湖面区域灰度变化比较小,而旁边的村庄区域灰度变化则比较明显,因此使用select_gray算子,用灰度偏差特征可以将偏差较小的湖面区域提取出来。提取结果显示在图(d)中。
上述过程的代码如下:
*关闭当前窗口
dev_close_window ()
*读取输入图像
read_image (Image, 'data/village')
*获取原始图像的宽和高
get_image_size (Image, Width, Height)
*创建同尺寸的显示图像的窗口
dev_open_window (0, 0, Width, Height, 'white', WindowID)
*将图像转化为灰度图像
rgbl_to_gray (Image, GrayImage)
*使用均值滤波对灰度图像进行平滑处理,以去除细节杂点
median_image (GrayImage, ImageMedian, 'circle', 2, 'mirrored')
*进行阈值处理,提取出较亮部分
threshold (ImageMedian, BrightRegion, 180, 255)
*使用开运算将各区域分离
opening_circle (BrightRegion, RegionClosing,6.5)
*将不连通的区域分隔开来
connection (RegionClosing, BrightRestConnection)
*将面积较大的区域提取出来
select_shape (BrightRestConnection, SelectedRegionsl, 'area', 'and',5000, 99999)
*获取这些区域的平均值和偏差。由于湖面区域灰度变化比较小,因此灰度偏差会比较小
intensity (SelectedRegionsl, ImageMedian, Mean, Deviation)
*以灰度偏差为条件,选出符合条件的区域
select_gray (SelectedRegionsl, ImageMedian, SelectedRegions, 'deviation', 'and',4,10)
dev_clear _window ()
dev_display (GrayImage)
dev display (SelectedRegions)
至此,湖面区域就被提取出来了。在其他检测中,可以多次利用select_gray 算子进行其他灰度
值条件的设定,直到提取出理想的区域。