Halcon 赃污检测(高斯滤波图,傅里叶变换,灰度差过滤)

资源

链接:https://pan.baidu.com/s/1PCam-4jnNOtBOixrK6Gdhw
提取码:bkqd

图片

Halcon 赃污检测(高斯滤波图,傅里叶变换,灰度差过滤)_第1张图片

代码

* 1.读取并显示图片 *************************************
dev_close_window ()
read_image (Image, './img.bmp')
get_image_size (Image, Width, Height)
dev_open_window_fit_size (0, 0, Width, Height, -1, -1, WindowHandle)
dev_display (Image)

set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (3)

* 2.预处理图片 *****************************************
rgb1_to_gray (Image, GrayImage)

* 3.生成高斯滤波图 *************************************
sigma1 := 30.0
sigma2 := 5.0
gen_gauss_filter (ImageGauss1, sigma1, sigma1, 0, \
                  'none', 'rft', Width, Height)
gen_gauss_filter (ImageGauss2, sigma2, sigma2, 0, \
                  'none', 'rft', Width, Height)
* 高斯滤波图相减
sub_image (ImageGauss1, ImageGauss2, ImageFilter, 1, 0)

* 4.傅里叶变换 *************************************
* 图片转为频域图
rft_generic (GrayImage, ImageFFT, 'to_freq', 'none', 'complex', Width)
* 频域图做卷积处理(使用高斯滤波图)
convol_fft (ImageFFT, ImageFilter, ImageConvol)
* 频域图片转换为 领域图(实数)
rft_generic (ImageConvol, ImageFiltered, 'from_freq', 'n', 'real', Width)

* 5.提升对比度、连通域分析********************************
* 实数图片 ==> 0-255, 小于0赋值为0, 大于255赋值为 255
scale_image_range (ImageFiltered, ImageScaled, 0, 255)
threshold (ImageScaled, Region, 1, 255)
connection (Region, ConnectedRegions)

* 6.筛选 外框距离过滤********************************
* 获取外边框
get_domain (GrayImage, Domain)
boundary (Domain, RegionBorder, 'inner')
* 计算与外边框距离筛选区域(距离 > 1)
select_shape_proto (ConnectedRegions, RegionBorder, SelectedRegions, \
                    'distance_contour', 1, 9999)

* 7.筛选 内外灰度差过滤********************************
* 计算区域外部环状区域
dilation_circle (SelectedRegions, RegionDilation, 8.5)
difference (RegionDilation, SelectedRegions, RegionDifference)

* 计算区域外部 平均灰度值
gray_features (RegionDifference, GrayImage, 'mean', ValuesOut)
* 计算区域内部 平均灰度值
gray_features (RegionDilation, GrayImage, 'mean', ValuesInsider)

* 灰度差阈值
BackGrayValue := 0.8
* 灰度差
GrayDiff := (ValuesOut - ValuesInsider) 
* 差值转换为 [-11....]的数组  大于0.8=1 小于0.8=-1
SgnFilter := sgn(GrayDiff - BackGrayValue)  
* 元组筛选 获取SgnFilter元组中1 的索引列表
tuple_find (SgnFilter, 1, Indices)
* 使用索引列表 筛选出区域(均值小于 > 0.8的区域)
select_obj (SelectedRegions, ObjectSelected, Indices+1)

* 8.显示结果 *****************************************
dev_display (Image)
dev_display (ObjectSelected)

结果

Halcon 赃污检测(高斯滤波图,傅里叶变换,灰度差过滤)_第2张图片

你可能感兴趣的:(Halcon,计算机视觉)