划痕、油污、瑕疵,常用的方法有傅里葉變換和Blob分析。
1.表面划痕
invert_image(Image,ImageInvert1)
mult_image(ImageInvert1, ImageInvert1, ImageResult,0.01, 0)
gen_sin_bandpass (ImageBandpass, 0.6, 'none', 'rft', Width, Height)
rft_generic (ImageResult, ImageFFT, 'to_freq', 'none', 'complex', Width)
convol_fft (ImageFFT, ImageBandpass, ImageConvol)
rft_generic (ImageConvol, Lines, 'from_freq', 'n', 'byte', Width)
texture_laws (Lines, ImageTexture, 'el',3, 5)
為更好的突出前景,一般情況下要求背景顏色較深,可以先用invert_image算子進行灰度值轉換。之后的圖像相乘,是將對比度進一步擴大。
生成一個正弦形狀的帶通濾波器,可以去除圖像中的噪聲。然后傅里葉變換凸顯出要檢測的划痕。
texture_laws是紋理濾波,適用於布匹表面的划痕,是整個算法的關鍵所在。
2.亮點、暗點
*找到亮點
mean_image (ImageScaleMax, ImageMean, 9, 9)
dyn_threshold(ImageScaleMax,ImageMean,RegionDynThresh,5,'light' )
connection(RegionDynThresh,ConnectedRegions)
*找到暗點
mean_image(ImageScaleMax,ImageMean,7,7)
dyn_threshold(ImageScaleMax,ImageMean,RegionDynThresh1,5,'dark' )
connection(RegionDynThresh1,ConnectedRegions1)
平滑,動態閾值分割。
3.金屬表面疤痕
* 加強圖像的對比度
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算子,增強圖像對比度,當然前景的突出不僅僅只用這種方法。
4.油污
Sigma1 := 30.0
Sigma2 := 5.0
gen_gauss_filter (GaussFilter1, Sigma1, Sigma1, 0.0, 'none', 'rft', Width, Height)
gen_gauss_filter (GaussFilter2, Sigma2, Sigma2, 0.0, 'none', 'rft', Width, Height)
sub_image (GaussFilter1, GaussFilter2, Filter, 1, 0)
rgb1_to_gray (Image, GrayImage)
rft_generic (Image, ImageFFT, 'to_freq', 'none', 'complex', Width)
convol_fft (ImageFFT, Filter, ImageConvol)
rft_generic (ImageConvol, ImageFiltered, 'from_freq', 'n', 'real', Width)
scale_image_range (ImageFiltered, ImageScaled, 0, 255)
與表面划痕相似,通過兩次高斯濾波,結合傅里葉變換。scale_iamge_range算子的作用:Scale the gray values of an image from the interval [Min,Max] to [0,255]。可以將油污的灰度值凸顯出來。