这是一条金属棒上的伤疤,不知道被什么啃去了一块,你说该怎么才能把这个伤疤提取出来呢?
肯定是非常简单的,核心一定是threshold算子做阈值分割,然后就是select_shape选择区域
只不过在threshold算子的前置算子会有所不同,在select_shape后面的后置算子也如此。
本例子提供三种方法,基本上思路都是增加图像,然后threshold阈值分割。
方法一。
dev_update_off ( ) dev_close_window ( ) read_image (Image, 'C:/Users/Administrator/Desktop/划痕+油污+瑕疵的检测/划痕、油污、瑕疵/金属表面疤痕/Image.bmp') get_image_size (Image, Width, Height) dev_open_window (0, 0, Width/4, Height/4, 'black', WindowHandle) set_display_font (WindowHandle, 16, 'mono', 'true', 'false') dev_display (Image) * 预处理 mult_image(Image,Image, ImageResult, 0.0067, 0) scale_image_max(ImageResult, ImageScaleMax) bit_not(ImageScaleMax, ImageNot) mult_image(ImageNot, ImageNot, ImageResult1, 0.005, 0) threshold (ImageResult1, Regions, 10, 153) connection(Regions, ConnectedRegions) * 处理 select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 39094.1, 72934) fill_up(SelectedRegions, RegionFillUp) select_shape (RegionFillUp, SelectedRegions1, 'height', 'and', 758, 829.69) dilation_circle(SelectedRegions1, RegionDilation, 3.5) fill_up(RegionDilation, RegionFillUp1) erosion_circle(RegionFillUp1, RegionErosion, 3.5) reduce_domain(Image,RegionErosion, ImageReduced)
mult_image(Image1, Image2 : ImageResult : Mult, Add : )
两副图像相乘。其效果就是增加图像的对比度。即白越白黑越黑,中间灰度值像素很变少。
scale_image_max(Image : ImageScaleMax : : )
最大化图像的灰度值。这个算子的效果就是增加图像的对比度。
bit_not(Image : ImageNot : : )
对像素所有位求补。这个算子的效果就是让图像反相显示,即黑色就变白色。
下面图片依次为: 原图->mult_image->scale_image_max->bit_not
方法一的处理结果:
方法二。
dev_update_off ( ) dev_close_window ( ) read_image (Image, 'C:/Users/Administrator/Desktop/划痕+油污+瑕疵的检测/划痕、油污、瑕疵/金属表面疤痕/Image.bmp') get_image_size (Image, Width, Height) dev_open_window (0, 0, Width/4, Height/4, 'black', WindowHandle) set_display_font (WindowHandle, 16, 'mono', 'true', 'false') dev_display (Image) *方法二 *图像处理 gauss_image (Image, ImageGauss, 3) scale_image_max (ImageGauss, ImageScaleMax) * Extract color edges using Canny, Deriche, or Shen filters edges_color (ImageScaleMax, ImaAmp, ImaDir, 'canny', 1, 'nms', 20, 40) threshold (ImaDir, Region, 1, 255) closing_circle (Region, RegionClosing, 3.5) connection (RegionClosing, ConnectedRegions) fill_up (ConnectedRegions, RegionFillUp) select_shape (RegionFillUp, SelectedRegions, 'area', 'and', 10000, 99999)
gauss_image(Image : ImageGauss : Size : )
使用离散高斯函数平滑图像。它是一种图像滤波效果。
edges_color(Image : ImaAmp, ImaDir : Filter, Alpha, NMS, Low, High : )
根据颜色进行边缘提取
下面效果依次是: scale_image_max->edges_color->threshold->fill_up
由这段例程可知,edges_color提取边缘后再使用threshold算子,然后fill_up算子填充。全过程其实是region的操作,因此边缘提取还可以是region,并不是边缘提取都只有XLD的算子。
例子二的效果:
方法三。
* 初始化 dev_update_off ( ) dev_close_window ( ) read_image (Image, 'C:/Users/Administrator/Desktop/划痕+油污+瑕疵的检测/划痕、油污、瑕疵/金属表面疤痕/Image.bmp') get_image_size (Image, Width, Height) dev_open_window (0, 0, Width/4, Height/4, 'black', WindowHandle) set_display_font (WindowHandle, 16, 'mono', 'true', 'false') dev_display (Image) *方法三 * 加强图像的对比度 emphasize(Image,ImageEmphasize,Width, Height, 5) threshold(ImageEmphasize, Region, 0, 5) fill_up(Region, RegionFillUp2) connection(RegionFillUp2, ConnectedRegions1) select_shape(ConnectedRegions1, SelectedRegions2, 'area', 'and', 55000, 60000) closing_circle(SelectedRegions2, RegionClosing, 13.5)
emphasize(Image : ImageEmphasize : MaskWidth, MaskHeight, Factor : )
增强图像对比度
下图的效果依次是: emphasize->threshold->fill_up和closing_circle
方法三比较简单,只不过在threshold之前用了一个前置算子emphasize用来增强图像的对比度。
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

