掌桥专利:专业的专利平台
掌桥专利
首页

一种基于FPGA外置存储器的均值滤波方法及装置

文献发布时间:2023-06-19 13:46:35


一种基于FPGA外置存储器的均值滤波方法及装置

技术领域

本申请涉及图像处理技术领域,尤其涉及一种基于FPGA外置存储器的均值滤波方法及装置。

背景技术

在采集图像过程中,常常会收到不希望出现的信号的干扰,这些干扰图像质量的信号就是图像噪声。例如在低照度下通过相机摄取图像时,由于光照太暗,造成摄取的图像不会太清晰。若想获得较清晰的图像,可以通过提高曝光时间和增益实现,但是这样做又会导致图像中出现大量的随机噪声,而随机噪声会降低图像的质量和精度。

为了实现对含随机噪声的图像进行降噪,需要采用降噪算法实现,例如均值滤波算法。

均值滤波是一种针对图像的滤波方法,按照该方法,预先针对图像上的目标像素点(通常为滤波窗口中心的像素点)给一个一定尺寸的滤波窗口,在滤波窗口中,有目标像素点及周围的临近像素点,再用滤波窗口中的全体像素点灰度值的平均值来代替该窗口内目标像素点的灰度值。进一步地,令滤波窗口在图像上逐像素点进行滑动窗口算法处理,对所有像素点滑动窗口算法处理完的结果即为均值滤波后的图像结果。

均值滤波可以基于硬件平台来实现,例如可以基于FPGA(Field ProgrammableGate Array,现场可编程逻辑门阵列)来实现。基于FPGA实现均值滤波时,需要存储一定行数的图像数据至FPGA内嵌的可配置存储器BRAM。

在均值滤波数据存储时,根据图像分辨率大小以及预设均值滤波窗口尺寸的不同,BRAM的占用量也不相同。对于图像分辨率大以及预设均值滤波窗口尺寸大的情况,则需要很多的BRAM,例如,图像水平分辨率为2048,预设均值滤波窗口为5×5,则需要8个BRAM,预设均值滤波窗口为15×15,则需要28个BRAM,图像水平分辨率为8192,预设均值滤波窗口为5×5,则需要32个BRAM,预设均值滤波窗口为15×15,则需要112个BRAM。均值滤波时,由于每个预设均值滤波窗口的均值滤波数据为将该预设均值滤波窗口内的像素点灰度值依次累加得到的值的平均值,预设均值滤波窗口越大,依次累加处理的数据量越大,同时,图像分辨率越大,占用的BRAM个数越多,其中,预设均值滤波窗口大小可以为3*3、5*5、7*7、9*9、11*11、13*13、15*15……(2n+1)*(2n+1),其中,两个2n+1分别指预设均值滤波窗口的水平方向尺寸和预设均值滤波窗口的垂直方向尺寸。

然而,FPGA中内嵌的BRAM个数是有限的,在针对图像高分辨率较大的图像均值滤波时,且其均值滤波窗口比较大时,可能出现BRAM不够存储的情况。

发明内容

本申请提供了一种基于FPGA外置存储器的均值滤波方法及装置,可以适应任意图像分辨率、任意滤波窗口尺寸的情况,具有均值滤波时不占用FPGA内部存储器BRAM,且采用递归累加计算方法大大降低了数据运算量,运算量不随滤波窗口变化而变化的优势。

本申请采用的技术方案如下:

本发明公开一种基于FPGA外置存储器的均值滤波方法,所述方法包括:

在所述FPGA外置存储器中分配大于等于待处理图像分辨率的地址空间,若所述待处理图像的像素点为n*m个,则所述地址空间可存储的像素的大小为大于等于n*m,n表示n行,m表示m列;

获取所述待处理图像每行像素点灰度值的第一累加和,所述第一累加和为将该行每个像素点依次作为中心像素点逐第一滤波窗口滑动重新得到的新像素点灰度值,所述新像素点灰度值包括将每个第一滤波窗口内像素点灰度值的累加和作为该窗口内的中心像素点得到的像素点灰度值,所述第一滤波窗口的尺寸为预设均值滤波窗口的水平方向尺寸;

将每行所述第一累加和依次写入所述地址空间;

从所述地址空间中读取所述第一累加和,并进行第一转置处理,所述第一转置处理为将每行得到的新像素点灰度值转成列,形成m*n的形式,此时,m表示m行,n表示n列;

根据经第一转置处理后的第一累加和获取待处理图像的第二累加和,所述第二累加和为将该行每个像素点依次作为中心像素点逐第二滤波窗口滑动重新得到的新像素点灰度值,所述新像素点灰度值包括将每个第二滤波窗口内像素点灰度值的累加和作为该窗口内的中心像素点得到的像素点灰度值,所述第二滤波窗口尺寸为预设均值滤波窗口的垂直方向尺寸;

将所述第二累加和写入所述地址空间并读出,进行第二次转置处理,所述第二转置处理为将所述第二累加和再转为n*m的形式;

对经第二转置处理后的第二累加和逐像素点做除法运算,得到均值滤波结果。

在一种可实现的实施方式中,将该行每个像素点依次作为中心像素点逐第一滤波窗口/第二滤波窗口滑动重新得到的新像素点灰度值,计算过程包括:

将该行每个像素点依次作为中心像素点,逐尺寸为x的第一滤波窗口/第二滤波窗口滑动重新得到新像素点的灰度值,x表示x个像素点,x大于等于3,x为奇数。

进一步地,计算将首个第一滤波窗口/第二滤波窗口内的像素点灰度值的累加和作为该窗口内中心像素点得到的像素点灰度值,包括:

将首个尺寸为x第一滤波窗口/第二滤波窗口内像素点灰度值的累加和作为所述首个第一滤波窗口/第二滤波窗口内的中心像素点的灰度值;

将所述首个第一滤波窗口/第二滤波窗口内像素点灰度值的累加和存储至所述地址空间。

进一步地,计算下一个第一滤波窗口/第二滤波窗口至最后一个第一滤波窗口/第二滤波窗口内像素点累加和作为该窗口内中心像素点得到的像素点灰度值,包括:

计算当前第一滤波窗口/第二滤波窗口内像素点的灰度值累加和,用上一个第一滤波窗口/第二滤波窗口的灰度值累加和减去上一个第一滤波窗口/第二滤波窗口内第一个像素点的灰度值,加上当前第一滤波窗口/第二滤波窗口内最后一个像素点的灰度值,即为当前第一滤波窗口/第二滤波窗口内像素点的灰度值的累加和。

进一步地,边缘数据所处的第一滤波窗口/第二滤波窗口内存在缺失数据,所述缺失数据均可以为自定义灰度值数据,也可以为复制的第一滤波窗口/第二滤波窗口内的像素点灰度值;所述边缘数据为待处理图像每行像素点中首端(x-1)/2个像素点和尾端(x-1)/2个像素点。

在一种可实现的实施方式中,所述除法运算公式为:所述均值滤波结果=第二累加和/(第一滤波窗口尺寸*第二滤波窗口尺寸)。

本发明还公开一种基于FPGA外置存储器的均值滤波装置,所述装置包括:

分配模块,所述分配模块用于在所述FPGA外置存储器中分配大于等于待处理图像分辨率的地址空间,若所述待处理图像的像素点为n*m个,则所述地址空间可存储的像素的大小为大于等于n*m,n表示n行,m表示m列;

第一获取模块,所述第一获取模块用于获取所述待处理图像每行像素点灰度值的第一累加和,所述第一累加和为将该行每个像素点依次作为中心像素点逐第一滤波窗口滑动重新得到的新像素点灰度值,所述新像素点灰度值包括将每个第一滤波窗口内像素点灰度值的累加和作为该窗口内的中心像素点得到的像素点灰度值,所述第一滤波窗口的尺寸为预设均值滤波窗口的水平方向尺寸;

写入模块,所述写入模块用于将每行所述第一累加和依次写入所述地址空间;

第一转置模块,所述第一转置模块用于从所述地址空间中读取所述第一累加和,并进行第一转置处理,所述第一转置处理为将每行得到的新像素点灰度值转成列,形成m*n的形式,此时,m表示m行,n表示n列;

第二获取模块,所述第二获取模块用于根据经第一转置处理后的第一累加和获取待处理图像的第二累加和,所述第二累加和为将该行每个像素点依次作为中心像素点逐第二滤波窗口滑动重新得到的新像素点灰度值,所述新像素点灰度值包括将每个第二滤波窗口内像素点灰度值的累加和作为该窗口内的中心像素点得到的像素点灰度值,所述第二滤波窗口尺寸为预设均值滤波窗口的垂直方向尺寸;

第二转置模块,所述第二转置模块用于将所述第二累加和写入所述地址空间并读出,进行第二次转置处理,所述第二转置处理为将所述第二累加和再转为n*m的形式;

计算模块,所述计算模块用于对经第二转置处理后的第二累加和逐像素点做除法运算,得到均值滤波结果。

在一种可实现的实施方式中,所述第一获取模块和第二获取模块均还包括获取单元,所述获取单元用于计算将该行每个像素点依次作为中心像素点逐第一滤波窗口/第二滤波窗口滑动重新得到的新像素点灰度值,包括:

将该行每个像素点依次作为中心像素点,逐尺寸为x的第一滤波窗口/第二滤波窗口滑动重新得到新像素点的灰度值,x表示x个像素点,x大于等于3,x为奇数。

进一步地,所述获取单元包括第一获取单元和第二获取单元,所述第一获取单元用于计算将首个第一滤波窗口/第二滤波窗口内的像素点灰度值的累加和作为该窗口内中心像素点得到的像素点灰度值,包括:

将首个尺寸为x第一滤波窗口/第二滤波窗口内像素点灰度值的累加和作为所述首个第一滤波窗口/第二滤波窗口内的中心像素点的灰度值;

将所述首个第一滤波窗口/第二滤波窗口内像素点灰度值的累加和存储至所述地址空间。

进一步地,所述第二获取单元用于计算下一个第一滤波窗口/第二滤波窗口至最后一个第一滤波窗口/第二滤波窗口内像素点累加和作为该窗口内中心像素点得到的像素点灰度值,包括:

计算当前第一滤波窗口/第二滤波窗口内像素点的灰度值累加和,用上一个第一滤波窗口/第二滤波窗口的灰度值累加和减去上一个第一滤波窗口/第二滤波窗口内第一个像素点的灰度值,加上当前第一滤波窗口/第二滤波窗口内最后一个像素点的灰度值,即为当前第一滤波窗口/第二滤波窗口内像素点的灰度值的累加和。

采用本申请的技术方案的有益效果如下:

本发明的一种基于FPGA外置存储器的均值滤波方法及装置,由于对FPGA外设存储器,且可在该外设存储器内中分配有与待处理图像分辨率大小匹配的地址空间,均值滤波的过程中数据存储时,就不用占用FPGA的内置存储器BRAM,直接在外置存储器中存储即可,同时,地址空间大小可随图像分辨率的大小改变,使得可以适应任意图像分辨率的图像;

进一步地,均值滤波时,先采用与预设均值滤波窗口的水平方向尺寸对应的第一滤波窗口逐每行像素点滑动重新得到第一新像素点灰度值,即每行的第一累加和,将每行的第一累加和存储于地址空间,再读取第一累加和进行第一次转置处理,再将第一次转置处理后的第一累加和采用与预设均值滤波窗口的垂直方向尺寸对应的第二滤波窗口逐每行像素点滑动重新得到第二新像素点灰度值,即每行的第二累加和,将第二累加和写入地址空间,再读取第二累加和进行第二次转置处理,对经第二次转置处理后的第二累加和逐像素点做除法运算,即可得到均值滤波结果。这种先采用与预设均值滤波窗口的水平方向尺寸对应的第一滤波窗口逐像素点滑动获取第一累加和,转置,再采用与预设均值滤波窗口的垂直方向尺寸对应的第二滤波窗口逐像素点滑动获取第二累加和,转置,然后除法运算获得待处理图像的均值滤波结果的均值滤波方式,处理数据的过程更加简单,不需要占用FPGA的内置存储资源,且由于采用递归累加和计算方法,运算量不随预设滤波窗口大小变化而变化。

附图说明

为了更清楚地说明本申请的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明一种基于FPGA外置存储器的均值滤波方法的流程图;

图2为分辨率8*7的示意图;

图3为计算图2中第一累加和的示意图;

图4为图2每行第一累加和的示意图;

图5为第一累加和转置处理后的7*8示意图;

图6为计算图5中第二累加和的示意图;

图7为图5每行第二累加和的示意图;

图8为图7每行第二累加和转置处理后的8*7示意图。

具体实施方式

下面将详细地对实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下实施例中描述的实施方式并不代表与本申请相一致的所有实施方式。仅是与权利要求书中所详述的、本申请的一些方面相一致的系统和方法的示例。

由于现有技术中,基于FPGA内嵌的存储器BRAM均值滤波时,需要存储一定行数的图像数据至FPGA内嵌的可配置存储器BRAM。在均值滤波计算时,可知,每个预设均值滤波窗口的均值滤波数据为将该预设均值滤波窗口内的像素点灰度值依次累加得到的值的平均值,预设均值滤波窗口越大,依次累加处理的数据量越大,同时,图像分辨率越大,占用的BRAM个数越多。

但是,FPGA中内嵌的BRAM个数是有限的(即使最高端的FPGA其内嵌的BRAM也才五百多个),在针对分辨率较大的图像均值滤波时,且其均值滤波窗口比较大时,可能出现BRAM不够存储的情况。

那么,如果对FPGA外置存储器,将均值滤波过程中产生的数据存储至该外置存储器,而不需要消耗FPGA内部的BRAM,并改变均值滤波方式,以待能够实现适应任意图像分辨率、任意滤波窗口尺寸的情况。

因此,为实现上述目的,本申请提出了一种基于FPGA外置存储器的均值滤波方法、装置、计算机设备以及计算机可读介质,具体如下所述。

本发明的基于FPGA外置存储器的均值滤波方法,使用的FPGA的外部存储器为DDR,还可以为FLASH存储器、EMMC存储器等,其他可适用的存储器均应在本发明的保护范围内,具体不再赘述。

第一方面,参见图1,本申请提供一种基于FPGA外置存储器的均值滤波方法,该方法包括:

S01:在所述FPGA外置存储器中分配大于等于待处理图像分辨率的地址空间,若所述待处理图像的像素点为n*m个,则所述地址空间可存储的像素的大小为大于等于n*m,n表示n行,m表示m列。

S02:获取所述待处理图像每行像素点灰度值的第一累加和,所述第一累加和为将该行每个像素点依次作为中心像素点逐第一滤波窗口滑动重新得到的第一新像素点灰度值,所述第一新像素点灰度值包括将每个第一滤波窗口内像素点灰度值的累加和作为该窗口内的中心像素点得到的像素点灰度值,其中,所述第一滤波窗口的尺寸为预设均值滤波窗口的水平方向尺寸。

以下对步骤S02进行进一步展开说明:

步骤S02中,将该行每个像素点依次作为中心像素点,逐尺寸为x的第一滤波窗口/第二滤波窗口滑动重新得到第一新像素点灰度值,x表示x个像素点,x大于等于3,x为奇数。

进一步地,计算每行的每个第一滤波窗口内像素点灰度值的累加和作为该窗口内的中心像素点得到的第一像素点灰度值,包括:首个第一滤波窗口内的像素点灰度值的累加和作为该窗口内中心像素点得到的像素点灰度值以及下一个第一滤波窗口至最后一个第一滤波窗口内像素点累加和作为该窗口内中心像素点得到的像素点灰度值。

边缘数据定义为图像中首端(x-1)/2个像素点和尾端(x-1)/2个像素点,其余像素点定义为中心数据。

其中,边缘数据及中心首个数据的累加和计算是将第一滤波窗口内的像素点灰度值的累加和作为该窗口内中心像素点得到的像素点灰度值,具体包括:

将滤波尺寸为x的第一滤波窗口内像素点灰度值的累加和作为边缘数据及中心首个数据第一滤波窗口内的中心像素点的灰度值;

将所述边缘数据及中心首个第一滤波窗口内像素点灰度值的累加和存储至所述地址空间。

另外,计算中心下一个第一滤波窗口至中心最后一个第一滤波窗口内像素点累加和作为该窗口内中心像素点得到的像素点灰度值,具体包括:

计算当前第一滤波窗口内像素点的灰度值累加和,用上一个第一滤波窗口的灰度值累加和减去上一个第一滤波窗口内第一个像素点的灰度值,加上当前第一滤波窗口内最后一个像素点的灰度值,即为当前第一滤波窗口内像素点的灰度值的累加和。

其中,边缘数据的第一滤波窗口存在缺失数据,该缺失数据均可以为自定义灰度值数据,也可以为复制第一滤波窗口内的其他像素点灰度值。

这里为便于理解,如图2所示,以分辨率8*7为例,其中,如图3所示,获取第一行D11~D18像素点灰度值的第一累加和,进一步地,第一行中D11和D12为图像首端的边缘数据,D17和D18为图像尾端的边缘数据,第一行中W1和W2为滤波窗口内的缺失数据,D13~D16为中心数据,过程如下:

预设预设均值滤波窗口的尺寸为5*5,则此处均值滤波采用预设均值滤波窗口的水平方向尺寸,即为5。

以D11为中心像素点,将D12和D13的像素点灰度值依次作为滤波窗口的第4个数W4和第5个数W5,滤波窗口内缺失的第1个数W1可以是自定义的灰度值,也可以是复制D13的像素点灰度值,滤波窗口内缺失的第2个数W2可以是自定义的灰度值,也可以是复制D12的像素点灰度值,将滤波窗口内的5个数的像素点灰度值累加,得到Sum_w1,用Sum_w1代替D11得到第一个新像素点灰度值,即E11;

以D12为中心像素点,将D11和D13~D14的像素点灰度值依次作为滤波窗口的第2个数W2、第4个数W4和第5个数W5,滤波窗口内缺失的第1个数W1可以是自定义的灰度值,也可以是复制D14的像素点灰度值,将滤波窗口内的5个数的像素点灰度值累加,得到Sum_w2,用Sum_w2代替D12得到第二个新像素点灰度值,即E12;

以D13为中心像素点,将D11~D15的像素点灰度值依次作为滤波窗口的第1个数W1~第5个数W5,将滤波窗口内的5个数的像素点灰度值累加,得到Sum_w3,用Sum_w3代替D13得到第三个新像素点灰度值,即E13,同时保存滤波窗口的第一个数W1为W1’,用于下一个滤波窗口的计算;

以D14为中心像素点,将D16的像素点灰度值作为滤波窗口的第5个数W5,得到Sum_w4=Sum_w3-W1’+W5,用Sum_w4代替D14得到第四个新像素点灰度值,即E14,同时保存滤波窗口的第一个数W1为W1’,用于下一个滤波窗口的计算;

以D15为中心像素点,将D17的像素点灰度值作为滤波窗口的第5个数W5,得到Sum_w5=Sum_w4-W1’+W5,用Sum_w5代替D15得到第五个新像素点灰度值,即E15,同时保存滤波窗口的第一个数W1为W1’,用于下一个滤波窗口的计算;

以D16为中心像素点,将D18的像素点灰度值作为滤波窗口的第5个数W5,得到Sum_w6=Sum_w5-W1’+W5,用Sum_w6代替D16得到第六个新像素点灰度值,即E16;

以D17为中心像素点,将D15~D16和D18的像素点灰度值依次作为滤波窗口的第1个数W1、第2个数W2和第4个数W4,滤波窗口内缺失的第5个数W5可以是自定义的灰度值,也可以是复制D15的像素点灰度值,将滤波窗口内的5个数的像素点灰度值累加,得到Sum_w7,用Sum_w7代替D17得到第七个新像素点灰度值,即E17;

以D18为中心像素点,将D16和D17的像素点灰度值依次作为滤波窗口的第1个数W1和第2个数W2,滤波窗口内缺失的第4个数可以是自定义的灰度值,也可以是复制D17的像素点灰度值,滤波窗口内缺失的第5个数W5可以是自定义的灰度值,也可以是复制D16的像素点灰度值,将滤波窗口内的5个数的像素点灰度值累加,得到Sum_w8,用Sum_w8代替D18得到第八个新像素点灰度值,即E18;

即D11~D18的第一累加和包括上述的第一个新像素点灰度值、第二个新像素点灰度值、第三个新像素点灰度值、第四个新像素点灰度值、第五个新像素点灰度值、第六个新像素点灰度值、第七个新像素点灰度值、第八个新像素点灰度值,即E11、E12、E13、E14、E15、E16、E17、E18。

以此类推,依次得到D11~D18、D22~D28、D32~D38、D41~D48、D51~D61、D61~D71、D71~D78的每一行的第一累加和,如图4所示,即E11~E18、E21~E28、E31~E38、E41~E48、E51~E58、E61~E68、E71~E78。

S03:将每行所述第一累加和依次写入所述地址空间。

同样,按照步骤S02中例子将每一行的第一累加和写入地址空间,即将E11~E18、E21~E28、E31~E38、E41~E48、E51~E58、E61~E68、E71~E78依次写入地址空间。

S04:从所述地址空间中读取所述第一累加和,并进行第一转置处理,所述第一转置处理为将每行得到的新像素点灰度值转成列,形成m*n的形式,此时,m表示m行,n表示n列。

进一步地,按照步骤S02中的例子从地址空间中读取E11~E18、E21~E28、E31~E38、E41~E48、E51~E58、E61~E68、E71~E78,并转置为7*8的形式,如图5所示,即E11~E71、E12~E72、E13~E73、E14~E74、E15~E75、E16~E76、E17~E78。

S05:根据经第一转置处理后的第一累加和获取待处理图像的第二累加和,所述第二累加和为将该行每个像素点依次作为中心像素点逐第二滤波窗口滑动重新得到的第二新像素点灰度值,所述第二新像素点灰度值包括将每个第二滤波窗口内像素点灰度值的累加和作为该窗口内的中心像素点得到的像素点灰度值,所述第二滤波窗口尺寸为预设均值滤波窗口的垂直方向尺寸。

步骤S05的处理步骤与步骤S02的处理步骤相同,具体为对步骤S05进行进一步展开说明:

步骤S05中,将该行每个像素点依次作为中心像素点,逐尺寸为x的第一滤波窗口/第二滤波窗口滑动重新得到第二新像素点的灰度值。

进一步地,计算每行的每个第二滤波窗口内像素点灰度值的累加和作为该窗口内的中心像素点得到的第二像素点灰度值,包括:首个第二滤波窗口内的像素点灰度值的累加和作为该窗口内中心像素点得到的像素点灰度值以及下一个第二滤波窗口至最后一个第二滤波窗口内像素点累加和作为该窗口内中心像素点得到的像素点灰度值。

其中,边缘数据及中心首个数据的累加和计算是将第二滤波窗口内的像素点灰度值的累加和作为该窗口内中心像素点得到的像素点灰度值,具体包括:

将滤波尺寸为x的第二滤波窗口内像素点灰度值的累加和作为边缘数据及中心首个数据第二滤波窗口内的中心像素点的灰度值;

将边缘数据及中心首个数据第二滤波窗口内像素点灰度值的累加和存储至所述地址空间。

另外,计算中心下一个第二滤波窗口至中心最后一个第二滤波窗口内像素点累加和作为该窗口内中心像素点得到的像素点灰度值,具体包括:

计算当前第二滤波窗口内像素点的灰度值累加和,用上一个第二滤波窗口的灰度值累加和减去上一个第二滤波窗口内第二个像素点的灰度值,加上当前第二滤波窗口内最后一个像素点的灰度值,即为当前第二滤波窗口内像素点的灰度值的累加和。

其中,边缘数据的第二滤波窗口内存在缺失数据,该缺失数据均可以为自定义灰度值数据,也可以为复制第二滤波窗口内的像素点灰度值。

获取第一行E11~E18像素点灰度值的第二累加和,过程如下:

预设预设均值滤波窗口的尺寸为5*5,则此处均值滤波采用预设均值滤波窗口的垂直方向尺寸,即为5。

如图6所示,以E11为中心像素点,将E21和E31的像素点灰度值依次作为滤波窗口的第4个数W4和第5个数W5,滤波窗口内缺失的第1个数W1可以是自定义的灰度值,也可以是复制E31的像素点灰度值,滤波窗口内缺失的第2个数W2可以是自定义的灰度值,也可以是复制E21的像素点灰度值,将滤波窗口内的5个数的像素点灰度值累加,得到Sum_w1,用Sum_w1代替E11得到第一个新像素点灰度值,即F11;

以E21为中心像素点,将E11和E31~E41的像素点灰度值依次作为滤波窗口的第2个数W2、第4个数W4和第5个数W5,滤波窗口内缺失的第1个数W1可以是自定义的灰度值,也可以是复制E41的像素点灰度值,将滤波窗口内的5个数的像素点灰度值累加,得到Sum_w2,用Sum_w2代替E21得到第二个新像素点灰度值,即F12;

以E31为中心像素点,将E11~E51的像素点灰度值依次作为滤波窗口的第1个数W1~第5个数W5,将滤波窗口内的5个数的像素点灰度值累加,得到Sum_w3,用Sum_w3代替E31得到第三个新像素点灰度值,即F31,同时保存滤波窗口的第一个数W1为W1’,用于下一个滤波窗口的计算;

以E41为中心像素点,将E61的像素点灰度值作为滤波窗口的第5个数W5,得到Sum_w4=Sum_w3-W1’+W5,用Sum_w4代替E41得到第四个新像素点灰度值,即F41,同时保存滤波窗口的第一个数W1为W1’,用于下一个滤波窗口的计算;

以E51为中心像素点,将E71的像素点灰度值作为滤波窗口的第5个数W5,得到Sum_w5=Sum_w4-W1’+W5,用Sum_w5代替E51得到第五个新像素点灰度值,即F51;

以E61为中心像素点,将E41~E51和E71的像素点灰度值依次作为滤波窗口的第1个数W1、第2个数W2和第4个数W4,滤波窗口内缺失的第5个数W5可以是自定义的灰度值,也可以是复制E41的像素点灰度值,将滤波窗口内的5个数的像素点灰度值累加,得到Sum_w6,用Sum_w6代替E61得到第六个新像素点灰度值,即F61;

以E71为中心像素点,将E51~E61依次作为滤波窗口的第1个数W1和第2个数W2,滤波窗口内缺失的第4个数可以是自定义的灰度值,也可以是复制E61的像素点灰度值,滤波窗口内缺失的第5个数W5可以是自定义的灰度值,也可以是复制E51的像素点灰度值,将滤波窗口内的5个数的像素点灰度值累加,得到Sum_w7,用Sum_w7代替E71得到第七个新像素点灰度值,即F71;

即E11~E71的第二累加和包括上述的第一个新像素点灰度值、第二个新像素点灰度值、第三个新像素点灰度值、第四个新像素点灰度值、第五个新像素点灰度值、第六个新像素点灰度值、第七个新像素点灰度值,即F11、F21、F31、F41、F51、F61、F71。

以此类推,得到E11~E71、E12~E72、E13~E73、E14~E74、E15~E75、E16~E76、E17~E18的每一行的第一二累加和,如图7所示,即F11~F71、F12~F72、F13~F73、F14~F74、F15~F75、F16~F76、F17~F77、F18~F78。

S06:将第二累加和写入所述地址空间并读出,进行第二次转置处理,所述第二转置处理为将所述第二累加和再转为n*m的形式。

同样,按照步骤S05中例子将每一行的第一累加和写入地址空间,即将F11~F71、F12~F72、F13~F73、F14~F74、F15~F75、F16~F76、F17~F77、F18~F78依次写入地址空间。

进一步地,从地址空间中读取F11~F71、F12~F72、F13~F73、F14~F74、F15~F75、F16~F76、F17~F77、F18~F78,并重新转置为8*7的形式,如图8所示,即M11~M18、M22~M28、M32~M38、M41~M48、M51~M61、M61~M71、M71~M78。

S07:对经第二转置处理后的第二累加和逐像素点做除法运算,得到均值滤波结果。

其中,步骤S07中的除法运算公式为:所述均值滤波结果=第二累加和/(第一滤波窗口尺寸*第二滤波窗口尺寸)。

以上例子,则步骤S07的均值滤波结果=M11~M18、M22~M28、M32~M38、M41~M48、M51~M61、M61~M71、M71~M78/(5*5)。

本发明的一种基于FPGA外置存储器的均值滤波方法,对FPGA外设存储器,且可在该外设存储器内中分配有大于等于待处理图像分辨率大小匹配的地址空间,均值滤波的过程中数据存储时,就不用占用FPGA的内置存储器BRAM,直接在外置存储器中存储即可。

进一步地,均值滤波时,先采用与预设均值滤波窗口的水平方向尺寸对应的第一滤波窗口逐每行像素点滑动重新得到第一新像素点灰度值,即每行的第一累加和,将每行的第一累加和存储于地址空间,再读取第一累加和进行第一次转置处理,再将第一次转置处理后的第一累加和采用与预设均值滤波窗口的垂直方向尺寸对应的第二滤波窗口逐每行像素点滑动重新得到第二新像素点灰度值,即每行的第二累加和,将第二累加和写入地址空间,再读取第二累加和进行第二次转置处理,对经第二次转置处理后的第二累加和逐像素点做除法运算,即可得到均值滤波结果。这种均值滤波方式,处理数据的过程更加简单,存储时占用的地址空间较少,且由于地址空间大小与图像分辨率大小匹配,地址空间不随预设滤波窗口大小变化而变化。

应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

第二方面,与前述一种基于FPGA外置存储器的均值滤波方法的实施例相对应,本申请还提供了一种基于FPGA外置存储器的均值滤波装置,该装置包括:

分配模块,分配模块用于在所述FPGA外置存储器中分配大于等于待处理图像分辨率的地址空间,若所述待处理图像的像素点为n*m个,则所述地址空间可存储的像素的大小为大于等于n*m,n表示n行,m表示m列;

第一获取模块,第一获取模块用于获取所述待处理图像每行像素点灰度值的第一累加和,所述第一累加和为将该行每个像素点依次作为中心像素点逐第一滤波窗口滑动重新得到的新像素点灰度值,所述新像素点灰度值包括将每个第一滤波窗口内像素点灰度值的累加和作为该窗口内的中心像素点得到的像素点灰度值,所述第一滤波窗口的尺寸为预设均值滤波窗口的水平方向尺寸;

写入模块,写入模块用于将每行所述第一累加和依次写入所述地址空间;

第一转置模块,第一转置模块用于从所述地址空间中读取所述第一累加和,并进行第一转置处理,所述第一转置处理为将每行得到的新像素点灰度值转成列,形成m*n的形式,此时,m表示m行,n表示n列;

第二获取模块,第二获取模块用于根据经第一转置处理后的第一累加和获取待处理图像的第二累加和,所述第二累加和为将该行每个像素点依次作为中心像素点逐第二滤波窗口滑动重新得到的新像素点灰度值,所述新像素点灰度值包括将每个第二滤波窗口内像素点灰度值的累加和作为该窗口内的中心像素点得到的像素点灰度值,所述第二滤波窗口尺寸为预设均值滤波窗口的垂直方向尺寸;

第二转置模块,第二转置模块用于将所述第二累加和写入所述地址空间并读出,进行第二次转置处理,所述第二转置处理为将所述第二累加和再转为n*m的形式;

计算模块,计算模块用于对经第二转置处理后的第二累加和逐像素点做除法运算,得到均值滤波结果。

在一种可实现的实施方式中,所述第一获取模块和第二获取模块均还包括获取单元,所述获取单元用于计算将该行每个像素点依次作为中心像素点逐第一滤波窗口/第二滤波窗口滑动重新得到的新像素点灰度值,包括:

将该行每个像素点依次作为中心像素点,逐尺寸为x的第一滤波窗口/第二滤波窗口滑动重新得到新像素点的灰度值,x表示x个像素点,x大于等于3,x为奇数。

在一种可实现的实施方式中,所述获取单元包括第一获取单元和第二获取单元,所述第一获取单元用于计算将首个第一滤波窗口/第二滤波窗口内的像素点灰度值的累加和作为该窗口内中心像素点得到的像素点灰度值,包括:

将首个尺寸为x第一滤波窗口/第二滤波窗口内像素点灰度值的累加和作为所述首个第一滤波窗口/第二滤波窗口内的中心像素点的灰度值;

将所述首个第一滤波窗口/第二滤波窗口内像素点灰度值的累加和存储至所述地址空间。

在一种可实现的实施方式中,所述第二获取单元用于计算下一个第一滤波窗口/第二滤波窗口至最后一个第一滤波窗口/第二滤波窗口内像素点累加和作为该窗口内中心像素点得到的像素点灰度值,包括:

计算当前第一滤波窗口/第二滤波窗口内像素点的灰度值累加和,用上一个第一滤波窗口的第一累加和/第二滤波窗口的第二累加和减去上一个第一滤波窗口/第二滤波窗口内第一个像素点的灰度值,加上当前第一滤波窗口/第二滤波窗口内最后一个像素点的灰度值,即为当前第一滤波窗口/第二滤波窗口内像素点的灰度值的累加和。

在一种可实现的实施方式中,计算模块用于对经第二转置处理后的第二累加和逐像素点做除法运算,得到均值滤波结果。

其中,所述除法运算公式为:所述均值滤波结果=第二累加和/(第一滤波窗口尺寸*第二滤波窗口尺寸)。

具体关于一种基于FPGA外置存储器的均值滤波装置的限定可以参见上文中一种基于FPGA外置存储器的均值滤波方法的限定,在此不多做赘述。另外,上述基于FPGA外置存储器的均值滤波装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

作为第三方面,本发明还公开了一种计算机设备,该计算机设备可以是服务器。该计算机设备包括:一个或多个处理器;存储器,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或者多个处理器实现以下步骤:在所述FPGA外置存储器中分配大于等于待处理图像分辨率的地址空间,若所述待处理图像的像素点为n*m个,则所述地址空间可存储的像素的大小为大于等于n*m,n表示n行,m表示m列;获取所述待处理图像每行像素点灰度值的第一累加和,第一累加和为将该行每个像素点依次作为中心像素点逐第一滤波窗口滑动重新得到的新像素点灰度值,新像素点灰度值包括将每个第一滤波窗口内像素点灰度值的累加和作为该窗口内的中心像素点得到的像素点灰度值,第一滤波窗口的尺寸为预设均值滤波窗口的水平方向尺寸;将每行所述第一累加和依次写入所述地址空间;从地址空间中读取所述第一累加和,并进行第一转置处理,第一转置处理为将每行得到的新像素点灰度值转成列,形成m*n的形式,此时,m表示m行,n表示n列;根据经第一转置处理后的第一累加和获取待处理图像的第二累加和,第二累加和为将该行每个像素点依次作为中心像素点逐第二滤波窗口滑动重新得到的新像素点灰度值,新像素点灰度值包括将每个第二滤波窗口内像素点灰度值的累加和作为该窗口内的中心像素点得到的像素点灰度值,第二滤波窗口尺寸为预设均值滤波窗口的垂直方向尺寸;将第二累加和写入地址空间并读出,进行第二次转置处理,第二转置处理为将所述第二累加和再转为n*m的形式;对经第二转置处理后的第二累加和逐像素点做除法运算,得到均值滤波结果。

作为第四方面,本发明还公开了一种计算机可读介质,其上存储有计算机程序,该计算机可读介质可以是上述实施例中描述的设备中所包含的,也可以是单独存在,而未装配入该设备中。上述程序被处理器执行以下步骤:在所述FPGA外置存储器中分配大于等于待处理图像分辨率的地址空间,若所述待处理图像的像素点为n*m个,则所述地址空间可存储的像素的大小为大于等于n*m,n表示n行,m表示m列;获取所述待处理图像每行像素点灰度值的第一累加和,第一累加和为将该行每个像素点依次作为中心像素点逐第一滤波窗口滑动重新得到的新像素点灰度值,新像素点灰度值包括将每个第一滤波窗口内像素点灰度值的累加和作为该窗口内的中心像素点得到的像素点灰度值,第一滤波窗口的尺寸为预设均值滤波窗口的水平方向尺寸;将每行第一累加和依次写入地址空间;从地址空间中读取所述第一累加和,并进行第一转置处理,所述第一转置处理为将每行得到的新像素点灰度值转成列,形成m*n的形式,此时,m表示m行,n表示n列;根据经第一转置处理后的第一累加和获取待处理图像的第二累加和,第二累加和为将该行每个像素点依次作为中心像素点逐第二滤波窗口滑动重新得到的新像素点灰度值,所述新像素点灰度值包括将每个第二滤波窗口内像素点灰度值的累加和作为该窗口内的中心像素点得到的像素点灰度值,第二滤波窗口尺寸为预设均值滤波窗口的垂直方向尺寸;将所述第二累加和写入地址空间并读出,进行第二次转置处理,第二转置处理为将第二累加和再转为n*m的形式;对经第二转置处理后的第二累加和逐像素点做除法运算,得到均值滤波结果。

需要说明的是,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个....”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅是本申请的具体实施方式,使本领域技术人员能够理解或实现本申请。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

应当理解的是,本申请并不局限于上面己经描述并在附图中示出的内容,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。

相关技术
  • 一种基于FPGA外置存储器的均值滤波方法及装置
  • 基于FPGA的低成本无外置存储器的图像数据采集传输系统
技术分类

06120113806612