基于FPGA的自适应阈值分割算法实现

基于FPGA的自适应阈值分割算法实现,第1张

在图像预处理中经常会碰到图像分割问题,把感兴趣的目标从背景图像中提取出来,而经常使用的是简单的全局阈值分割配置,用一个固定常数作为二值分割阈值,从而得到一个二值图像,如果更复杂些,可以使用大律法实现自适应全局阈值分割。但是在有些场景下,比如光线不均匀照射下,全幅图像中不同位置的像素点,光强有强有弱;因此,如果再使用全局阈值来处理就失效了,如下图所示是图像的大律法OTSU分割效果。由此可以看出,因为图像边缘光强较中间位置弱,导致图像分割有缺陷,使得分割后二值图像边缘为1,而中间较亮的地方分割成功。

如何解决光线不均匀带来的影响?一种典型的处理方法就是采用局部自适应阈值分割。根据像素邻域块的像素值分布来确定该像素位置上的二值化阈值。这样做的好处在于每个像素位置处的二值化阈值不是固定不变的,而是由其周围邻域像素的分布来决定的。亮度较高的图像区域二值化阈值通常较高,而亮度较低的图像区域二值化阈值则会相应地变小。不同亮度、对比度、纹理的局部图像区域将会拥有相对应的局部二值化阈值。

基于FPGA的自适应阈值分割算法实现,poYBAGEiCKCAFc31AAAQrr5Yfew320.png,第2张

      

FPGA实现:

基于FPGA的自适应阈值分割算法实现,poYBAGEiCLyAN2y3AAALy_S84eI778.png,第3张

       

基于FPGA的自适应阈值分割算法实现,poYBAGEiCNiAOxaEAAASebm2IEQ609.png,第4张

因此,我们可以把FPGA实现分成2个部分实现,一个是左边的不等式计算,一个是右边不等式计算。两者都要使用当前窗口内的计算的像素均值u,如下FPGA实现原理图:

左边不等式:由于均值计算需要一定延时;因此,需要把当前像素数据raw_data Delay后再与Mean_cal 计算的均值u 相减,然后平方(Square)最后乘以窗口像素个数225(15x15),从而完成左边不等式的计算。

最后,两边不等式比较得到阈值分割结果。

如下如所示,是matlab和modelsim 联合仿真的结果,左边是灰度原图,右边是基于Verilog算法之后 matlab 复现图,可以看出分割的效果还不错.

基于FPGA的自适应阈值分割算法实现,poYBAGEiCXmAfrwOAABvwsSvSww185.png,第5张

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2430305.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-02
下一篇 2022-08-02

发表评论

登录后才能评论

评论列表(0条)

保存