发明内容
为克服相关技术对于图像传感器的坏簇统计方法需要进行多次比较运算才能得到统计结果,不便于FPGA实现的问题,本申请提供一种基于FPGA查找表的坏簇统计方法及装置,能够减少比较运算次数,适宜在FPGA上实现。
根据本申请实施例的第一方面,提供一种基于FPGA查找表的坏簇统计方法,包括:
获取图像传感器的平场图像;
将所述平场图像进行坏点检测处理,输出坏点位置数据;
利用基于连通域的扫描法根据所述坏点位置数据对所述坏点进行一次扫描处理,得到一次扫描数据;
根据所述一次扫描数据创建原查找表;
对所述一次扫描数据进行合并处理,得到合并扫描数据;
根据所述合并处理数据对所述查找表进行更新处理,得到更新后的查找表;
判断所述更新后的查找表索引与所述更新后的查找表内容是否一致;
如果所述更新后的查找表索引与所述更新后的查找表内容一致,则以所述更新后的查找表内容为索引,如果所述更新后的查找表索引与所述更新后的查找表内容不一致,则重复所述对所述一次扫描数据进行合并处理,直至所述更新后的查找表索引与所述更新后的查找表内容一致,得到最终查找表;
根据所述最终查找表统计坏簇数量。
可选的,所述将所述平场图像进行坏点检测处理包括:
坏点标记为1,正常像素点标记为0。
可选的,所述利用基于连通域的扫描法根据所述坏点位置数据对所述坏点进行一次扫描处理包括:
定义像素点位置为D[H,W],用H表示所述像素点所处的行数,用W表示所述像素点所处的列数;
定义坏簇的打标记号为label_num、所述坏点位置数据为Label1、所述一次扫描数据为Label2、查找表为equal_label;
初始化label_num=1、Label2(D[H,W])=0以及equal_label[n]=n,其中n=1,2,…N,用N表示坏簇的预估值;
根据所述坏点位置数据,判断Label1(D[H,W])是否等于1,如果Label1(D[H,W])等于1,则判断Label2(D[H,W-1])和Label2(D[H-1,W+1])的大小,如果Label2(D[H,W-1])和Label2(D[H-1,W+1])都大于1,则取两者中的小值赋值给Label2(D[H,W]),如果两者仅有一个大于1,则将大于1的值赋值给Label2(D[H,W]);
如果Label2(D[H,W-1])和Label2(D[H-1,W+1])都等于零,则判断Label2(D[H-1,W-1])是否大于1,如果Label2(D[H-1,W-1])大于1,则将Label2(D[H-1,W-1])的值赋值给Label2(D[H,W]),如果Label2(D[H-1,W-1])小于或者等于1,则判断Label2(D[H-1,W])是否大于1,如果Label2(D[H-1,W])大于1,则将Label2(D[H-1,W])的值赋给Label2(D[H,W]),如果Label2(D[H-1,W])小于或等于1,则判断Label1(D[H,W+1])、Label1(D[H+1,W-1])、Label1(D[H+1,W])以及Label1(D[H+1,W+1])的总和是否等于零,如果Label1(D[H,W+1])、Label1(D[H+1,W-1])、Label1(D[H+1,W])以及Label1(D[H+1,W+1])的总和等于零,则将Label1(D[H,W])的值赋值给Label2(D[H,W]);
如果Label1(D[H,W+1])、Label1(D[H+1,W-1])、Label1(D[H+1,W])以及Label1(D[H+1,W+1])的总和不等于零,则将label_num+1赋值给Label2(D[H,W])。
可选的,所述对所述一次扫描数据进行合并处理包括:
判断Label2(D[H,W])是否大于1,如果Label2(D[H,W])大于1,则判断Label2(D[H+1,W])和Label2(D[H+1,W+1])的大小,如果Label2(D[H+1,W])和Label2(D[H+1,W+1])均大于1,则取两者中的小值赋值给equal_label{Label2(D[H,W])},如果Label2(D[H+1,W])和Label2(D[H+1,W+1])只有一个值大于1,则将Label2(D[H+1,W])和Label2(D[H+1,W+1])两者中大于1的值赋给equal_label{Label2(D[H,W])};
如果Label2(D[H+1,W])和Label2(D[H+1,W+1])均等于零,则判断Label2(D[H,W+1])是否大于1,且Label2(D[H,W+1])是否小于Label2(D[H,W]),如果Label2(D[H,W+1])大于1,且Label2(D[H,W+1])小于Label2(D[H,W]),则将Label2(D[H,W+1])的值赋值给equal_label{Label2(D[H,W])},如果Label2(D[H,W+1])等于零,或Label2(D[H,W+1])大于或等于Label2(D[H,W]),则保持equal_label{Label2(D[H,W])}的值不变。
可选的,所述坏簇统计方法还包括,定义二次扫描数据为Label3,初始化Label3(D[H,W])=0,根据所述最终查找表对所述合并扫描数据进行二次扫描处理,包括:判断Label2(D[H,W])是否大于等于1,如果Label2(D[H,W])大于等于1,则将equal_label{Label2(D[H,W])}的值赋值给Label3(D[H,W]),如果Label2(D[H,W])小于1,则将Label2(D[H,W])的值赋值给Label3(D[H,W]),得到二次扫描数据。
可选的,所述根据所述最终查找表统计坏簇数量包括:统计所述最终查找表中不同所述查找表内容的个数。
相应于本申请实施例的第一方面,根据本申请实施例的第二方面,提供一种基于FPGA查找表的坏簇统计装置,包括:
平场图像获取单元,用于获取图像传感器的平场图像;
坏点检测处理单元,用于将所述平场图像进行坏点检测处理,输出坏点位置数据;
一次扫描处理单元,用于利用基于连通域的扫描法根据所述坏点位置数据对所述坏点进行一次扫描处理;
查找表创建单元,用于根据所述一次扫描数据创建原查找表;
合并处理单元,用于对所述一次扫描数据进行合并处理;
查找表更新单元,用于根据所述合并处理数据对所述查找表进行更新处理;
判断单元,用于判断所述更新后的查找表索引与所述更新后的查找表内容是否一致;
执行单元,用于如果所述更新后的查找表索引与所述更新后的查找表内容一致,则以所述更新后的查找表内容为索引,如果所述更新后的查找表索引与所述更新后的查找表内容不一致,则重复所述对所述一次扫描数据进行合并处理,直至所述更新后的查找表索引与所述更新后的查找表内容一致;
统计单元,根据所述最终查找表统计坏簇数量。
可选的,所述坏点检测处理单元包括:
标记模块,所述标记模块用于将坏点标记为1,正常像素点标记为0。
可选的,所述一次扫描处理单元包括:
定义模块,用于定义像素点位置为D[H,W],用H表示所述像素点所处的行数,用W表示所述像素点所处的列数;
定义坏簇的打标记号为label_num、坏点位置信息为Label1、所述一次扫描数据为Label2、查找表为equal_label;
初始化模块,用于初始化label_num=1、Label2(D[H,W])=0以及equal_label[n]=n,其中n=1,2,…N,用N表示坏簇的预估值;
第一判断模块,用于根据所述坏点位置数据,判断Label1(D[H,W])是否等于1;
第一执行模块,如果Label1(D[H,W])等于1,则判断Label2(D[H,W-1])和Label2(D[H-1,W+1])的大小,如果Label2(D[H,W-1])和Label2(D[H-1,W+1])都大于1,则取两者中的小值赋值给Label2(D[H,W]),如果两者仅有一个大于1,则将大于1的值赋值给Label2(D[H,W]);
如果Label2(D[H,W-1])和Label2(D[H-1,W+1])都等于零,则判断Label2(D[H-1,W-1])是否大于1,如果Label2(D[H-1,W-1])大于1,则将Label2(D[H-1,W-1])的值赋值给Label2(D[H,W]),如果Label2(D[H-1,W-1])小于或者等于1,则判断Label2(D[H-1,W])是否大于1,如果Label2(D[H-1,W])大于1,则将Label2(D[H-1,W])的值赋给Label2(D[H,W]),如果Label2(D[H-1,W])小于或等于1,则判断Label1(D[H,W+1])、Label1(D[H+1,W-1])、Label1(D[H+1,W])以及Label1(D[H+1,W+1])的总和是否等于零,如果Label1(D[H,W+1])、Label1(D[H+1,W-1])、Label1(D[H+1,W])以及Label1(D[H+1,W+1])的总和等于零,则将Label1(D[H,W])的值赋值给Label2(D[H,W]);
第二执行模块,如果Label1(D[H,W+1])、Label1(D[H+1,W-1])、Label1(D[H+1,W])以及Label1(D[H+1,W+1])的总和不等于零,则将label_num+1赋值给Label2(D[H,W])。
可选的,所述合并处理单元包括:
第二判断模块,用于判断Label2(D[H,W])是否大于1;
第三执行模块,用于如果Label2(D[H,W])大于1,则判断Label2(D[H+1,W])和Label2(D[H+1,W+1])的大小,如果Label2(D[H+1,W])和Label2(D[H+1,W+1])均大于1,则取两者中的小值赋值给equal_label{Label2(D[H,W])},如果Label2(D[H+1,W])和Label2(D[H+1,W+1])只有一个值大于1,则将Label2(D[H+1,W])和Label2(D[H+1,W+1])两者中大于1的值赋给equal_label{Label2(D[H,W])};
如果Label2(D[H+1,W])和Label2(D[H+1,W+1])均等于零,则判断Label2(D[H,W+1])是否等于1,且Label2(D[H,W+1])是否小于Label2(D[H,W]),如果Label2(D[H,W+1])大于1,且Label2(D[H,W+1])小于Label2(D[H,W]),则将Label2(D[H,W+1])的值赋值给equal_label{Label2(D[H,W])},如果Label2(D[H,W+1])等于0,或Label2(D[H,W+1])大于或等于Label2(D[H,W]),则保持equal_label{Label2(D[H,W])}的值不变。
可选的,所述定义模块还包括定义二次扫描数据为Label3,所述初始化模块还包括初始化Label3(D[H,W])=0,所述坏簇统计装置还包括二次扫描处理单元,所述二次扫描处理单元包括:
第三判断模块,用于判断Label2(D[H,W])是否大于等于1;
第四执行模块,用于如果Label2(D[H,W])大于等于1,则将equal_label{Label2(D[H,W])}的值赋值给Label3(D[H,W]),如果如果Label2(D[H,W])小于1,则将Label2(D[H,W])的值赋值给Label3(D[H,W])。
可选的,所述统计单元,用于根据所述最终查找表统计坏簇数量,包括:统计所述最终查找表中不同所述查找表内容的个数。
相应于本申请实施例的第一方面,根据本申请实施例的第三方面,提供一种FPGA芯片,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器通过所述计算机程序执行上述权利要求1至6任一项所述的方法。
相应于本申请实施例的第一方面,根据本申请实施例的第四方面,提供一种计算机可读存储介质,所述存储介质包括存储的程序,其中,所述程序运行时执行上述权利要求1至6任一项所述的方法。
本申请实施例提供的技术方案,首先获取图像传感器的平场图像,将所述平场图像进行坏点检测处理,输出坏点位置数据,利用基于连通域的扫描法根据所述坏点位置数据对所述坏点进行一次扫描处理,得到一次扫描数据,根据所述一次扫描数据创建原查找表,对所述一次扫描数据进行合并处理,得到合并扫描数据,根据所述合并处理数据对所述查找表进行更新处理,得到更新后的查找表,判断所述更新后的查找表索引与所述更新后的查找表内容是否一致,如果所述更新后的查找表索引与所述更新后的查找表内容一致,则以所述更新后的查找表内容为索引,如果所述更新后的查找表索引与所述更新后的查找表内容不一致,则重复所述对所述一次扫描数据进行合并处理,直至所述更新后的查找表索引与所述更新后的查找表内容一致,得到最终查找表,根据所述最终查找表统计坏簇数量。本申请实施例提供的技术方案,通过引入FPGA最擅长的查找表,通过将经过图像坏点检测的位置数据应用于查找表,通过查找表和数据扫描处理相互配合检验,得到最终的查找表,通过最终的查找表统计得到坏簇的数量,减少比较运算次数,适宜在FPGA上实现。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
为了全面理解本申请,在以下详细描述中提到了众多具体的细节,但是本领域技术人员应该理解,本申请可以无需这些具体细节而实现。在其他实施例中,不详细描述公知的方法、过程、组件和电路,以免不必要地导致实施例模糊。
图1本申请一示例性实施例示出的基于FPGA查找表的坏簇统计方法的流程示意图,方法包括:
步骤S101,获取图像传感器的平场图像。
步骤S102,将所述平场图像进行坏点检测处理,输出坏点位置数据。
由于在制造工艺、运输或储存方法等方面存在的不足,图像传感器总会存在部分不正常的感光单元,视为坏点。这些坏点通常表现为暗点或者亮点。这些点的大小通常只有一个像素,并且该点的亮度受背景亮度的影响不大,基本没有变化。坏点检测是对采集的平场图像进行检测,将灰度值与图像均值差异大的点检测出来作为坏点,而2个及2个以上的连续坏点即为坏簇,连续坏点就是有相邻关系的坏点,坏簇分布在芯片的不同位置,统计整个芯片上的所有的坏簇,即为坏簇数量。
具体的,将所述平场图像进行坏点检测处理包括:步骤S201,坏点标记为1,正常像素点标记为0。如图3所示为示例性实施例的坏点检测结果,坏点的灰度值与正常像素点的灰度值差异很大,差异具体看芯片厂家或者相机厂家的标准,通常中灰图像(130DN的灰度值)偏差是15%*130DN。
步骤S103,利用基于连通域的扫描法根据所述坏点位置数据对所述坏点进行一次扫描处理,得到一次扫描数据。
在图像中最小的单位是像素,每个像素周围有8个邻接像素,常见的邻接关系有2种:4邻接与8邻接。4邻接一共4个点,即上下左右,8邻接的点一共有8个,包括了对角线位置的点。在视觉上看来,彼此连通的点形成了一个区域,而不连通的点形成了不同的区域,这样的一个所有的点彼此连通点构成的集合即为连通域,本申请实施例基于连通域,将同一连通域的坏点作为坏簇。
具体的,图2为根据一示例性实施例示出的一次扫描处理流程示意图,所述利用基于连通域的扫描法根据所述坏点位置数据对所述坏点进行一次扫描处理包括:
步骤S301,定义像素点位置为D[H,W],用H表示所述像素点所处的行数,用W表示所述像素点所处的列数。如图4所示的为示例性实施例示出的8邻域数据示意图,其中,D22为当前需要判断的点,D22标识坏点位置数据中行数处于第二行,列出处于第二列的坏点。D11至D33分别表示标号为D22的坏点周围的8邻域的像素点。
步骤S302,定义坏簇的打标记号为label_num、坏点位置信息为Label1、所述一次扫描数据为Label2、查找表为equal_label。
步骤S303,初始化label_num=1、Label2(D[H,W])=0以及equal_label[n]=n,其中n=1,2,…N,用N表示坏簇的预估值。其中,坏簇数量通常在芯片来料的标准中会给出,此处可以设一个较大的数值,如256。
步骤S304,根据所述坏点位置数据,判断Label1(D[H,W])是否等于1,如果Label1(D[H,W])等于1,则判断Label2(D[H,W-1])和Label2(D[H-1,W+1])的大小,如果Label2(D[H,W-1])和Label2(D[H-1,W+1])都大于1,则取两者中的小值赋值给Label2(D[H,W]),如果两者仅有一个大于1,则将大于1的值赋值给Label2(D[H,W]);
如果Label2(D[H,W-1])和Label2(D[H-1,W+1])都等于零,则判断Label2(D[H-1,W-1])是否大于1,如果Label2(D[H-1,W-1])大于1,则将Label2(D[H-1,W-1])的值赋值给Label2(D[H,W]),如果Label2(D[H-1,W-1])小于或者等于1,则判断Label2(D[H-1,W])是否大于1,如果Label2(D[H-1,W])大于1,则将Label2(D[H-1,W])的值赋给Label2(D[H,W]),如果Label2(D[H-1,W])小于或等于1,则判断Label1(D[H,W+1])、Label1(D[H+1,W-1])、Label1(D[H+1,W])以及Label1(D[H+1,W+1])的总和是否等于零,如果Label1(D[H,W+1])、Label1(D[H+1,W-1])、Label1(D[H+1,W])以及Label1(D[H+1,W+1])的总和等于零,则将Label1(D[H,W])的值赋值给Label2(D[H,W]);
如果Label1(D[H,W+1])、Label1(D[H+1,W-1])、Label1(D[H+1,W])以及Label1(D[H+1,W+1])的总和不等于零,则将label_num+1赋值给Label2(D[H,W])。
根据上述示例性实施例的描述,步骤S304具体为:判断Label1(D22)是否等于1,如果Label1(D22)等于1,则判断Label2(D21)和Label2(D13)的大小,如果Label2(D21)和Label2(D13)都大于1,则取两者中的小值赋值给Label2(D22),如果两者仅有一个大于1,则将大于1的值赋值给Label2(D22);
如果Label2(D21)和Label2(D13)都等于零,则判断Label2(D11)是否大于1,如果Label2(D11)大于1,则将Label2(D11)的值赋值给Label2(D22),如果Label2(D11)小于或者等于1,则判断Label2(D12)是否大于1,如果Label2(D12)大于1,则将Label2(D12)的值赋给Label2(D22),如果Label2(D12)小于或等于1,则判断Label1(D23)、Label1(D31)、Label1(D32)以及Label1(D33)的总和是否等于零,如果Label1(D23)、Label1(D31)、Label1(D32)以及Label1(D33)的总和等于零,则将Label1(D22)的值赋值给Label2(D22);
如果Label1(D23)、Label1(D31)、Label1(D32)以及Label1(D33)的总和不等于零,则将label_num+1赋值给Label2(D22)。
其中,步骤304为一个迭代的过程,参阅图5(a)和图5(b)为示例性实施例示出的Label1的结果,图6(a)为图5(a)示出Label1经过步骤304的处理过程后得到的Label2的处理结果即一次扫描数据,图6(b)为图5(b)示出Label1经过步骤304的处理过程后得到的Label2的处理结果即一次扫描数据。
步骤S104,根据所述一次扫描数据创建原查找表,如表1所示。
表1原查找表
步骤S105,对所述一次扫描数据进行合并处理,得到合并扫描数据。
具体的,判断Label2(D[H,W])是否大于1,如果Label2(D[H,W])大于1,则判断Label2(D[H+1,W])和Label2(D[H+1,W+1])的大小,如果Label2(D[H+1,W])和Label2(D[H+1,W+1])均大于1,则取两者中的小值赋值给equal_label{Label2(D[H,W])},如果Label2(D[H+1,W])和Label2(D[H+1,W+1])只有一个值大于1,则将Label2(D[H+1,W])和Label2(D[H+1,W+1])两者中大于1的值赋给equal_label{Label2(D[H,W])};
如果Label2(D[H+1,W])和Label2(D[H+1,W+1])均等于零,则判断Label2(D[H,W+1])是否大于1,且Label2(D[H,W+1])是否小于Label2(D[H,W]),如果Label2(D[H,W+1])大于1,且Label2(D[H,W+1])小于Label2(D[H,W]),则将Label2(D[H,W+1])的值赋值给equal_label{Label2(D[H,W])},如果Label2(D[H,W+1])等于零,或Label2(D[H,W+1])大于或等于Label2(D[H,W]),则保持equal_label{Label2(D[H,W])}的值不变。
根据上述示例性实施例的描述,步骤S104具体为:判断Label2(D22)是否大于1,如果Label2(D22)大于1,则判断Label2(D32)和Label2(D33)的大小,如果Label2(D32)和Label2(D33)均大于1,则取两者中的小值赋值给equal_label{Label2(D22)},如果Label2(D32)和Label2(D33)只有一个值大于1,则将Label2(D32)和Label2(D33)两者中大于1的值赋给equal_label{Label2(D22)};
如果Label2(D32)和Label2(D33)均等于零,则判断Label2(D23)是否大于1,且Label2(D23)是否小于Label2(D22),如果Label2(D23)大于1,且Label2(D23)小于Label2(D22),则将Label2(D23)的值赋值给equal_label{Label2(D22)},如果Label2(D23)等于零,或Label2(D23)大于或等于Label2(D22),则保持equal_label{Label2(D22)}的值不变。
步骤S106,根据所述合并处理数据对所述查找表进行更新处理,得到更新后的查找表。
如表1所示,为equal_label原查找表,经过上述步骤,查找表更新为表2,label2即一次扫描结果更新为如图7(a)和图7(b)所示。
步骤S107,判断所述更新后的查找表索引与所述更新后的查找表内容是否一致。
步骤S108,如果所述更新后的查找表索引与所述更新后的查找表内容一致,则以所述更新后的查找表内容为索引,如果所述更新后的查找表索引与所述更新后的查找表内容不一致,则重复所述对所述一次扫描数据进行合并处理,直至所述更新后的查找表索引与所述更新后的查找表内容一致,得到最终查找表。
具体的,至此同一个坏簇中仍存在少量未合并的label_num,如表2中索引为6的查找表的内容虽然修正为5,但是5又修正为4,因此最终索引为6的查找表的内容应该修正为4,为了达到该目的,还需进行处理,若查找表的索引与其内容不一致,则以其内容作为索引,判断该索引下的内容是否与其一致,若不一致,继续上述操作,直到索引与其内容一致,将此时的内容赋值给最初的索引,如图8所示为equal_label的合并处理流程。最终的查找表结果如表3所示。查找表索引表示坏簇的打标记号,查找表内容表示label_num。
表2更新后查找表
表3最终的查找表
步骤S109,根据所述最终查找表统计坏簇数量。具体的,如表3所示的最终的查找表,根据所述最终查找表统计坏簇数量包括:统计所述最终查找表中不同所述查找表内容的个数。
另外,还可以根据最终查找表对所述合并扫描数据进行二次扫描处理,首先在定义和初始化步骤中,定义二次扫描数据为Label3,初始化Label3(D[H,W])=0,二次扫描处理包括:判断Label2(D[H,W])是否大于等于1,如果Label2(D[H,W])大于等于1,则将equal_label{Label2(D[H,W])}的值赋值给Label3(D[H,W]),如果Label2(D[H,W])小于1,则将Label2(D[H,W])的值赋值给Label3(D[H,W]),得到二次扫描数据。图9(a)和图9(b)分别为图7(a)和图7(b)示例性实施例的二次扫描数据结果示意图。通过上述示例性实施例的处理过程,设置合理的对比顺序能够减少坏簇统计中的比较运算,并引入FPGA最擅长的查找表实现坏簇统计的合并处理,适合在FPGA上实现,提高了实时性。
本申请实施例提供的技术方案,首先获取图像传感器的平场图像,将所述平场图像进行坏点检测处理,输出坏点位置数据,利用基于FPGA查找表的扫描法根据所述坏点位置数据对所述坏点进行一次扫描处理,得到一次扫描数据,根据所述一次扫描数据创建原查找表,对所述一次扫描数据进行合并处理,得到合并扫描数据,根据所述合并处理数据对所述查找表进行更新处理,得到更新后的查找表,判断所述更新后的查找表索引与所述更新后的查找表内容是否一致,如果所述更新后的查找表索引与所述更新后的查找表内容一致,则以所述更新后的查找表内容为索引,如果所述更新后的查找表索引与所述更新后的查找表内容不一致,则重复所述对所述一次扫描数据进行合并处理,直至所述更新后的查找表索引与所述更新后的查找表内容一致,得到最终查找表,根据所述最终查找表统计坏簇数量。本申请实施例提供的技术方案,通过引入FPGA最擅长的查找表,通过将经过图像坏点检测的位置数据应用于查找表,通过查找表和数据扫描处理相互配合检验,得到最终的查找表,通过最终的查找表统计得到坏簇的数量,减少比较运算次数,适宜在FPGA上实现。
图10为本申请一示例性实施例示出的基于FPGA查找表的坏簇统计装置的框图。所述装置包括:
平场图像获取单元U1001,用于获取图像传感器的平场图像;
坏点检测处理单元U1002,用于将所述平场图像进行坏点检测处理,输出坏点位置数据;
一次扫描处理单元U1003,用于利用基于连通域的扫描法根据所述坏点位置数据对所述坏点进行一次扫描处理;
查找表创建单元U1004,用于根据所述一次扫描数据创建原查找表;
合并处理单元U1005,用于对所述一次扫描数据进行合并处理;
查找表更新单元U1006,用于根据所述合并处理数据对所述查找表进行更新处理;
判断单元U1007,用于判断所述更新后的查找表索引与所述更新后的查找表内容是否一致;
执行单元U1008,用于如果所述更新后的查找表索引与所述更新后的查找表内容一致,则以所述更新后的查找表内容为索引,如果所述更新后的查找表索引与所述更新后的查找表内容不一致,则重复所述对所述一次扫描数据进行合并处理,直至所述更新后的查找表索引与所述更新后的查找表内容一致;
统计单元U1009,根据所述最终查找表统计坏簇数量。
其中,坏点检测处理单元,可以包括:
标记模块,所述标记模块用于将坏点标记为1,正常像素点标记为0。
其中,所述一次扫描处理单元,可以包括:
定义模块,用于定义像素点位置为D[H,W],用H表示所述像素点所处的行数,用W表示所述像素点所处的列数;
定义坏簇的打标记号为label_num、坏点位置信息为Label1、所述一次扫描数据为Label2、查找表为equal_label;
初始化模块,用于初始化label_num=1、Label2(D[H,W])=0以及equal_label[n]=n,其中n=1,2,…N,用N表示坏簇的预估值;
第一判断模块,用于根据所述坏点位置数据,判断Label1(D[H,W])是否等于1;
第一执行模块,如果Label1(D[H,W])等于1,则判断Label2(D[H,W-1])和Label2(D[H-1,W+1])的大小,如果Label2(D[H,W-1])和Label2(D[H-1,W+1])都大于1,则取两者中的小值赋值给Label2(D[H,W]),如果两者仅有一个大于1,则将大于1的值赋值给Label2(D[H,W]);
如果Label2(D[H,W-1])和Label2(D[H-1,W+1])都等于零,则判断Label2(D[H-1,W-1])是否大于1,如果Label2(D[H-1,W-1])大于1,则将Label2(D[H-1,W-1])的值赋值给Label2(D[H,W]),如果Label2(D[H-1,W-1])小于或者等于1,则判断Label2(D[H-1,W])是否大于1,如果Label2(D[H-1,W])大于1,则将Label2(D[H-1,W])的值赋给Label2(D[H,W]),如果Label2(D[H-1,W])小于或等于1,则判断Label1(D[H,W+1])、Label1(D[H+1,W-1])、Label1(D[H+1,W])以及Label1(D[H+1,W+1])的总和是否等于零,如果Label1(D[H,W+1])、Label1(D[H+1,W-1])、Label1(D[H+1,W])以及Label1(D[H+1,W+1])的总和等于零,则将Label1(D[H,W])的值赋值给Label2(D[H,W]);
第二执行模块,如果Label1(D[H,W+1])、Label1(D[H+1,W-1])、Label1(D[H+1,W])以及Label1(D[H+1,W+1])的总和不等于零,则将label_num+1赋值给Label2(D[H,W])。
其中,合并处理单元,可以包括:
第二判断模块,用于判断Label2(D[H,W])是否大于1;
第三执行模块,用于如果Label2(D[H,W])大于1,则判断Label2(D[H+1,W])和Label2(D[H+1,W+1])的大小,如果Label2(D[H+1,W])和Label2(D[H+1,W+1])均大于1,则取两者中的小值赋值给equal_label{Label2(D[H,W])},如果Label2(D[H+1,W])和Label2(D[H+1,W+1])只有一个值大于1,则将Label2(D[H+1,W])和Label2(D[H+1,W+1])两者中大于1的值赋给equal_label{Label2(D[H,W])};
如果Label2(D[H+1,W])和Label2(D[H+1,W+1])均等于零,则判断Label2(D[H,W+1])是否等于1,且Label2(D[H,W+1])是否小于Label2(D[H,W]),如果Label2(D[H,W+1])大于1,且Label2(D[H,W+1])小于Label2(D[H,W]),则将Label2(D[H,W+1])的值赋值给equal_label{Label2(D[H,W])},如果Label2(D[H,W+1])等于0,或Label2(D[H,W+1])大于或等于Label2(D[H,W]),则保持equal_label{Label2(D[H,W])}的值不变。
其中,所述定义模块还可以包括定义二次扫描数据为Label3,所述初始化模块还可以包括初始化Label3(D[H,W])=0,所述坏簇统计装置还可以包括二次扫描处理单元,所述二次扫描处理单元包括:
第三判断模块,用于判断Label2(D[H,W])是否大于等于1;
第四执行模块,用于如果Label2(D[H,W])大于等于1,则将equal_label{Label2(D[H,W])}的值赋值给Label3(D[H,W]),如果如果Label2(D[H,W])小于1,则将Label2(D[H,W])的值赋值给Label3(D[H,W])。
其中,统计单元,用于根据所述最终查找表统计坏簇数量,包括:统计所述最终查找表中不同所述查找表内容的个数。
本申请实施例提供的一种FPGA芯片包括存储器、处理器及存储在所述存储器上并可在处理器上运行的计算机程序,所述处理器通过所述计算机程序执行上述方法。FPFA比较适宜使用查找表,通过查找表实现坏簇统计的合并处理,所以上述方法适合在FPGA上实现,提高实时性。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由所附的权利要求指出。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。