顶帽运算的原理是用原始的二值图像减去开运算的图像。开运算的目的是“移除”某些局部像素,如去毛边、断开相邻的边缘等。而顶帽运算正是用来提取这些被移除的部分。图(a)为从二值图像中提取出的亮的区域,可见有一些杂点和毛边。
图(b)中的高亮部分为经过开运算处理后的效果,杂点消失,毛糙的边缘也有所平滑。与之对比的是图(c),即不使用开运算,而使用顶帽运算的结果,得到的是开运算中被移除的边缘和杂点。图中的顶帽运算处理代码如下:
read_image (Image,' data/board')
rgbl_to_gray(Image, GrayImage)
gen_rectanglel (Rectangle,259, 87, 957, 909)
reduce_domain (GrayImage, Rectangle, ImageReduced)
threshold(ImageReduced,Light,85,255)
gen_circle(StructElement,6,6,7)
*清理显示窗口,以便显示结果
dev_clear_window ()
*进行顶帽运算,得到开运算中被移除的局部像素并高亮显示
top_hat (Light, StructElement, RegionTopHat)
dev_clear _window ()
dev_display (RegionTopHat)
由此可见,顶帽运算返回的像素部分是尺寸比结构元素小的,并且比较亮的、在开运算中被移除的局部小区域。