CN108765341B - 一种图像处理的方法及其装置 - Google Patents
一种图像处理的方法及其装置 Download PDFInfo
- Publication number
- CN108765341B CN108765341B CN201810532431.0A CN201810532431A CN108765341B CN 108765341 B CN108765341 B CN 108765341B CN 201810532431 A CN201810532431 A CN 201810532431A CN 108765341 B CN108765341 B CN 108765341B
- Authority
- CN
- China
- Prior art keywords
- line
- cnt
- round
- ram
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000003672 processing method Methods 0.000 title abstract description 4
- 238000001914 filtration Methods 0.000 claims abstract description 76
- 238000012545 processing Methods 0.000 claims description 17
- 238000000034 method Methods 0.000 claims description 16
- 101150069124 RAN1 gene Proteins 0.000 claims description 6
- 230000003139 buffering effect Effects 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000013500 data storage Methods 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T5/00—Image enhancement or restoration
- G06T5/70—Denoising; Smoothing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/10—Image acquisition modality
- G06T2207/10016—Video; Image sequence
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/20—Special algorithmic details
- G06T2207/20024—Filtering details
- G06T2207/20032—Median filtering
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Image Processing (AREA)
Abstract
本申请提供了一种图像处理的方法,方法包括:将当前帧的前(N‑1)/2行,后(N‑1)/2行的所有像素点和其他行的前(N‑1)/2列和(N‑1)/2列的像素点逐行依次写入FIFO_SP;将第1行的前N列数据到最后一行的前N列数据逐行依次写入FIFO_NL中;将将所有行的第N+1个像素点到最后一个像素点写入RAM_0至RAM_N‑1中;从所述FIFO_SP、所述FIFO_NL和所述RAM_0至所述RAM_N‑1中读取数据,确定所述当前帧的每一个滤波像素块,所述滤波像素块大小为N*N,其中,N为大于1的奇数。
Description
技术领域
本申请涉及图像处理领域,并且更具体地,涉及一种图像处理的方法及其装置。
背景技术
中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域(N*N)中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。
对于整帧图像来说,需要连续完成N*N像素块的中值滤波,才可以实现整帧图像的实时中值滤波。对于视频图像的滤波而言,更需要实时滤波才满足需求。
硬件实现中值滤波的传统做法是购买专门的滤波芯片,但是成本较高,不利用项目成本的控制,并且对于安全性要求较高的项目。
发明内容
本申请提供一种图像处理的方法,能够进行图像的中值滤波。
第一方面,提供了一种图像处理的方法,方法包括:将当前帧的前(N-1)/2行,后(N-1)/2行的所有像素点和其他行的前(N-1)/2列和(N-1)/2列的像素点逐行依次写入FIFO_SP;第1行的前N列数据到最后一行的前N列数据逐行依次写入FIFO_NL中;将所有行的第N+1个像素点到最后一个像素点写入RAM_0至RAM_N-1中,具体如下:将所述当前帧第0行,第N行,第2N行,3N行,……的第N+1个像素点到最后一个像素点写入ram_0;将所述当前帧第1行,第N+1行,第2N+1行,3N+1,……的第N+1个像素点到最后一个像素点写入ram_1;将所述当前帧第2行,第N+2行,第2N+2行,3N+2,……的第N+1个像素点到最后一个像素点写入ram_2,……,直到将第N-1行,第2N-1行,第(3N-1)行,第(4N-1)行……的第N+1个像素点到最后一个像素点写入写进ram_N-1;从所述FIFO_SP、所述FIFO_NL和所述RAM_0至所述RAM_N-1中读取数据,确定所述当前帧的每一个滤波像素块,所述滤波像素块大小为N*N,其中,N为大于1的奇数。
结合第一方面,在第一方面的第一种可能的实现方式中,所述从所述FIFO_SP、所述FIFO_NL和所述RAM_0至所述RAM_N-1中读取数据,确定所述当前帧的每一个滤波像素块,包括:当所述第i个像素块为前N列和前N行的像素组成的像素块时,从所述FIFO_NL读取所述第i个像素块的数据;当第i个像素块同时包括前N列的数据和不位于前N列的数据时,从所述FIFO_NL中读取所述第i个像素中位于所述前N列的数据,从所述RAM_0至所述RAM_N-1中读取不位于所述前N列的数据;当第i个像素块仅包括不位于前N列的数据时,从所述RAM_0至所述RAM_N-1中读取数据。
结合第一方面及其上述实现方式,在第一方面的第二种可能的实现方式中,所述从RAM_0至所述RAM_N-1中读取数据,包括:当从RAM_0中读取数据时,滤波行数round_in_cnt=0时,ram0的读取地址为ram0_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N),其中,cur_column为滤波的行号,round_cnt为滤波轮数统计,(cur_line–(N-1)/2)|N,其中,/表示取整操作,round_cnt表示滤波轮数,round_cnt的初始值为0,每完成N行滤波,round_cnt的数值加1,round_in_cnt=(cur_line–(N-1)/2)%N,%表示取余操作,LINE_LENGTH_MINUS_N表示一行像素的总个数减N;滤波行数为round_in_cnt=([1--(N-1)])时,ram0的读取地址为ram0_rd_addr=(cur_column–(N-1)/2)+((round_cnt+1)*LINE_LENGTH_MINUS_N);当从RAM_1中读取数据时:滤波行数round_in_cnt=0或1时:ram1_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N);round_in_cnt=([2--(N-1)])时,ram1_rd_addr=(cur_column–(N-1)/2)+((round_cnt+1)*LINE_LENGTH_MINUS_N);当从RAM_M的读地址:round_in_cnt=[0--M]时,ramM_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N),其中,M<N-1;round_in_cnt=([M+1--(N-1)])时,ramM_rd_addr=(cur_column–(N-1)/2)+((round_cnt+1)*LINE_LENGTH_MINUS_N);当从RAM_N-1中读取数据时:RamN-1_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N)。
第二方面,提供一种图像处理的装置,包括:第一缓存单元FIFO_SP,所述第一缓存单元用于将当前帧的前(N-1)/2行,后(N-1)/2行的所有像素点和其他行的前(N-1)/2列和(N-1)/2列的像素点逐行依次写入FIFO_SP;第二缓存单元FIFO_NL,所述第二缓存单元FIFO_NL用于将第1行的前N列数据到最后一行的前N列数据逐行依次写入FIFO_NL中;第三缓存单元,所述第三缓存单元包括RAM_0至RAM_N-1共计N个RAM,所述第三缓存单元用于将所有行的第N+1个像素点到最后一个像素点写入RAM_0至RAM_N-1中,具体如下:将所述当前帧第0行,第N行,第2N行,3N行,……的第N+1个像素点到最后一个像素点写入ram_0;将所述当前帧第1行,第N+1行,第2N+1行,3N+1,……的第N+1个像素点到最后一个像素点写入ram_1;将所述当前帧第2行,第N+2行,第2N+2行,3N+2,……的第N+1个像素点到最后一个像素点写入ram_2,……,直到将第N-1行,第2N-1行,第(3N-1)行,第(4N-1)行……的第N+1个像素点到最后一个像素点写入写进ram_N-1;处理单元,所述处理单元用于从所述FIFO_SP、所述FIFO_NL和所述RAM_0至所述RAM_N-1中读取数据,确定所述当前帧的每一个滤波像素块,所述滤波像素块大小为N*N,其中,N为大于1的奇数。
结合第二方面,在第二方面的第一种可能的实现方式中,所述处理单元用于:当所述第i个像素块为前N列和前N行的像素组成的像素块时,从所述FIFO_NL读取所述第i个像素块的数据;当第i个像素块同时包括前N列的数据和不位于前N列的数据时,从所述FIFO_NL中读取所述第i个像素中位于所述前N列的数据,从所述RAM_0至所述RAM_N-1中读取不位于所述前N列的数据;当第i个像素块仅包括不位于前N列的数据时,从所述RAM_0至所述RAM_N-1中读取数据。
结合第二方面及其上述实现方式,在第二方面的第二种可能的实现方式中,所述处理单元用于:当从RAM_0中读取数据时,滤波行数round_in_cnt=0时,ram0的读取地址为ram0_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N),其中,cur_column为滤波的行号,round_cnt为滤波轮数统计,(cur_line–(N-1)/2)|N,其中,/表示取整操作,round_cnt表示滤波轮数,round_cnt的初始值为0,每完成N行滤波,round_cnt的数值加1,round_in_cnt=(cur_line–(N-1)/2)%N,%表示取余操作,LINE_LENGTH_MINUS_N表示一行像素的总个数减N;滤波行数为round_in_cnt=([1--(N-1)])时,ram0的读取地址为ram0_rd_addr=(cur_column–(N-1)/2)+((round_cnt+1)*LINE_LENGTH_MINUS_N);当从RAM_1中读取数据时:滤波行数round_in_cnt=0或1时:ram1_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N);round_in_cnt=([2--(N-1)])时,ram1_rd_addr=(cur_column–(N-1)/2)+((round_cnt+1)*LINE_LENGTH_MINUS_N);当从RAM_M的读地址:round_in_cnt=[0--M]时,ramM_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N),其中,M<N-1;round_in_cnt=([M+1--(N-1)])时,ramM_rd_addr=(cur_column–(N-1)/2)+((round_cnt+1)*LINE_LENGTH_MINUS_N);当从RAM_N-1中读取数据时:RamN-1_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N)。
本申请实施例提出了一种实时中值滤波硬件实现方法,通过数据存储转换,合理的模块功能划分,实现图像的实时滤波,且不需要外部存储空间,节省了硬件存储资源,极大降低了项目成本。
附图说明
图1是本申请一个实施例方法的示意性流程图。
图2是本申请一个实施例的装置的示意性框图。
图3是本申请一个实施例的状态机的示意性流程图。
图4是本申请另一实施例的装置的示意性框图。
具体实施方式
下面将结合附图,对本申请中的技术方案进行描述。
在具体描述方案之前,对本申请实施例中涉及的英文缩写解释如下:
滤波尺寸:滤波尺寸N*N,表示完成中值滤波,需要从N*N的数据块(共N^2个数)中找出中值
FIFO:先入先出队列;
RAM:随机存取存储器(random access memory,RAM);
FIFO_SP:用于存储一帧图像中不需要中值滤波的像素点;
FIFO_NL:用于存储一帧图像中第N行的前N个数据到最后一行的前N个数据;
cur_line:当前要滤波的行号;
cur_column:当前要滤波的列号,与cur_line一起,唯一确定了当前要进行滤波的像素点的位置;
round_cnt:当前滤波的轮数统计,完成N行的滤波,此计数器加1,round_cnt=(cur_line–(N-1)/2)/N,其中/表示取整操作;
round_in_cnt:当前滤波的轮数中,要滤波的行号,round_in_cnt=(cur_line–(N-1)/2)%N,其中%表示取余操作;
LINE_LENGTH_MINUS_N:参数,表示一行像素的总个数减N;
ramM_rd_data:RAM_M的读返回数据,M<=N-1;
ramM_rd_addr:RAM_M的读地址,M<=N-1。
图1示出了本申请一个实施例的方法的示意性流程图,如图1所示,该方法包括:
将当前帧的前(N-1)/2行,后(N-1)/2行的所有像素点和其他行的前(N-1)/2列和(N-1)/2列的像素点逐行依次写入FIFO_SP;第1行的前N列数据到最后一行的前N列数据逐行依次写入FIFO_NL中;将所有行的第N+1个像素点到最后一个像素点写入RAM_0至RAM_N-1中,具体如下:将所述当前帧第0行,第N行,第2N行,3N行,……的第N+1个像素点到最后一个像素点写入ram_0;将所述当前帧第1行,第N+1行,第2N+1行,3N+1,……的第N+1个像素点到最后一个像素点写入ram_1;将所述当前帧第2行,第N+2行,第2N+2行,3N+2,……的第N+1个像素点到最后一个像素点写入ram_2,……,直到将第N-1行,第2N-1行,第(3N-1)行,第(4N-1)行……的第N+1个像素点到最后一个像素点写入写进ram_N-1;从所述FIFO_SP、所述FIFO_NL和所述RAM_0至所述RAM_N-1中读取数据,确定所述当前帧的每一个滤波像素块,所述滤波像素块大小为N*N,其中,N为大于1的奇数。
可选地,作为本申请一个实施例,所述从所述FIFO_SP、所述FIFO_NL和所述RAM_0至所述RAM_N-1中读取数据,确定所述当前帧的每一个滤波像素块,包括:当所述第i个像素块为前N列和前N行的像素组成的像素块时,从所述FIFO_NL读取所述第i个像素块的数据;当第i个像素块同时包括前N列的数据和不位于前N列的数据时,从所述FIFO_NL中读取所述第i个像素中位于所述前N列的数据,从所述RAM_0至所述RAM_N-1中读取不位于所述前N列的数据;当第i个像素块仅包括不位于前N列的数据时,从所述RAM_0至所述RAM_N-1中读取数据。
可选地,作为本申请一个实施例,所述从RAM_0至所述RAM_N-1中读取数据,包括:当从RAM_0中读取数据时,滤波行数round_in_cnt=0时,ram0的读取地址为ram0_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N),其中,cur_column为滤波的行号,round_cnt为滤波轮数统计,(cur_line–(N-1)/2)|N,其中,/表示取整操作,round_cnt表示滤波轮数,round_cnt的初始值为0,每完成N行滤波,round_cnt的数值加1,round_in_cnt=(cur_line–(N-1)/2)%N,%表示取余操作,LINE_LENGTH_MINUS_N表示一行像素的总个数减N;滤波行数为round_in_cnt=([1--(N-1)])时,ram0的读取地址为ram0_rd_addr=(cur_column–(N-1)/2)+((round_cnt+1)*LINE_LENGTH_MINUS_N);当从RAM_1中读取数据时:滤波行数round_in_cnt=0或1时:ram1_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N);round_in_cnt=([2--(N-1)])时,ram1_rd_addr=(cur_column–(N-1)/2)+((round_cnt+1)*LINE_LENGTH_MINUS_N);当从RAM_M的读地址:round_in_cnt=[0--M]时,ramM_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N),其中,M<N-1;round_in_cnt=([M+1--(N-1)])时,ramM_rd_addr=(cur_column–(N-1)/2)+((round_cnt+1)*LINE_LENGTH_MINUS_N);当从RAM_N-1中读取数据时:RamN-1_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N)。
图2示出了本申请一个实施例的装置的示意性框图。
如图2所示,包括FIFO_SP,FIFP_NL,RAM_0、RAM_1……RAM_N-1,状态机FSM,MUX选择器,RAM读地址产生模块RD_RAM_ADDR_GEN,RAM读数据调整模块RD_RAM_DATA_ADJ,以及取中值模块GET_MID_DATA。
本申请实施例流程如下:
1.用FIFO_SP来存储不需要中值滤波的像素点,包括前(N-1)/2行,后(N-1)/2行的所有像素点和其他行的前(N-1)/2个和后(N-1)/2个像素点;
2.用FIFO_NL来存储从第N+1行的前N个数据到最后一行的前N个数据;
3.RAM_0—RAM_N-1存储所有行的第N+1个像素点到最后一个像素点;
4.一帧图像中的最原始N*N像素块(前N行的前N列)输入到GET_MID_DATA子模块中,获得第一个中值;
5.在状态机的控制下,按照逻辑去读FIFO_SP,RAM_0-RAM_N-1,FIFO_NL;
6.将FIFO_NL和RAM中读出的数送至GET_MID_DATA子模块,组成新的NxN像素块,然后得到当前N*N块的中值;
7.MUX模块决定要输出FIFO_SP的数据还是GET_MID_DATA的数据。
具体地,方案详细过程如下:
1.当前帧的前(N-1)/2行,后(N-1)/2行的所有数据和其他行的前(N-1)/2列和(N-1)/2列的像素数据写入FIFO_SP,因为这些像素点是不需要中值滤波的;
2.将第N+1行的前N列数据直到最后一行的前N列数据,写入FIFO_NL,因为在完成上一行的中值滤波后,需要将新的一行的前N个数据,输入到GET_MID_DATA子模块中,组成新的N*N像素块,再取出当前N*N像素块的中值;
3.将所有行的第N+1个像素点到最后一个像素点写入RAM_0至RAM_N-1,其中写的规则如下:
第0---N--2N—3N--……行写进ram_0;
第1---N+1—2N+1—3N+1--……行写进ram_1;
第2---N+2—2N+2—3N+2---……行写进ram_2;
第3---N+3—2N+3—3N+3---……行写进ram_3;
………………………………………………
第N-1---2N-1—(3N-1)—(4N-1)……行写进ram_N-1。
4.在状态机的控制下,去读FIFO_SP、FIFO_NL、RAM_0-RAM_N-1中的数据,其中状态机的逻辑控制图如图3所示。
条件0:解复位;
条件1:完成1帧图像的中值滤波,即输出完最后一行的最后一个像素值,从RD_FIFO_SP中返回;
条件2:当前处理的像素点(cur_line,cur_column)如果需要滤波,则跳到FILTER状态;
条件3:当前处理的像素点(cur_line,cur_column)如果不需要滤波,则跳回到RD_FIFO_SP状态。
5.在读RAM的时候,RD_RAM_ADDR_GEN该模块产生当前要去读的RAM的地址(注意读一次就要RAM_0—RAM_N-1都读一次),然后在一个时钟周期内获得N个像素点,加快滤波速度。
读地址的产生规则如下:
RAM_0的读地址:
round_in_cnt=0时:ram0_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N)。
round_in_cnt=([1--(N-1)])时,ram0_rd_addr=(cur_column–(N-1)/2)+((round_cnt+1)*LINE_LENGTH_MINUS_N)。
RAM_1的读地址:
round_in_cnt=0/1时:ram1_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N)。
round_in_cnt=([2--(N-1)])时,ram1_rd_addr=(cur_column–(N-1)/2)+((round_cnt+1)*LINE_LENGTH_MINUS_N)。
………………………………………………………………
RAM_M的读地址:(其中M<N-1)
round_in_cnt=[0--M]时,ramM_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N)。
round_in_cnt=([M+1--(N-1)])时,ramM_rd_addr=(cur_column–(N-1)/2)+((round_cnt+1)*LINE_LENGTH_MINUS_N)。
RAM_N-1的读地址:
RamN-1_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N)。
6.从RAM获得新读出的N个像素点后,经过RD_RAM_DATA_ADJ模块,调整N个像素点的位置,然后再输入到GET_MID_DATA模块中,组成新的N*N像素块,再得到当前N*N像素块的中值。
其中数据调整的规则如下:
round_in_cnt=0时:
{ram0_rd_data,ram1_rd_data…ramN-1_rd_data}直接输入到GET_MID_DATA模块。
round_in_cnt=1时:
{ram0_rd_data,ram1_rd_data…ramN-1_rd_data}<<1--→
{ram1_rd_data…ramN-1_rd_data,ram0_rd_data},再输入到GET_MID_DATA模块。
round_in_cnt=2时:
{ram0_rd_data,ram1_rd_data…ramN-1_rd_data}<<2--→
{ram2_rd_data…ramN-1_rd_data,ram0_rd_data,ram1_rd_data},再输入到GET_MID_DATA模块。
round_in_cnt=M时:
{ram0_rd_data,ram1_rd_data…ramN-1_rd_data}<<M--→
{ramM_rd_data…ramN-1_rd_data,ram0_rd_dataram1_rd_data…ramM-1_rd_data},再输入到GET_MID_DATA模块。
round_in_cnt=N-1时:
{ram0_rd_data,ram1_rd_data…ramN-1_rd_data}<<N-1--→
{ramN-1_rd_data,ram0_rd_data,ram1_rd_data…ramN-2_rd_data},再输入到GET_MID_DATA模块。
因此,本方案利用状态机控制、巧妙的数据存储转换、合理的模块功能划分,完成了中值滤波的硬件实现,满足图像/视频的实时滤波要求。同时不需要外部的存储空间,节省了存储资源,不需要额外购买滤波IP或者是滤波芯片,极大的降低了项目成本。
图4示出了本申请另一实施例的装置的示意性框图,如图4所示,包括:
第一缓存单元FIFO_SP410,所述第一缓存单元用于将当前帧的前(N-1)/2行,后(N-1)/2行的所有像素点和其他行的前(N-1)/2列和(N-1)/2列的像素点逐行依次写入FIFO_SP;
第二缓存单元FIFO_NL420,所述第二缓存单元FIFO_NL420用于将第1行的前N列数据到最后一行的前N列数据逐行依次写入FIFO_NL中;
第三缓存单元430,所述第三缓存单元430包括RAM_0至RAM_N-1共计N个RAM,所述第三缓存单元用于将所有行的第N+1个像素点到最后一个像素点写入RAM_0至RAM_N-1中,具体如下:将所述当前帧第0行,第N行,第2N行,3N行,……的第N+1个像素点到最后一个像素点写入ram_0;将所述当前帧第1行,第N+1行,第2N+1行,3N+1,……的第N+1个像素点到最后一个像素点写入ram_1;将所述当前帧第2行,第N+2行,第2N+2行,3N+2,……的第N+1个像素点到最后一个像素点写入ram_2,……,直到将第N-1行,第2N-1行,第(3N-1)行,第(4N-1)行……的第N+1个像素点到最后一个像素点写入写进ram_N-1;
处理单元440,所述处理单元440用于从所述FIFO_SP、所述FIFO_NL和所述RAM_0至所述RAM_N-1中读取数据,确定所述当前帧的每一个滤波像素块,所述滤波像素块大小为N*N,其中,N为大于1的奇数。
可选地,作为本申请一个实施例,所述处理单元440用于:当所述第i个像素块为前N列和前N行的像素组成的像素块时,从所述FIFO_NL读取所述第i个像素块的数据;当第i个像素块同时包括前N列的数据和不位于前N列的数据时,从所述FIFO_NL中读取所述第i个像素中位于所述前N列的数据,从所述RAM_0至所述RAM_N-1中读取不位于所述前N列的数据;当第i个像素块仅包括不位于前N列的数据时,从所述RAM_0至所述RAM_N-1中读取数据。
可选地,作为本申请一个实施例,所述处理单元440用于:当从RAM_0中读取数据时,滤波行数round_in_cnt=0时,ram0的读取地址为ram0_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N),其中,cur_column为滤波的行号,round_cnt为滤波轮数统计,(cur_line–(N-1)/2)|N,其中,/表示取整操作,round_cnt表示滤波轮数,round_cnt的初始值为0,每完成N行滤波,round_cnt的数值加1,round_in_cnt=(cur_line–(N-1)/2)%N,%表示取余操作,LINE_LENGTH_MINUS_N表示一行像素的总个数减N;滤波行数为round_in_cnt=([1--(N-1)])时,ram0的读取地址为ram0_rd_addr=(cur_column–(N-1)/2)+((round_cnt+1)*LINE_LENGTH_MINUS_N);当从RAM_1中读取数据时:滤波行数round_in_cnt=0或1时:ram1_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N);round_in_cnt=([2--(N-1)])时,ram1_rd_addr=(cur_column–(N-1)/2)+((round_cnt+1)*LINE_LENGTH_MINUS_N);当从RAM_M的读地址:round_in_cnt=[0--M]时,ramM_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N),其中,M<N-1;round_in_cnt=([M+1--(N-1)])时,ramM_rd_addr=(cur_column–(N-1)/2)+((round_cnt+1)*LINE_LENGTH_MINUS_N);当从RAM_N-1中读取数据时:RamN-1_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N)。
本申请实施例提出了一种实时中值滤波硬件实现方法,通过数据存储转换,合理的模块功能划分,实现图像的实时滤波,且不需要外部存储空间,节省了硬件存储资源,极大降低了项目成本。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的***、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的***、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者第二设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (2)
1.一种图像处理的方法,其特征在于,方法包括:
将当前帧的前(N-1)/2行,后(N-1)/2行的所有像素点和其他行的前(N-1)/2列和(N-1)/2列的像素点逐行依次写入FIFO_SP;
将第1行的前N列数据到最后一行的前N列数据逐行依次写入FIFO_NL中;
将所有行的第N+1个像素点到最后一个像素点写入RAM_0至RAM_N-1中,规则如下:将所述当前帧第0行,第N行,第2N行,3N行,……的第N+1个像素点到最后一个像素点写入ram_0;将所述当前帧第1行,第N+1行,第2N+1行,3N+1,……的第N+1个像素点到最后一个像素点写入ram_1;将所述当前帧第2行,第N+2行,第2N+2行,3N+2,……的第N+1个像素点到最后一个像素点写入ram_2,……,直到将第N-1行,第2N-1行,第(3N-1)行,第(4N-1)行……的第N+1个像素点到最后一个像素点写入写进ram_N-1;
从所述FIFO_SP、所述FIFO_NL和所述RAM_0至所述RAM_N-1中读取数据,确定所述当前帧的每一个滤波像素块,具体为:当第i个像素块为前N列和前N行的像素组成的像素块时,从所述FIFO_NL读取所述第i个像素块的数据;当第i个像素块同时包括前N列的数据和不位于前N列的数据时,从所述FIFO_NL中读取所述第i个像素中位于所述前N列的数据,从所述RAM_0至所述RAM_N-1中读取不位于所述前N列的数据;当第i个像素块仅包括不位于前N列的数据时,从所述RAM_0至所述RAM_N-1中读取数据,所述滤波像素块大小为N*N,其中,N为大于1的奇数;
所述从RAM_0至所述RAM_N-1中读取数据,包括:
当从RAM_0中读取数据时,滤波行数round_in_cnt=0时,ram0的读取地址为ram0_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N),其中,cur_column为滤波的行号,round_cnt为滤波轮数,*表示乘法,round_cnt=(cur_line–(N-1)/2)/N,其中,/表示取整操作,cur_line表示当前要滤波的像素点所在的行号,round_cnt表示滤波轮数,round_cnt的初始值为0,每完成N行滤波,round_cnt的数值加1,round_in_cnt=(cur_line–(N-1)/2)%N,%表示取余操作,LINE_LENGTH_MINUS_N表示一行像素的总个数减N;
当前滤波的轮数中,要滤波的行号round_in_cnt在1至N-1区间时,ram0的读取地址为ram0_rd_addr=(cur_column–(N-1)/2)+((round_cnt+1)*LINE_LENGTH_MINUS_N);
当从RAM_1中读取数据时:滤波行数round_in_cnt=0或1时:ram1_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N);round_in_cnt在2至N-1区间时,ram1_rd_addr=(cur_column–(N-1)/2)+((round_cnt+1)*LINE_LENGTH_MINUS_N);
当从RAM_M中读取数据时:滤波行数round_in_cnt在0至M区间时,ramM 的读取地址为ramM_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N),其中,M<N-1;round_in_cnt在M+1至N-1区间时,ramM 的读取地址为ramM_rd_addr=(cur_column–(N-1)/2)+((round_cnt+1)*LINE_LENGTH_MINUS_N);
当从RAM_N-1中读取数据时:RamN-1的读取地址为RamN-1_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N)。
2.一种图像处理的装置,其特征在于,包括:
第一缓存单元FIFO_SP,所述第一缓存单元用于将当前帧的前(N-1)/2行,后(N-1)/2行
的所有像素点和其他行的前(N-1)/2列和(N-1)/2列的像素点逐行依次写入FIFO_SP;
第二缓存单元FIFO_NL,所述第二缓存单元FIFO_NL用于将第1行的前N列数据到最后一行的前N列数据逐行依次写入FIFO_NL中;
第三缓存单元,所述第三缓存单元包括RAM_0至RAM_N-1共计N个RAM,所述第三缓存单元用于将所有行的第N+1个像素点到最后一个像素点写入RAM_0至RAM_N-1中,具体如下:将所述当前帧第0行,第N行,第2N行,3N行,……的第N+1个像素点到最后一个像素点写入ram_0;将所述当前帧第1行,第N+1行,第2N+1行,3N+1,……的第N+1个像素点到最后一个像素点写入ram_1;将所述当前帧第2行,第N+2行,第2N+2行,3N+2,……的第N+1个像素点到最后一个像素点写入ram_2,……,直到将第N-1行,第2N-1行,第(3N-1)行,第(4N-1)行……的第N+1个像素点到最后一个像素点写入写进ram_N-1;处理单元,所述处理单元用于从所述FIFO_SP、所述FIFO_NL和所述RAM_0至所述RAM_N-1中读取数据,确定所述当前帧的每一个滤波像素块,所述滤波像素块大小为N*N,其中,N为大于1的奇数;
所述处理单元用于:
当第i个像素块为前N列和前N行的像素组成的像素块时,从所述FIFO_NL读取所述第i个像素块的数据;
当第i个像素块同时包括前N列的数据和不位于前N列的数据时,从所述FIFO_NL中读取所述第i个像素中位于所述前N列的数据,从所述RAM_0至所述RAM_N-1中读取不位于所述前N列的数据;
当第i个像素块仅包括不位于前N列的数据时,从所述RAM_0至所述RAM_N-1中读取数据;
当从RAM_0中读取数据时,滤波行数round_in_cnt=0时,ram0的读取地址为ram0_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N),其中,cur_column为滤波的行号,round_cnt为滤波轮数,*表示乘法,round_cnt=(cur_line–(N-1)/2)/N,其中,/表示取整操作,cur_line表示当前要滤波的像素点所在的行号,round_cnt表示滤波轮数,round_cnt的初始值为0,每完成N行滤波,round_cnt的数值加1,round_in_cnt=(cur_line–(N-1)/2)%N,%表示取余操作,LINE_LENGTH_MINUS_N表示一行像素的总个数减N;
当前滤波的轮数中,要滤波的行号round_in_cnt在1至N-1区间时,ram0的读取地址为ram0_rd_addr=(cur_column–(N-1)/2)+((round_cnt+1)*LINE_LENGTH_MINUS_N);
当从RAM_1中读取数据时:滤波行数round_in_cnt=0或1时:ram1_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N);round_in_cnt在2至N-1区间时,ram1_rd_addr=(cur_column–(N-1)/2)+((round_cnt+1)*LINE_LENGTH_MINUS_N);
当从RAM_M中读取数据时:滤波行数round_in_cnt在0至M区间时,ramM 的读取地址为ramM_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N),其中,M<N-1;round_in_cnt在M+1至N-1区间时,ramM 的读取地址为ramM_rd_addr=(cur_column–(N-1)/2)+((round_cnt+1)*LINE_LENGTH_MINUS_N);当从RAM_N-1中读取数据时:RamN-1_rd_addr=(cur_column–(N-1)/2)+(round_cnt*LINE_LENGTH_MINUS_N)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810532431.0A CN108765341B (zh) | 2018-05-29 | 2018-05-29 | 一种图像处理的方法及其装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810532431.0A CN108765341B (zh) | 2018-05-29 | 2018-05-29 | 一种图像处理的方法及其装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108765341A CN108765341A (zh) | 2018-11-06 |
CN108765341B true CN108765341B (zh) | 2022-06-21 |
Family
ID=64003677
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810532431.0A Active CN108765341B (zh) | 2018-05-29 | 2018-05-29 | 一种图像处理的方法及其装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108765341B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109767380B (zh) * | 2018-12-12 | 2023-01-13 | 中国航空工业集团公司西安航空计算技术研究所 | 一种图形处理器图像缩放电路及方法 |
CN113221862B (zh) * | 2021-07-08 | 2021-10-15 | 索思(苏州)医疗科技有限公司 | 数据滤波方法、装置、电子设备及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101599167A (zh) * | 2008-06-03 | 2009-12-09 | 株式会社理光 | 存储器的存取方法 |
CN102647594A (zh) * | 2012-04-18 | 2012-08-22 | 北京大学 | 一种整像素精度运动估计方法及其*** |
CN103793873A (zh) * | 2014-01-26 | 2014-05-14 | 大唐移动通信设备有限公司 | 图像像素中值的获取方法和装置 |
CN104050635A (zh) * | 2014-05-30 | 2014-09-17 | 北京理工大学 | 一种模板尺寸可变的图像非线性滤波实时处理***及方法 |
CN104539964A (zh) * | 2012-01-06 | 2015-04-22 | 索尼公司 | 图像处理装置和方法 |
CN105373494A (zh) * | 2015-12-01 | 2016-03-02 | 中国科学院上海技术物理研究所 | 一种基于fpga的四口ram |
CN107341772A (zh) * | 2017-05-26 | 2017-11-10 | 哈尔滨工业大学 | 一种基于fpga的灰度图像中值滤波优化方法及其*** |
CN107993202A (zh) * | 2017-11-24 | 2018-05-04 | 中国科学院长春光学精密机械与物理研究所 | 使用fpga实现中值滤波的方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6987401B1 (en) * | 2002-10-22 | 2006-01-17 | Altera Corporation | Compare, select, sort, and median-filter apparatus in programmable logic devices and associated methods |
JP4457951B2 (ja) * | 2005-04-15 | 2010-04-28 | ソニー株式会社 | 記録装置、記録方法および記録プログラム |
CN109064424A (zh) * | 2018-07-24 | 2018-12-21 | 郑州云海信息技术有限公司 | 图像滤波数据存取的控制方法及装置 |
CN111737221B (zh) * | 2020-06-19 | 2022-04-22 | 浪潮电子信息产业股份有限公司 | 集群文件***的数据读写方法、装置及设备和存储介质 |
-
2018
- 2018-05-29 CN CN201810532431.0A patent/CN108765341B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101599167A (zh) * | 2008-06-03 | 2009-12-09 | 株式会社理光 | 存储器的存取方法 |
CN104539964A (zh) * | 2012-01-06 | 2015-04-22 | 索尼公司 | 图像处理装置和方法 |
CN102647594A (zh) * | 2012-04-18 | 2012-08-22 | 北京大学 | 一种整像素精度运动估计方法及其*** |
CN103793873A (zh) * | 2014-01-26 | 2014-05-14 | 大唐移动通信设备有限公司 | 图像像素中值的获取方法和装置 |
CN104050635A (zh) * | 2014-05-30 | 2014-09-17 | 北京理工大学 | 一种模板尺寸可变的图像非线性滤波实时处理***及方法 |
CN105373494A (zh) * | 2015-12-01 | 2016-03-02 | 中国科学院上海技术物理研究所 | 一种基于fpga的四口ram |
CN107341772A (zh) * | 2017-05-26 | 2017-11-10 | 哈尔滨工业大学 | 一种基于fpga的灰度图像中值滤波优化方法及其*** |
CN107993202A (zh) * | 2017-11-24 | 2018-05-04 | 中国科学院长春光学精密机械与物理研究所 | 使用fpga实现中值滤波的方法 |
Non-Patent Citations (2)
Title |
---|
基于FPGA的均值滤波算法的实现;王超元;《https://www.cnblogs.com/wangchaoyuana/p/7507373.html》;20170911;第1页 * |
自适应滤波算法的分析与FPGA高速实现;唐佳;《中国优秀博硕士学位论文全文数据库(硕士)信息科技辑》;20110215(第02期);第I135-40页 * |
Also Published As
Publication number | Publication date |
---|---|
CN108765341A (zh) | 2018-11-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9286650B2 (en) | Video processing apparatus, display apparatus, and video processing method | |
US7660486B2 (en) | Method and apparatus of removing opaque area as rescaling an image | |
CN113556442B (zh) | 视频去噪方法、装置、电子设备及计算机可读存储介质 | |
CN108765341B (zh) | 一种图像处理的方法及其装置 | |
EP2804144A1 (en) | Method and device for processing input image data | |
JP2021530770A (ja) | ビデオ処理方法、装置及びコンピュータ記憶媒体 | |
JPH0612487A (ja) | 画像データのためのサンプルレート変換器 | |
US7382937B2 (en) | Method and apparatus for re-constructing high-resolution images | |
CN103916612A (zh) | 一种任意比例缩放***及方法 | |
JP6674309B2 (ja) | メモリ制御装置及びメモリ制御方法 | |
JP6414388B2 (ja) | アクセラレータ回路及び画像処理装置 | |
CN108846808B (zh) | 一种图像处理的方法及其装置 | |
US20180108113A1 (en) | Apparatus and Method for Parallel Polyphase Image Interpolation | |
US20120050820A1 (en) | Image processing apparatus, control method of the same, and program | |
JP2008523489A (ja) | 画像サイズを変更する方法および装置 | |
US20050147315A1 (en) | Mean filter device and filtering method | |
CN115546038A (zh) | 图像降噪方法、电路、电子设备和存储介质 | |
KR101000036B1 (ko) | 실시간 영상 처리를 위한 서브 샘플링 시스템 | |
CN102694962A (zh) | 降噪方法及装置 | |
EP2648179B1 (en) | Image processing device, image processing method | |
CN112837256A (zh) | 一种用于Harris角点检测的电路***及检测方法 | |
JP2009122964A (ja) | データ処理装置 | |
CN114862659A (zh) | 图像直方图生成方法、装置、电子设备及存储介质 | |
CN113763250A (zh) | 一种自适应图像缩放处理方法及*** | |
CN103179324A (zh) | 图像锐化方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |