本文主要是介绍camera脏污检测算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.脏污检测算法类型
1.1目前我知道的检测算法(opencv halcon c++):
1.1.1空域检测
将图像分块检测每块与周围的亮度差,然后将亮度差大的进行连接,组成污点块簇,这种检测算法需要将图像分成多种不同网格大小的图像,计算量较大,即便这样,还是会有部分污点落下。适合2010年之前的摄像头图像品质要求。现在已经很少使用了。低端安防行业还在使用。
1.1.2高通滤波
针对边缘明显的污点较为有效,但浅污点效果不好。
1.1.3带通滤波
频域带通滤波,先频域检测中频污点,然后空域计算反差亮,设置阈值进行管控。
效果如下:
写在最后,非公益项目,需要合作请联系。
附脏污检测背景:
传统摄像模组的组装生产和指标检测主要依赖人工手工操作、肉眼判断,随着工作时间加长,工人的生产效率会下降、误差率会上升,而且生产成本也比较高。这样的生产流程与工艺,对于高品质产品的一致性保证是一个很大的问题。面对未来消费电子产品对于高品质模组的要求以及指数级增长的产品数量市场需求,传统模组生产工艺很难满足挑剔的客户。要想在严峻的市场竞争中保持竞争力,自动化、批量化、标准化的生产工艺势在必行。虽然,摄像模组检测在韩国、日本等国有一些相关的设备,但是价格非常高昂,完全引进国外设备对国内的摄像模组生产企业有很重负担。因此,对这类摄像模组检测的设备的国产化研发很有必要,这将对我国国民经济发展以及从中国制造向中国智造的转型升级有重要意义。
附一段类似的代码吧,思路可以,不过我的与此代码差别很大
Halcon -表面瑕疵脏污检测
1、拿到一张图片,我们在看到Halcon例子中有一篇find_Scratches_bandpass_fft.dev。其中就讲到了核心的几个算子,用来对空间图像转变成频域的图像。即进行傅里叶变换。
例子中在读入一张图片,进行预处理使用gauss_filter图像平滑,然后进行的正弦带通滤波。gen_sin_bandpass(ImageFilter,Frequency,Norm,Mode,Width,Height)Frequency指的是频率0-1之间。Norm因子归一化方式:‘n’或‘none’。Mode决定滤波器的DC-trem在哪里或者滤波器是否可以在实数快速傅里叶变换中使用。剩下的参数是图片的宽和高。
一般还可以使用两个,注意是两个下面的算子,得到的输出图片相减,输出的图片,形成带通滤波。gen_gauss_filter(ImageGuass,sigma1,sigma1,0,‘none’,‘rft’,width,height)来代替正弦带通滤波。在halcon关于这个算子的介绍中,有这么一句话需要注意 If fft_image and fft_image_inv are used for filtering, Norm = ‘none’ and Mode = ‘dc_center’ must be used. If rft_generic is used, Mode = ‘rft’ must be used.
2、下面进行对图像做实数快速傅里叶变换
rft_generic(输入的byte图像即先前高斯平滑的图像,输出图像格式complex也就是ImageFFT, ‘to_freq’, ‘none’, ‘complex’, Width) 其中输出图片的大小是(w/2+1)h。与卷积后再反傅里叶变换图片大小相对应
3、根据一个滤波器对图像在频域做卷积。图像用上面生成的正弦滤波器做一次卷积。convol_fft(ImageFFT,ImageBnadpass,ImageConvol)
4、反傅里叶变换,其中的参数改为‘from_freq’。此时输出图像大小计算为2w-2
5、形态学分离出划痕。
这篇关于camera脏污检测算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!