基于高精度大幅面扫描仪系统的图像处理流程控制方法

文档序号:6619591阅读:239来源:国知局
基于高精度大幅面扫描仪系统的图像处理流程控制方法
【专利摘要】本发明公开了一种基于高精度大幅面扫描仪系统的图像处理流程控制方法,通过获取数据包、处理数据包和保存数据包这三个并行的线呈依次实现,克服了数据包处理过程中对内存占用越来越大导致处理速度被拖慢的缺陷。本发明利用了双向缓冲队列这一数据排列方式可使整个缓存空间持续工作,不仅处理速度加快,同时可防止某一环节拥堵,编程简单,操作性强,适合推广使用。
【专利说明】[0001] 基于高精度大幅面扫描仪系统的图像处理流程控制方法

【技术领域】
[0002] 本发明涉及一种大幅面扫描仪系统的内部图像处理方法,具体是指大幅面扫描仪 系统内部图像的图像处理流程控制实现方法。

【背景技术】
[0003] 对通过CIS扫描的大幅面扫描仪来讲,内部处理速度是图像处理过程中非常重要 的一环。因为上位机通过USB端口接收传来的数据时源源不断的,传递过来的数据包首先 要进行处理,再存入到硬盘中,如果将所有需要处理的数据包全部载入内存中,内存中的数 据会越来越多,容易出现读取错误、拖慢数据处理速度,更不利于后续图像数据的处理。


【发明内容】

[0004] 本发明的目的在于克服数据包处理过程中对内存占用越来越大导致处理速度被 拖慢的缺陷,提供一种三线程同时工作,并及时释放存储的大幅面扫描仪系统的内部图像 处理方法。
[0005] 为了实现上述目的,本发明采用的技术方案如下: 基于高精度大幅面扫描仪系统的图像处理流程控制方法,采取以下步骤操作: (1) 读取数据包,该数据即为CIS扫描获取并经过AD转换器模数转换的数字信号; (2) 处理数据包,该处理数据的方法采取取出临界区的数据处理队列首数据包,并在处 理数据后将该数据包放入在该队队尾; (3) 存储数据包,该数据包临时存储于临界区的数据存储队列,处理后释放该数据包在 临界区的存储,写入硬盘完成; 上述三个步骤依次进行,并同时采取三线程并行操作。
[0006] 其中,所述步骤(1)通过第一线程具体按以下过程实现: (la) 上位机从USB端口获取FPGA输出的数据包,若PFGA没有输出数据包,则采集过程 结束,当上位机获取到数据包后,执行下一步骤: (lb) 采集到数据包后,申请临界区保护,若临界区已被占用,则申请失败,若临界区未 被占用,则按照顺序将该数据包放入数据处理队列的队尾,结束后返回步骤(la)。
[0007] 同时,步骤(2)中在第二线程处理数据包时,该数据包从临界区取出,该步骤与步 骤(1)同时进行,其具体实现方法如下: (2a)检测临界区的数据包处理队列是否为空,若为空则继续等待步骤(1),若不为空则 进行下一步; (2b)申请临界区保护,若失败则继续申请,若成功则进行下一步; (2c)从数据处理队列中取出队首的数据包,并释放该数据包在临界区的存储空间,对 数据包进行处理,该处理包括拼接、曝光、校正; (2d)申请临界区保护,若失败则继续申请,若成功则进行下一步; (2e)将处理后的数据包放入临界区的数据存储队列队尾,结束后返回步骤(2a)。
[0008] 进一步来讲,所述步骤(3)中通过第三线程处理,该步骤与步骤(1)和步骤(2)同 时进行,其具体实现方法如下; (3a)检测数据存储队列是否为空,若为空则继续等待,若不为空则执行下一步骤; (3b)申请临界区保护,若申请失败则继续申请,若申请成功则进行下一步; (3c)从数据存储队列队首读取一个数据包,并释放该数据包在临界区的存储空间; (3d)将该数据包写入硬盘,结束后返回步骤(3a)。
[0009] 与现有技术相比,本发明具有以下有益效果: (1)本发明通过三线程同时处理,且三个步骤按照先后顺序依次进行,可节约数据处理 时间。
[0010] (2)本发明采用的双向缓冲队列的方式来存储数据包,即生成一个数据处理队列 和一个数据存储队列,由于每个队列里的每个数据包的大小一致,只能在数据队列的尾部 添加数据包,同时也可以很方便地读取在队列前端的数据包,随着数据包的不断增多,数据 处理过程不断释放临界区的存储空间,数据存储过程也不断释放临界区的存储空间,这两 个存储队列占用的内存就能保持在一个比较稳定值内,同时整个系统内存消耗控制在一个 合理的范围之内。
[0011] (3 )本发明采用的三线程并行执行操作,一边采集数据,一边将采集到的数据进行 处理,一边将处理后的数据进行存储,大大加快了整个扫描的流程。
[0012] (4)本发明为防止错乱,本发明在多个线程通知等待进入空闲的临界区中时,一次 只能保证一个线程进入,即申请临界区保护,若申请临界区保护失败,则表示另一线程正在 占用临界区,这种方式可防止线程出现错乱的情况发生,有利于后续图像数据的处理。

【专利附图】

【附图说明】
[0013] 图1为本发明-实施例中数据包读取、处理、存储三个线程系统工作时的流转示意 图。
[0014] 图2为本发明-实施例中双向缓冲队列工作示意图。
[0015] 图3为本发明-实施例中数据包读取的流程图。
[0016] 图4为本发明-实施例中数据包处理的流程图。
[0017] 图5为本发明-实施例中数据包存储的流程图。

【具体实施方式】
[0018] 下面结合附图和实施例对本发明作进一步说明,本发明的实施方式包括但不限于 下列实施例。 实施例
[0019] 如图1所示,数据包的读取、处理和存储分为三个线程同时操作,且三个步骤依次 进行。
[0020] 其中每个数据包由CIS将扫描的介质分割成线性后的,每个线性扫描数据,该数 据由AD转换器转换成数字信号,并经过FPGA进行排序后处理。该过程为现有技术,故不作 详细说明。
[0021] 本发明主要采用了双向缓冲队列来处理数据,即移除数据队列的数据包,并放入 新的数据包进队尾,如图2所示。
[0022] 该双向缓冲队列的实现采用标准库(STL)的queue类来进行封装。queue类数据 的插入只能在队尾进行,删除数据只能在队头进行,同时插入和删除的效率非常高,刚好满 足本发明的快速读取和删除要求。
[0023] 首先定义了一个结构体process_unit_t用来存储各个数据块,定义了 queue类用 来存储各个数据块,其定义如下: struct process-unit_t { uchar 氺 base; size_t size; uint32 number; }; std::queue<process_unit_t> process_queue_t; 其中,base表示数据块的首地址,size表示数据块的大小,number表示数据块的编号, 图中共有N个数据包。
[0024] 其中调度的原则是: (1) 如果有多个线程等待进入空闲的临界区中,一次只能保证一个线程进入; (2) 从进入临界区开始,每次都只能让一个线程进入。如果此时已经有线程进入该临界 区,其他的线程必须需要等待原有线程离开临界区以后等待的线程才能进入临界区; (3) 进入临界区的线程要在有限的时间内完成操作,并即时离开临界区,以便于后面的 线程能够进入该临界区。
[0025] 这种调度原则将在下面步骤中得到实现。
[0026] 数据包的读取方法如下: 第一线程即为数据包的读取线程,在大幅面扫描仪中,通常是通过上位机进行图像的 处理,而上位机通过USB端口与FPGA相连,因此上位机通过USB端口接收数据包。
[0027] 首先,如图3所示,上位机若未从USB端口获取到数据包,则表示数据包已经获取 完毕,整个数据包的读取过程结束;若上位机从USB端口获取到了数据包,则申请该数据包 的临界区保护,此时若临界区被其他线程占有,则继续申请,直到申请成功为止。
[0028] 临界区保护申请成功后,在有限的时间内将数据包放入临界区数据处理队列的队 尾,并返回从USB端口获取数据这一步骤,持续不断地将数据包放入数据处理队列队尾。直 到所有数据获取完毕。
[0029] 由于设置了有限时间,因此若有其他线程等待,等待时间不会太久,整个过程不会 出现紊乱。
[0030] 如图4所示,数据包的处理过程如下: A.检测数据处理队列是否为空,若为空则继续等待,直到检测数据处理队列不为空为 止,当检测到数据处理队列不为空时则进行步骤B ; B. 第二线程申请临界区保护,即判断是否有线程在临界区内检测,若没有线程在临界 区内,则第二线程进入临界区并受到保护,进行下一步,使其他线程不得进入临界区;若此 时有其他线程在临界区内,则继续申请,直到申请成功进入临界区; C. 第二线程进入临界区后在有限时间内从数据处理队列队首读取一个数据包,并释放 该数据包在临界区的存储空间,为下一个进入数据处理队列的数据包留出空间; D. 取出数据包后对该数据包进行分析处理,所述处理包括拼接等,因为该数据包为CIS 扫描的线性数据,在形成图像时必须进行拼接和多点区域校正才能形成高精度无误差的扫 描图像,所述对图像的处理为现有技术,故不多做说明; E. 重新申请临界区保护,即再次判断临界区是否被其他线程占用,若此时有其他线程 在临界区内,则继续申请,若没有线程在临界区内,则第二线程进入临界区并受到保护,进 行下一步; F. 将该数据包进行处理后放入临界区的数据存储队列,并由第三线程来处理,并返回 步骤A。
[0031] 如图5所示,存储数据包的具体实现步骤如下: 步骤1 :第三线程首先检测数据存储队列是否为空,若为空则继续等待,等待第二线程 将数据包放入数据存储队列,由于设置了有限时间,等待的时间不会太长便可以进行重新 检测;若检测检测该数据存储队列不为空则进行下一步; 步骤2 :申请临界保护,即检测是否有其他线程在临界区内活动,若申请保护失败则表 示临界区尚在使用中,第三线程继续申请,若成功,则进行下一步; 步骤3:在临界内的数据存储队列中读取队首的数据包,将该数据包所占的临界区的 存储空间释放,便于放入下一个数据包,并将该读取的数据包写入硬盘; 步骤4 :完成上述步骤后,第三线程返回步骤1进行重新检测,持续工作,直到所有数据 包均已存储完毕,第三线程持续等待不再存储新的数据包,本发明中的实现过程便结束了。
[0032] 其中数据包存储的编程实现如下: a) 定义一个数据存储队列,该队列用来存储处理完成后的图像数据; std::queue<process_unit_t> saveQueue; b) 读取saveQueue中的数据,若saveQueue为空则继续等待; if (saveQueue. empty ()) { Sleep (0) ; //让出 CPU 时间 continue; } c) saveQueue不为空,从saveQueue读取一个数据包unit ; process_unit_t unit; EnterCriticalSection(&saveQueueCS); unit = saveQueue. front (); saveQueue. pop (); LeaveCriticalSection(&saveQueueCS); d) 将数据包unit写入硬盘中; e)继续读取数据包。
[0033] 按照上述实施例,便可很好地实现本发明。
【权利要求】
1. 基于高精度大幅面扫描仪系统的图像处理流程控制方法,其特征在于,采取以下步 骤操作: (1) 读取数据包,该数据即为CIS扫描获取并经过AD转换器模数转换的数字信号; (2) 处理数据包,该处理数据的方法采取取出临界区的数据处理队列首数据包,并在处 理数据后将该数据包放入在该队队尾; (3) 存储数据包,该数据包临时存储于临界区的数据存储队列,处理后释放该数据包在 临界区的存储,写入硬盘完成; 上述三个步骤依次进行,并同时采取三线程并行操作。
2. 根据权利要求1所述的基于高精度大幅面扫描仪系统的图像处理流程控制方法,其 特征在于,所述步骤(1)通过第一线程具体按以下过程实现: (la) 上位机从USB端口获取FPGA输出的数据包,若PFGA没有输出数据包,则采集过程 结束,当上位机获取到数据包后,执行下一步骤: (lb) 采集到数据包后,申请临界区保护,若临界区已被占用,则申请失败,若临界区未 被占用,则按照顺序将该数据包放入数据处理队列的队尾,结束后返回步骤(la)。
3. 根据权利要求2所述的基于高精度大幅面扫描仪系统的图像处理流程控制方法,其 特征在于,所述步骤(2)中在第二线程处理数据包时,该数据包从临界区取出,该步骤与步 骤(1)同时进行,其具体实现方法如下: (2a)检测临界区的数据包处理队列是否为空,若为空则继续等待步骤(1),若不为空则 进行下一步; (2b)申请临界区保护,若失败则继续申请,若成功则进行下一步; (2c)从数据处理队列中取出队首的数据包,并释放该数据包在临界区的存储空间,对 数据包进行处理,该处理包括拼接、曝光、校正; (2d)申请临界区保护,若失败则继续申请,若成功则进行下一步; (2e)将处理后的数据包放入临界区的数据存储队列队尾,结束后返回步骤(2a)。
4. 根据权利要求3所述的基于高精度大幅面扫描仪系统的图像处理流程控制方法,其 特征在于,所述步骤(3)中通过第三线程处理,该步骤与步骤(1)和步骤(2)同时进行,其具 体实现方法如下; (3a)检测数据存储队列是否为空,若为空则继续等待,若不为空则执行下一步骤; (3b)申请临界区保护,若申请失败则继续申请,若申请成功则进行下一步; (3c)从数据存储队列队首读取一个数据包,并释放该数据包在临界区的存储空间; (3d)将该数据包写入硬盘,结束后返回步骤(3a)。
【文档编号】G06F9/38GK104111835SQ201410324527
【公开日】2014年10月22日 申请日期:2014年7月9日 优先权日:2014年7月9日
【发明者】陈仕隆, 唐雪松, 杨雷, 赵泽东, 吕坤 申请人:宁波摩视光电科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1