CN101796542A - 用于处理图像数据的装置和方法 - Google Patents

用于处理图像数据的装置和方法 Download PDF

Info

Publication number
CN101796542A
CN101796542A CN200880105809A CN200880105809A CN101796542A CN 101796542 A CN101796542 A CN 101796542A CN 200880105809 A CN200880105809 A CN 200880105809A CN 200880105809 A CN200880105809 A CN 200880105809A CN 101796542 A CN101796542 A CN 101796542A
Authority
CN
China
Prior art keywords
pixel
data
video
image
piece
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.)
Pending
Application number
CN200880105809A
Other languages
English (en)
Inventor
D·C·霍尔顿
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Siemens Building Technologies AG
Siemens Energy and Automation Inc
Original Assignee
Siemens Building Technologies AG
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Siemens Building Technologies AG filed Critical Siemens Building Technologies AG
Publication of CN101796542A publication Critical patent/CN101796542A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T3/00Geometric image transformation in the plane of the image
    • G06T3/40Scaling the whole image or part thereof
    • G06T3/4015Demosaicing, e.g. colour filter array [CFA], Bayer pattern
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/10Image acquisition modality
    • G06T2207/10016Video; Image sequence
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/30Subject of image; Context of image processing
    • G06T2207/30236Traffic on road, railway or crossing

Landscapes

  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Image Processing (AREA)
  • Color Television Systems (AREA)
  • Ultra Sonic Daignosis Equipment (AREA)
  • Editing Of Facsimile Originals (AREA)

Abstract

一种方法包括捕获图像,以及以第一格式来提供代表图像的视频帧数据。第一格式的视频帧数据包括多个像素数据,每个像素的像素数据都包含了单色数据。该方法还包括使用检测块像素与包含单色数据的像素数据的单应关联来产生代表了视频帧数据子集的检测块像素数据,其中检测块中的每个像素的像素数据都包含了多色数据。该方法还包括将检测块提供给图像检测算法。

Description

用于处理图像数据的装置和方法
本申请要求根据2007年7月5日提交的美国临时专利申请60/948,069而享有优先权,其中该申请通过参考被结合进来。
技术领域
本发明主要涉及图像捕获和检测系统,更具体而言涉及的是用于获取图像数据的方法和装置。
背景技术
人们日益希望在交通控制系统中使用车辆检测。对于车辆存在性和/或车辆接近所进行的检测使得交通控制效率提高。在一个简化示例中,如果在交叉路上没有等待信号的车辆,那么对该交叉路来说,交通信号有可能在不确定的时间中都不变成绿色。但是,如果有车辆接近交叉路的交叉口,那么响应于对这种接近所进行的检测,交通信号可发生变化。
过去,用于交通控制的车辆检测使用的是位于路面下方的电感式传感器。汽车进入该电感式传感器附近的区域使得感测到的磁场改变,从而能够检测到车辆。这些系统存在一个缺点,那就是其需要在路面下方或是路面中植入电感式传感器,而这需要相当多的劳力以及交通阻断。
已知的还有基于相机并使用了视频处理的车辆检测系统。一种类型的车辆检测系统在摄像机提供的可用视频帧的选定区域上执行车辆检测。为此目的,摄像机向处理系统提供视频帧信息,并且该视频帧信息通常是以被称为Bayer格式的格式提供的。处理系统将Bayer格式的视频转换成(红-绿-蓝)RGB格式的视频,所述RGB格式的视频则是(或者类似于)大多数数字视频系统使用的格式。
然后,RGB格式的视频被提供给检测子系统,并且可选地被提供给观察设备、例如位于远端的膝上型或便携式计算机。之后,该检测子系统使用单应映射(homographic mapping)来隔离视频帧中的特定的选择区域,以便用于实际检测算法。特别地,车辆检测通常不是在整个视频帧中进行的、而是在隔离区域例如道路或附近特定目标的一部分中进行的。然后,所预期的检测区域被转换成检测块,这些检测块被标准化,以用于检测算法。
由此举例来说,在交叉口或是其附近,所关注的小梯形区域被转换成具有适合该检测算法的大小和方位的矩形。
相应地,所要分析的视频图像的一部分作为检测块被保存。与所关注的区域相对应的视频数据是经由单应映射或弯曲(warping)而被转换成检测块的。由此,检测块代表来自所关注的区域的视频数据。
然后,检测算法使用检测块来操作,以便识别正在移动的目标是否处于所关注的选择区域以内。检测操作包括积分、自相关、确定色团中心、背景处理等等,以便检测正在移动的车辆和/或任何车辆出现。
使用上述技术的算法式车辆检测会耗费大量的计算处理能力。在较大温度范围中通常可用的处理引擎在最大可用处理速度方面是非常有限的。为车辆检测执行必要的视频处理有可能导致此类处理器运行“过热”。
由此需要一种在有限的处理能力预算中提供先进的检测需要的改进型视频处理。
发明内容
所公开的是使用了图像处理的设备和方法,并且至少在一些实施例中,所述设备和方法解决了现有技术中的上述缺陷。
第一实施例是一种包含以下步骤的方法:捕获图像,以及以第一格式来提供代表图像的视频帧数据。第一格式的视频帧数据包括多个像素数据,其中每个像素的像素数据都包含了单色数据。该方法还包括:使用代表了视频帧数据子集的检测块的像素与包含单色数据的像素数据的单应关联来产生该检测块的像素数据,其中检测块中的每个像素的像素数据都包含了多色数据。该方法还包括将检测块提供给图像检测算法。
对本领域普通技术人员来说,通过参考后续详细描述和附图,将更加容易地清楚了解上述实施例以及其他实施例的特征和优点。
附图说明
图1示出包含了至少一个发明实施例的图像处理系统的示意性框图;
图2示出相机和图像帧的典型示意图;
图3示出图3中的图像帧以及相应检测块的二维视图表示;
图4示出马赛克格式的视频帧中的部分402的图示;
图5示出可以用于从马赛克格式的视频帧数据的选择视频块中产生检测块的例示操作集合的流程图;
图6示出可以用于根据本发明的至少一些实施例来产生查找表的例示操作的流程图;以及
图7示出图1中的图像处理系统的例示实施例的更详细的示意性框图。
具体实施方式
图1示出包含了本发明的至少一个实施例的图像处理系统100的框图。该系统100包括视频帧数据源102、车辆检测装置104以及至少一个远程用户界面106。
视频帧数据源102是被配置用于提供具有第一格式的视频帧数据的设备或设备集。第一格式的视频帧数据包括多个像素,其中每个像素都包含了单色数据。例如,视频帧数据源102是使用了高速CCD(电荷耦合器件)或CMOS(互补金属氧化物半导体)光敏成像器阵列作为初始传感器的数码相机或数字摄像机。该阵列根据在成像器阵列内部的特定像素上测得了多大的光强度来输出与单个像素(单个的小图像元素)相对应的数据值。此类设备是众所周知的。
第一格式的视频帧数据可以适当包括马赛克格式的数据。特别地,许多摄像机被配置用于产生马赛克像素数据,有时也将其称为Bayer格式数据。Bayer格式的相机通常包含了位于单色CCD检测器阵列前方的彩色马赛克镜头,该相机传送的是每个元素的亮度值,而不是单个颜色成分。在下面被进一步论述的图7示出了一个使用马赛克镜头相机130的例示实施例。
这种源实际上只针对每个像素传送一种颜色成分,对所传送的每四个像素来说,其中有两个是绿色像素,有一个是蓝色像素,并且有一个是红色像素。结果,绿色频谱的视频信息实际被以50%的分辨率子采样,而红色和蓝色信息中的每个实际被以25%的分辨率子采样。无论哪一种情况,帧数据包含的都是只具有单色信息的多个像素。
为了进一步说明马赛克格式的数据,图4示出了采用单色或马赛克格式的视频帧的一部分402的图示。该部分402分别包括单色的红、蓝和绿像素404、406和408的马赛克。
本发明的实施方式并不局限于图4所示的特定单色马赛克格式。本发明的至少一些实施例是与四种可能的Bayer格式的每一种相兼容的,并且能够很容易与其他那些类似的子采样马赛克图案相适配。
再次回到图1,视频帧数据源102以可操作的方式被耦合,以向视频检测装置104和远程用户界面106中的每个提供第一格式的视频帧数据。
视频检测装置104包括数据处理设备以及能够执行这里描述的图像处理的相关电路。该视频检测装置104被配置用于使用单应映射来从视频帧数据中产生检测块。在本实施例中,检测块代表的是视频帧图像的选择子集,并且通常包含了被预先选定成可能包含了所要检测的车辆的图像的一部分。单应映射(或弯曲)被用于产生重组视图,例如由梯形产生的矩形,以使带角度的视点(points of view)被矫正到有助于检测算法的法线(即垂直)视点。
在可替换的应用中,车辆检测系统可以运用在使用了旋转相机的安全系统或其他监视系统中。在此类情况中,单应映射允许从相同视点来比较和处理来自运动(例如旋转)相机的不同视点。在这个可替换的实施例中,车辆检测系统可以被连接以便从用于一般监视的相机接收视频帧数据,一般监视相机通常被配置用于通过旋转来覆盖更大的区域。
再次参考图1,在本实施例中,视频数据源102通常是固定的图像捕获设备。在这种情况下,单应映射被用于将视频数据的选择部分(以及非标准形状)映射成检测块。检测块具有与检测算法相兼容的大小和形状(方形或矩形)。视频数据的选择部分通常是由用户选择的,并且其通常至少有某些维(大小,形状)与检测块的不相同,并且通常会明显更大。
例如,图2和3借助例子示出如何使用单应映射来产生视频帧图像的选择(并且形状和大小可变的)部分的一致性标准化表示。图2示出了相机202(它适合地被用作图1的视频信息源102)和图像帧204。图像帧204由相机202的二维视场组成。在本示例中,用户在图像帧中定义了两个关注区域206、208。例如,这些关注区域206、208可以包括通向交通交叉口的不同部分的途径。如在图2中可以看出的一样,关注区域206、208处于图像帧204内部的不同位置,具有不同的形状,并且具有不同的大小。
图3示出图像帧204的二维视图表示,关注区域或图像部分206、208以及相应的检测块210、212。单应映射技术被用于将图像部分206、208映射到相似大小和相似地被定位的检测块210、212。然后,未示出的检测算法将会作用于检测块210、212。由此,相同的检测算法可以用于具有唯一大小、形状和方位的多种图像部分。这种单应变形(homographic morphing)技术是已知的。
再次参考图1,即使视频帧数据保留单色格式,车辆检测系统104由此也还是被配置用于执行对从摄像机202接收的每个视频帧的关注图像的单应映射。该车辆检测系统104还被配置用于将输入视频的单色格式像素转换成检测块的多色像素(例如红、绿、蓝)。
为此目的,车辆检测系统104将检测块的每个像素与来自视频帧数据的多个像素的像素数据相关联。检测块的每个像素都与具有不同颜色数据的多个像素的像素数据相关联,由此,检测块的每个像素都具有代表多种颜色的信息。参考图4,举例来说,检测块的单个像素可以包含来自红色像素404、蓝色像素406和绿色像素408中每一种像素的信息。
无论如何,所得到的检测块由此都只包含了来自原始视频帧的很小子集的信息,并且包含了已被转换或者去马赛克(demasaic)成多色格式的像素。
由此,视频检测装置104被配置用于将对应于检测块的原始视频帧数据的一部分(并且仅仅是一部分)的单色格式视频数据转换成多色格式的视频数据。
与现有技术相反,视频检测装置104只执行与选择检测块而不是整个视频帧相对应的视频帧数据部分的去马赛克处理。由于用于去马赛克的插值方案的计算量很大,因此这样做节约了计算能力。
再次参考图1,视频检测装置104还被配置用于在如上所述地产生的一个或多个检测块上执行车辆检测算法。视频块中的车辆检测可以使用本领域已知的多种技术来完成,例如积分、自相关、确定色团中心(center of chromatic mass)、背景处理等等。[请提供关于此事的SCR专利申请引证文献]。
如上所述,远端用户界面106也被配置用于接收的第一格式的视频帧数据。该远端用户界面106适合为通用或专用计算设备。远端用户界面106在视频帧数据的整个图像帧上执行去马赛克处理(不同颜色的单色像素数据到多色像素数据之间的转换),并且在视频屏幕或显示器上显示帧数据。在下文中结合图7提供了关于通过用户界面106的去马赛克处理的更多细节。
由此,上述图像处理系统100提供了可以用于观察(借助用户界面106)以及车辆检测(借助车辆检测装置104)两方面的数据,同时减少了车辆检测处理电路中的计算负载。
图7示出图1中的图像处理系统100的例示实施例的更详细示意性框图。
在图7的实施例中,视频帧数据源102是使用了高速单色CCD检测器阵列132的数码相机130或数字摄像机。该阵列132根据在成像器阵列132内部的特定像素上测得了多大光强度来输出与单个像素(单个小图画元素)相对应的数据值。相机130通常也包括位于阵列132前方的彩色马赛克镜头(color mosaic lens)134。正如本领域所知道的那样,彩色马赛克镜头134对光线进行过滤,使得每个像素的亮度值代表特定的单个颜色成分的强度。相机130的输出可以适合地为如图4所示的Bayer格式数据,并且其在美国专利3,971,065中被概括地描述,其中该专利通过参考被结合进来。与图1一样,相机130的输出数据被称为第一格式的视频帧数据。每一组视频帧数据都是由单个视频帧构成的,所述单个视频帧是静止的图像。
相机130以可操作的方式被耦合,以向视频检测装置104和远端用户界面106中的每个提供第一格式的视频帧数据。
视频检测装置104包括处理电路138,该处理电路138包括至少一个存储器136以及能够执行这里描述的步骤140、142、144和146的关联电路。处理电路138被配置用于接收第一格式的视频帧数据,并且产生(步骤140)代表视频帧数据子集的检测块像素数据,其中在所述视频帧数据的子集中要执行图像检测。为了产生检测块,处理电路138使用了查找表148(存储在存储器136中)来将单色视频帧数据中的多个像素的像素数据与检测块的每个像素相关联。
所产生的检测块由此包括代表了输入视频图像数据的选择部分的像素数据。所产生的检测块的每个像素的像素数据具有多个颜色成分。如下所述的图5提供了执行上述步骤140的功能的例示步骤集合。
处理电路138还可被操作来执行图像检测。特别地,在步骤142中,处理电路在以上述方式产生的一个或多个检测块上执行车辆检测算法。视频块中的车辆检测可以使用本领域已知的多种技术来完成,例如积分、自相关、确定色团中心、背景处理等等。这样的检测技术是变化的,并且是本领域普通技术人员已知的。
此后,在步骤144,处理电路138执行基于图像检测的控制。作为例子,交通信号操作可以作为在步骤140产生的一个或多个检测块中检测车辆存在性的结果而改变。在另一个示例中,在一个或多个被监视区域中没有出现运动,则有可能导致交通信号操作改变。基于被检测的车辆存在性或运动的各种交通控制方法是已知的。
为了执行上述步骤140、142和144,尤其是步骤140,有必要产生查找表148来将选择用户图像部分映射到检测器块。在本实施例中,处理电路138可以被操作来产生用于来生成这种检测块的查找表148。特别地,处理电路138适合接收用于识别图像选择部分(例如图2中的图像部分206、208)的输入,其中在所述图像选择部分中要经由步骤142进行图像检测。该图像部分可以具有方形、矩形、梯形、平行四边形或其他形状,并且可以具有各种大小以及相对于视频帧的位置。该输入可以从用户界面106被接收。
然后,处理电路138使用单应映射等等来创建查找表,该查找表将检测块的每个像素关联于与用户选定的图像部分相对应的输入视频帧的多个单色像素。优选地,所述多个单色像素包含了输入视频帧的不同颜色像素,从而,检测块的每个像素都可以具有多个颜色信息。在下文中进一步论述的图6示出了可以生成这种查找表148的例示操作。
再次参考图7,如上所述,远端用户界面106还被配置用于接收第一格式的视频帧数据。在本实施例中,该远端用户界面106是以可操作的方式耦合到相机130和处理电路138两者的便携式(例如膝上型)计算机。该计算机106被配置和/或被编程用来执行这里描述的步骤。计算机106主要用于设置和维护相机130和/或处理电路138,由此没有必要永久地附着于系统100。
如上文中结合图1所示,远端用户界面/计算机106被配置用于在视频帧数据的整个图像帧上执行去马赛克处理(在不同颜色的单色像素数据到多色像素数据之间转换),并且在视频屏幕或显示器上显示帧数据。计算机106上的显示帧速率可以适合如每分钟100个图像一样低,这允许在正常的个人计算设备中执行去马赛克处理。
包括最近邻插值在内的各种去马赛克操作被称为线性插值、双线性插值、三次样条插值或是不同类型的样条插值,通常,越复杂的差值产生越好的视觉质量。在一些实施例中,计算机106可以被配置用于从多个去马赛克操作中以及帧速率中进行选择,以便可以有选择地调整帧速率、精度和复杂度、以及用户界面/计算机106上的可用计算机处理能力之间的平衡。
如上所述,在已配置的系统的正常操作过程中已经产生并且在存储器136中存储了用于一个或多个用户选定图像部分的查找表148。该正常操作是由如上所述的步骤140、142和144构成的。
关于步骤140,图5更详细地示出了用于从采用马赛克格式的视频帧数据的选择视频块中产生检测块的操作。
在步骤502,从视频帧数据源102接收第一格式的视频帧数据。如上所述,视频帧数据采用的是单色(马赛克)格式。
步骤504-510代表的是for-next循环,该循环标引(index)了检测块的每个像素。由此,在步骤504,检测块的下一个像素将被标引。在下面将这个像素称为当前像素。
在步骤506,当前像素在检测块内部的位置被标引到查找表148。如上所述,查找表148将检测块的每个像素与视频帧数据内部的多个像素相关联。优选地,所述多个像素包括马赛克化的视频帧数据的至少一个绿色像素、至少一个蓝色像素以及至少一个红色像素。在步骤508,从视频帧数据中获取与当前像素相关联的视频帧数据的像素的像素数据,并且将其作为检测块的当前像素的像素数据来存储。
在步骤510,确定图像块中是否还有附加像素。如果是的话,则在步骤504中识别下一个像素,并且相应地重复执行该处理。如果不是的话,则整个检测块都已被创建,并且执行步骤512。在步骤512,检测块被存储到未示出的存储器中,以便供图像检测操作142使用。
上述操作代表了超越现有技术的改进,其中检测装置不必对整个视频帧进行去马赛克化。实际上,只有视频帧数据中的选择部分被去马赛克化。在本实施例中,查找表148被用于从马赛克视频帧数据的不同的彩色像素中产生检测块的每个像素。该查找表148还完成单应映射,这是因为与检测块的像素相对应的视频帧数据像素的位置选择是借助单应映射来识别的。因此,有必要开发适当的查找表来执行上述操作。
相应地,图6示出了可以用来开发用于执行图5步骤506和图7步骤140的查找表的例示操作集合。特别地,图6详细示出了执行图7的步骤146的操作集合。此外,下文提供的软件表包含了用于开发查找表的代码。在本实施例中,查找表148是由检测装置104的处理电路138产生的。在其他实施例中,用户界面106中的处理设备可以执行图6的步骤,以便产生查找表148,然后,该查找表将被转移并存储在存储器148中。但是在本实施例中,图6的操作由图像检测装置104的处理电路138执行。
在步骤602,处理电路138接收定义了将被映射到检测块的视频帧图像块的输入。这种视频帧图像块构成了将要检测和/或监视车辆位置或存在性的相机的像场的一部分。例如,处理电路138可以从用户界面106接收用于识别图像部分206和/或208的信息(参见图2和3),以便进行监视。该处理电路138以任何适当的方式、例如通过识别图像部分的拐角像素来接收用于来识别选择图像部分的信息。
应该指出的是,用户可以定义多个图像部分例如图2和3的部分206和208来进行监视。图6的步骤604-616针对所识别的每个图像部分单独地执行。由此举例来说,如果图2和3的图像部分206和208是由用户选择的,则执行步骤604-616来预备用于部分206的查找表,并且同样执行步骤604-616来预备用于部分208的单独的查找表。
作为初始步骤604,为选定的图像部分和检测块来求解单应映射等式。单应映射等式将检测块(例如块210)与图像帧的一部分(例如图3的部分206)相关联。该检测块和选定的图像部分通常具有不同的大小和/或形状。选定的图像部分还被嵌入到较大的视频帧(例如图3的帧204)内部,而检测块则不会被嵌入。在这种情况下,求解这种单应等式涉及八个未知量和八个等式。这种单应等式及其解法是已知的,并且在附带的软件代码中提供了一个示例。
所得到的单应等式有助于提供从检测块中的位置到视频图像数据中的位置的变换。
在步骤606-614,使用来自步骤604的单应解来逐像素地构成查找表148。
在步骤606,标引检测块中的下一个像素。在下面,该像素被称为当前像素。在步骤608,处理电路138使用来自步骤604的单应解来将当前像素与选定图像部分内部的视频帧的像素相关联。由此举例来说,如果当前像素是检测块中的左上角,那么单应解604有可能会将当前像素与选定图像部分的左上角相关联。
结果,在步骤608中使用该单应解来识别与当前像素相对应的视频帧像素(在选定的图像部分的内部)。所识别的这个像素被称为对应像素。在每个视频帧数据集合中,该对应像素都将包含具有单色信息的像素数据。
在步骤610,处理电路138识别和选择被配置具有其他单个颜色的相邻像素。例如,如果对应像素是红色像素,那么处理器会在步骤610中识别相邻的蓝色和绿色像素。因此,对应像素和相邻像素应该包含关于输出视频图像数据格式的所有像素颜色的信息。
优选地,两个相邻像素被选定成它们包含了至少一个来自不同水平线的像素,使得对应像素和两个相邻像素形成群组。例如,参考图4,如果在步骤608中确定对应像素是绿色像素408,则处理器可以适当地将红色像素404和蓝色像素406选定成相邻像素。应该指出的是,在Bayer格式的马赛克化数据(例如参见图4)中,来自至少两行的像素数据是必要的,以获得来自所有可用像素颜色的表示。
在步骤612,创建用于当前像素的表格条目。该表格条目识别在步骤608中确定的对应像素以及在步骤610中确定的相邻像素的位置。在步骤612之后,已经至少为当前像素构成了查找表148。在本实施例中,查找表148识别了用于形成检测块当前像素的输入视频帧数据的三个单色像素。
在步骤614,处理器确定是否必须为检测块中的更多像素确定表格条目。如果是的话,则处理器返回到步骤606,以便处理检测块中的下一个像素。然而如果不是的话,则处理器继续执行步骤616。
在步骤616,处理器完成查找表创建操作。现在,该查找表148提供了从具有第一组维度(dimension)的马赛克化图像块到具有第二组维度的去马赛克化图像块(检测块)的变换,其中所述维度包括优选地方形或矩形形状。
表I示出了用于产生查找表148的例示软件代码。表II示出了通过使用查找表148来产生检测块的软件代码。
表I
typedef struct pixel_idx6{          //six-dimensional lookup table
         point red;
         point green;
         point blue;
}pixel_idx6;
typedef struct pixel_idx3{          //New version of the lookup table
         unsigned int redidx;
         unsigned int greenidx;
         unsigned int blueidx;
}pixel_idx3;
typedef enum{REDPIX=0,GREEN1PIX=1,GREEN2PIX=2,BLUEPIX=3}BAYER_RGB;
//--------------------------------------------------------------------------
//int Set(tl,bl,br,tr,w=0,h=0)-Set-Setup a new lane.
//Inputs:
//   CPoint tl-Top Left point with respect to rectified rectangle
//   CPoint bl-Bottom Left point with respect to rectified rectangle
//   CPoint br-Bottom Right point with respect to rectified rectangle
//   CPoint tr-top Right point with respect to rectified rectangle
//      w         -user defined width.Set to 0 to automatically defined
//      h         -user defined height.Set to 0 to automatically defined
//
//Processing:
//1.    Default width is the average of bottom/bottom width.
//      Default height is the average left/right height.
//2.    Homography is computed and stored.
//
//Return Value:
//      0-OK
//  -1 -Could not compute homography(singular matrix).
//--------------------------------------------------------------------------
int Clane::Set(CPoint tl,CPoint bl,CPoint br,CPoint tr,unsigned w,unsigned h)
{
 CDoc*pDoc=GetDocument();
 m_TopLeft=tl;
 m_TopRight=tr;
 m_BotLeft=bl;
 m_BotRight=br;
 m_Width=(w==0?(unsigned)(((br.x-bl.x)+(tr.x-tl.x))/2):w);
 m_Height=(h==0?(unsigned)(((bl.y-tl.y)+(br.y-tr.y))/2):h);
 if(ComputeHomography()==-1)return-1;
 //Found homography,compute lookup table
 if(m_LookUpTable!=NULL){
   delete[]m_LookUpTable;
   m_LookUpTable=NULL;  //
   printf(″RGB index table deleted\n″);
}
 if(dmLookupTable!=NULL){
   delete[]dmLookupTable;
   dmLookupTable=NULL;//
   printf(″Bayer index table deleted\n″);
}
 int colorid=pDoc->m_colorid;
 //create both demosaicing tables for the present
 try {
    m_LookUpTable=new CPointS[RECT_WIDTH*RECT_HEIGHT];//
}
 catch(...){
    m_LookUpTable=NULL;
    return-1;
}
 printf(″Creating RGB index table\n″);
 try {
   dmLookupTable=new pixel_idx3[RECT_WIDTH*RECT_HEIGHT];
}
 catch(...){
   dmLookupTable=NULL;
   return-1;
}
 printf(″Creating Bayer index table\n″);
 unsigned pixNum=0;
 for(unsigned y=0;y<RECT_HEIGHT;y++){
    for(unsigned x=0;x<RECT_WIDTH;x++,pixNum++){
     float denom=x*m_Hom[6]+y*m_Hom[7]+1;
     float nx=(x*m_Hom[0]+y*m_Hom[1]+m_Hom[2])/denom+0.5f;
     float ny=(x*m_Hom[3]+y*m_Hom[4]+m_Hom[5])/denom+0.5f;
     short ix=(short)nx;
     short iy=(short)ny;
     if(ix<0)ix=0;
     if(iy<0)iy=0;
     if(ix>=(short)pDoc->m_camImgWidth)ix=(short)pDoc->m_camImgWidth-1;
     if(iy>=(short)pDoc->m_camImgHeight)iy=(short)pDoc->m_camImgHeight-1;
#if0
     if(colorid!=LUCAM_COLOR_FORMAT_BAYER_RAW){
       m_LookUpTable[y*RECT_WIDTH+x]=CPointS(ix,iy);
}else{
       WarpIndices(dmLookupTable[y*RECT_WIDTH+x],ix,iy);
}
#else
     m_LookUpTable[y*RECT_WIDTH+x]=CPointS(ix,iy);
     WarpIndices(dmLookupTable[y*RECT_WIDTH+x],ix,iy);
#endif
}
}
 printf(″%s Demosaicing table built correctly!\n″,(colorid!=
LUCAM_COLOR_FORMAT_BAYER_RAW)?″RGB″:″Bayer″);
 return(int)pixNum;
}
//--------------------------------------------------------------------------
//int ComputeHomography()-Compute plane Homography.
//Input parameters:
//       none-use class members only.
//
//Processing:
//The functions sets up a 8x8 linear equation,solve for homography
//and stores.The homography is computed from the rectified rectangle
//*backward*to the trapezoid to allow smooth warping using interpolation.
//
//Return Value:
//       0-OK
//  -1 - Could not compute homography(singular matrix).
//--------------------------------------------------------------------------
int Clane::ComputeHomography()
{
 int i;
 float X[4]={0,0,m_Width,m_Width};//rectified rectangle x coordinates counter clockwise
 float Y[4]={0,m_Height,m_Height,0};//rectified rectable y coordinate
 float Xtag[4]={m_TopLeft.x,m_BotLeft.x,m_BotRight.x,m_TopRight.x};//image region x
coordinates
 float Ytag[4]={m_TopLeft.y,m_BotLeft.y,m_BotRight.y,m_TopRight.y };//image region y
coordinates
 //set up equation system
 float M[8][8];
 float B[8];
 float*H=m_Hom;
 memset(M,0,sizeof(M));
 memset(B,0,sizeof(B));
 memset(H,0,sizeof(H));
 for(i=0;i<4;i++){
  M[2*i][0]=X[i];
  M[2*i][1]=Y[i];
  M[2*i][2]=1;
M[2*i][3]=0;
M[2*i][4]=0;
M[2*i][5]=0;
M[2*i][6]=-X[i]*Xtag[i];
M[2*i][7]=-Y[i]*Xtag[i];
M[2*i+1][0]=0;
M[2*i+1][1]=0;
M[2*i+1][2]=0;
M[2*i+1][3]=X[i];
M[2*i+1][4]=Y[i];
M[2*i+1][5]=1;
M[2*i+1][6]=-X[i]*Ytag[i];
M[2*i+1][7]=-Y[i]*Ytag[i];
B[2*i]=Xtag[i];
  B[2*i+1]=Ytag[i];
}
 return solve_equations(&M[0][0],B,H,8);
}
//=================================================
//solve_equations-solve system
//=================================================
int solve_equations(float*mat,float*vect,float*var,int n)
{
        inti,j,k;
        float fact,temp;
        assert(n>=2);
        if(n==2){
                return solve_2_equations(mat,vect,var);
        }
        if(n==3){
                return solve_3_equations(mat,vect,var);
        }
        for(i=0;i<(n-1);i++){
               if(mat[i*n+i]==0){
                       for(j=i;((mat[j*n+i]==0)&&(j<n));j++);
                       if(j==n){
                               return-1;
                       }
                       for(k=0;k<n;k++){
                              temp=mat[i*n+k];
                              mat[i*n+k]=mat[j*n+k];
                              mat[j*n+k]=temp;
                       }
                       temp=vect[i];
                       vect[i]=vect[j];
                       vect[j]=temp;
               }
               for(j=i+1;j<n;j++){
                          fact=mat[j*n+i]/mat[i*n+i];
                          for(k=0;k<n;k++)
                                    mat[j*n+k]-=(fact*mat[i*n+k]);
                          vect[j]-=(fact*vect[i]);
                }
        }
        for(i=(n-1);i>0;i--)
                for(j=0;j<i;j++){
                if(mat[i*n+i]==0.0)
                          fact=mat[j*n+i]/EPSILON_S;
                else
                          fact=mat[j*n+i]/mat[i*n+i];
                for(k=0;k<n;k++)
                          mat[j*n+k]-=(fact*mat[i*n+k]);
                vect[j]-=(fact*vect[i]);
                }
                for(i=0;i<n;i++)
                        if(mat[i*n+i]==0.0)
                                var[i]=vect[i]/EPSILON_S;
                else
                        var[i]=vect[i]/mat[i*n+i];
                return 0;
}
//--------------------------------------------------------------------------
//void WarpIndices(&curPix,ix,iy)-Warp the already-calculated indices
//              of the homographic mapping table to index into
//              the raw Bayer frame image directly and extract
//              the color coefficients for each pixelin the
//              detector block
//Input parameters:
//
//fRgbImg&dst-destination image
//  &curPix-pointer to the 3-element entry in the mapping table
//        that corresponds to this pixel of the detector block
//  ix-x index into the input frame,before warping
//  iy-y index into the input frame,before warping
//
//No value returned via return
//Six coefficients are calculated and stored in the mapping table
//
//--------------------------------------------------------------------------
void Clane::WarpIndices(pixel_idx3 &curPix,int ix,int iy){
        unsigned int width,topleftpix;
        bool firstLine,firstCol;
        bool blueLine,greenPix;
        CDoc*pDoc=GetDocument();
        width=pDoc->m_camImgWidth;
        topleftpix=pDoc->m_topleftpix;
        firstLine=((ix<width)&&(iy==0))?1:0;
     firstCol=(ix%width)?0:1;
     blueLine=green Pix=0;
     if((topleftpix==GREEN2PIX)||(topleftpix==BLUEPIX))
            blueLine=1;
     if((topleftpix==GREEN1PIX)||(topleftpix==GREEN2PIX))
            greenPix=1;
     if(iy&0x01){
            blueLine=(blueLine?0:1);
            greenPix=(greenPix?0:1);
//?blueLine=!blueLine;
//?greenPix=!greenPix;
     }
     if(ix&0x01){
            greenPix=(greenPix?0:1);
     }
     if(firstLine&&firstCol){
              if(blueLine){
                      if(greenPix){
                              curPix.redidx=width;
                              curPix.greenidx=0;
                              curPix.blueidx=1;
                      }
                      else{
                         -    curPix.redidx=width+1;
                              curPix.greenidx=1;
                              curPix.blueidx=0;
                      }
               }
               else{
                      if(greenPix){
                              curPix.redidx=1;
                              curPix.greenidx=0;
                              curPix.blueidx=width;
                      }
                      else{
                              curPix.redidx=0;
                              curPix.greenidx=1;
                              curPix.blueidx=width+1;
                      }
               }
     }
     else if(firstLine){
               if(blueLine){
                       if(greenPix){
                              curPix.redidx=width+ix;
                              curPix.greenidx=ix;
                              curPix.blueidx=ix-1;
                      }
                      else{
                              curPix.redidx=width+ix-1;
                              curPix.greenidx=ix-1;
                              curPix.blueidx=ix;
                   }
          }
          else{
                   if(greenPix){
                           curPix.redidx=ix-1;
                           curPix.greenidx=ix;
                           curPix.blueidx=width+ix;
                   }
                   else{
                           curPix.redidx=ix;
                           curPix.greenidx=ix-1;
                           curPix.blueidx=width+ix-1;
                   }
          }
}
else if(firstCol){
          if(blueLine){
                   if(greenPix){
                           curPix.redidx=iy*width-width;
                           curPix.greenidx=iy*width;
                           curPix.blueidx=iy*width+1;
                   }
                   else{
                           curPix.redidx=iy*width+1-width;
                           curPix.greenidx=iy*width+1;
                           curPix.blueidx=iy*width;
                   }
          }
          else{
                   if(greenPix){
                           curPix.redidx=iy*width+1;
                           curPix.greenidx=iy*width;
                           curPix.blueidx=iy*width-width;
                   }
                   else{
                           curPix.redidx=iy*width;
                           curPix.greenidx=iy*width+1;
                           curPix.blueidx=iy*width+1-width;
                   }
          }
}
else{       //by far the most likely situation
          if(blueLine){
                   if(greenPix){
                           curPix.redidx=iy*width+ix-width;
                           curPix.greenidx=iy*width+ix;
                           curPix.blueidx=iy*width+ix-1;
                   }
                   else{
                           curPix.redidx=iy*width+ix-width-1;
                           curPix.greenidx=iy*width+ix-1;
                           curPix.blueidx=iy*width+ix;
                   }
          }
          else{
                   if(greenPix){
                               curPix.redidx=iy*width+ix-1;
                               curPix.greenidx=iy*width+ix;
                               curPix.blueidx=iy*width+ix-width;
                       }
                       else{
                               curPix.redidx=iy*width+ix;
                               curPix.greenidx=iy*width+ix-1;
                               curPix.blueidx=iy*width+ix-1-width;
                       }
               }
       }
}
TableII
//--------------------------------------------------------------------------
//void RectifyBayer(src,dst)-Rectify trapezoid into a rectangle
//               using homography warp
//Input parameters:
//   bMonoImg&src      -source image
//   fRgbImg&dst     -destination image
//
//Processing:
//The function uses backward homography to rectify a trapezoid from
//  the source image to the destination image.
//This version uses a single index three-element lookup table to do a color
//  component reference into the raw Bayer format video frame rather than
//  the earlier two-dimensional pixel lookup into the converted RGB frame
//The conversion of the pixels from integer to floating-point values
//  also happens here
//
//Return Value:
//none.
//
//Written by:David Horton,Siemens Energy & Automation
//       Intelligent Traffic Systems,Austin,Texas
//       2/14/2007&7/13/2007
//
//--------------------------------------------------------------------------
void Clane::RectifyBayer(bMohoImg &src,fRgbImg &dst)
{
         if(dmLookupTable==NULL){
                printf(″Create new zone-[%d,%d][%d,%d][%d,%d][%d,%d]\n″,m_TopLeft.x,
m_TopLeft.y,
                           m_BotLeft.x,m_BotLeft.y,m_BotRight.x,m_BotRight.y,m_TopRight.x,
m_TopRight.y);
                int ret=Set(m_TopLeft,m_BotLeft,m_BotRight,m_TopRight,0,0);
                printf(″CLane::Set returned%d\n″,ret);
   //this creates a new region defined for the current colorid
                assert(ret>=0);
        }
        unsigned int size=dst,GetHeight()*dst.GetWidth();
  //this is faster than size=dst.GetSize()because GetSize()calls SetOrigin()
         unsigned int i;
         const unsigned char*k=src.GetData();
#ifndef R
#defineR 0
#define clane_changed_flags 1
#endif
#ifndef G
#define G 1
#define clane_changed_flags 1
#endif
#ifndef B
#define B 2
#define clane_changed_flags 1
#endif
//Extract correct color component
  //information from the raw Bayer mosaic
  //R.,G,and B can be in any order for correct operation
  //and the existing ordering of both are chosen to
  //optimize r&w cache operation
  //source code retained here in case these should ever change
  for(i=0;i<size;i++){
     dst.Pix(i)[R]=(float)*(k+dmLookupTable[i].redidx);
     dst.Pix(i)[G]=(float)*(k+dmLookupTable[i].greenidx);
     dst.Pix(i)[B]=(float)*(k+dmLookupTable[i].blueidx);
         }
}
应该理解的是,上述实施例仅仅是例示性的,并且本领域普通技术人员很容易设计出结合了本发明的原理的自己的实施方式和修改,这些实施方式和修改全都落入本发明的实质和范围以内。

Claims (14)

1.一种方法,包括:
a)捕获图像;
b)以第一格式来提供代表该图像的视频帧数据,其中所述视频帧数据包含多个像素数据,其中每个像素的像素数据包含单色数据;
c)使用代表所述视频帧数据的子集的检测块的像素到包含单色数据的像素数据的单应关联来产生该检测块的像素数据,其中该检测块的每个像素的像素数据都包含多色数据;
d)将该检测块提供给图像检测算法。
2.如权利要求1所述的方法,其中步骤c)还包括:将该检测块的每个像素与代表多种颜色的具有单色数据的多个像素的像素数据相关联。
3.如权利要求1所述的方法,其中步骤c)还包括:将该检测块的每个像素与视频帧数据子集的三个相邻像素的像素数据相关联。
4.如权利要求1所述的方法,其中步骤d)还包括:提供该检测块,使得每个像素包括红色、绿色和蓝色数据。
5.权利要求1的方法,还包括:
e)将第一格式的视频帧数据提供给计算设备;
f)使用该计算设备来对第一格式的视频帧数据的帧进行去马赛克,以便产生去马赛克的帧视频数据。
6.如权利要求1所述的方法,其中步骤a)还包括:使用采用了马赛克镜头的数码相机。
7.一种方法,包括:
a)产生在具有第一组维度的图像数据的检测块的每个像素与视频帧的多个像素之间的关联,所述视频帧的所述多个像素定义了具有第二组维度的图像,其中所述多个像素包括少于该视频帧中全部像素的像素;
b)捕获图像;
c)以第一格式提供代表该图像的视频帧数据,其中该视频帧数据包含了多个像素数据,每个像素的像素数据都包含单色数据;
d)使用像素数据和所产生的关联来从视频帧数据子集中产生该检测块的去马赛克像素数据;
e)将去马赛克的检测块提供给车辆检测算法。
8.如权利要求7所述的方法,其中步骤a)还包括:
a1)求解单应等式,以将该检测块的第一像素与该视频帧的第一像素相关联,其中该第一像素与第一颜色相关联;
a2)将该检测块的第一像素与该视频帧的至少第二像素相关联,其中所述第二像素与第二颜色相关联;
9.如权利要求8所述的方法,其中步骤a2)包括:将该检测块的第一像素与第二像素相关联,其中该第二像素邻接于该视频帧的第一像素。
10.如权利要求8所述的方法,还包括:
a3)将该检测块的第一像素与该视频帧的至少第三像素相关联,其中所述第三像素关联于第三颜色。
11.一种装置,包括:
相机装置,它被配置用于捕获图像并且以第一格式来提供代表该图像的视频帧数据,其中该视频帧数据包含了多个像素数据,每个像素的像素数据包含单色数据;
处理电路,它被配置用于:
利用代表视频帧数据子集的检测块的像素到包含单色数据的像素数据的单应关联来产生该检测块的像素数据,其中该检测块的每个像素的像素数据都包含多色数据;
将该检测块提供给图像检测算法。
12.如权利要求11所述的装置,其中该相机装置还包括CCD相机和马赛克镜头。
13.如权利要求11所述的装置,其中该处理电路还被配置用于将该检测块的每个像素与具有单色数据的代表多个颜色的多个像素的像素数据相关联。
14.如权利要求11所述的装置,其中该处理电路还被配置用于将该检测块的每个像素与该视频帧数据子集的三个相邻像素的像素数据相关联。
CN200880105809A 2007-07-05 2008-07-07 用于处理图像数据的装置和方法 Pending CN101796542A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US94806907P 2007-07-05 2007-07-05
US60/948,069 2007-07-05
PCT/US2008/008325 WO2009009024A2 (en) 2007-07-05 2008-07-07 Arrangement and method for procesing image data

Publications (1)

Publication Number Publication Date
CN101796542A true CN101796542A (zh) 2010-08-04

Family

ID=40042737

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200880105809A Pending CN101796542A (zh) 2007-07-05 2008-07-07 用于处理图像数据的装置和方法

Country Status (7)

Country Link
US (1) US20090015713A1 (zh)
EP (1) EP2176829B1 (zh)
CN (1) CN101796542A (zh)
AT (1) ATE490519T1 (zh)
DE (1) DE602008003837D1 (zh)
ES (1) ES2357371T3 (zh)
WO (1) WO2009009024A2 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108388344A (zh) * 2011-12-30 2018-08-10 英特尔公司 电子设备的用户界面
CN110322405A (zh) * 2019-07-16 2019-10-11 广东工业大学 一种基于自编码器的视频去马赛克方法及相关装置

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015506720A (ja) * 2011-10-20 2015-03-05 コーニンクレッカ フィリップス エヌ ヴェ リアルタイムの内蔵の機械機能を評価するための形状検出する装置
US8817179B2 (en) * 2013-01-08 2014-08-26 Microsoft Corporation Chroma frame conversion for the video codec
WO2016018936A1 (en) 2014-07-28 2016-02-04 Econolite Group, Inc. Self-configuring traffic signal controller

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040201721A1 (en) * 2001-08-23 2004-10-14 Izhak Baharav System and method for concurrently demosaicing and resizing raw data images
CN1585962A (zh) * 2001-11-05 2005-02-23 皇家飞利浦电子股份有限公司 来自点匹配的单应性传送
CN1799057A (zh) * 2003-04-29 2006-07-05 微软公司 用于生成高动态范围视频的系统和过程

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6404918B1 (en) * 1999-04-30 2002-06-11 Hewlett-Packard Company Image demosaicing method utilizing directional smoothing
JP2004198211A (ja) * 2002-12-18 2004-07-15 Aisin Seiki Co Ltd 移動体周辺監視装置
US7884849B2 (en) * 2005-09-26 2011-02-08 Objectvideo, Inc. Video surveillance system with omni-directional camera

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040201721A1 (en) * 2001-08-23 2004-10-14 Izhak Baharav System and method for concurrently demosaicing and resizing raw data images
CN1585962A (zh) * 2001-11-05 2005-02-23 皇家飞利浦电子股份有限公司 来自点匹配的单应性传送
CN1799057A (zh) * 2003-04-29 2006-07-05 微软公司 用于生成高动态范围视频的系统和过程

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
DAVID BEYMER 等: "A Real-time Computer Vision System for Measuring Traffic Parameters", 《COMPUTER VISION AND PATTERN RECOGNITION, 1997. PROCEEDINGS., 1997 IEEE COMPUTER SOCIETY CONFERENCE ON》 *
RASTISLAV LUKAC 等: "SINGLE-SENSOR IMAGE COMPRESSION FROM THE END-USER"S PERSPECTIVE", 《ELECTRICAL AND COMPUTER ENGINEERING, CANADIAN CONFERENCE ON, IEEE, PI》 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108388344A (zh) * 2011-12-30 2018-08-10 英特尔公司 电子设备的用户界面
US11064106B2 (en) 2011-12-30 2021-07-13 Intel Corporation User interfaces for electronic devices
US11616904B2 (en) 2011-12-30 2023-03-28 Intel Corporation User interfaces for electronic devices
CN110322405A (zh) * 2019-07-16 2019-10-11 广东工业大学 一种基于自编码器的视频去马赛克方法及相关装置

Also Published As

Publication number Publication date
EP2176829B1 (en) 2010-12-01
WO2009009024A2 (en) 2009-01-15
EP2176829A2 (en) 2010-04-21
US20090015713A1 (en) 2009-01-15
DE602008003837D1 (de) 2011-01-13
ES2357371T3 (es) 2011-04-25
ATE490519T1 (de) 2010-12-15
WO2009009024A3 (en) 2009-02-26

Similar Documents

Publication Publication Date Title
TWI459324B (zh) 修改色彩及全色通道彩色濾光片陣列影像
US7024054B2 (en) Method and system for generating a foreground mask for a composite image
US6493029B1 (en) Image restoration method and associated apparatus
CN102378015B (zh) 使用亮度和色度传感器的图像捕获
US6421084B1 (en) Method for interpolating a full color image from a single sensor using multiple threshold-based gradients
TWI430184B (zh) 結合全色像素之邊緣映射
US11656722B1 (en) Method and apparatus for creating an adaptive bayer pattern
CN103562933B (zh) 处理图像的方法和设备
US11587259B2 (en) Fixed pattern calibration for multi-view stitching
CN101796542A (zh) 用于处理图像数据的装置和方法
CN105578006B (zh) 成像方法、成像装置及电子装置
CN101103374A (zh) 稀疏分布的彩色数字图像的噪声清除
JP2008015706A (ja) 画像処理装置
CN108805807A (zh) 环景图像的拼接方法及其系统
CN113436130B (zh) 一种非结构光场智能感知系统与装置
US20080002909A1 (en) Reconstructing Blurred High Resolution Images
US6970608B1 (en) Method for obtaining high-resolution performance from a single-chip color image sensor
CN100369454C (zh) 二维影像色彩信息重建方法
CN107517367B (zh) 拜尔域图像插值方法、装置、图像处理芯片及存储装置
Rebiere et al. Color Pixel Reconstruction for a Monolithic RGB-Z CMOS Imager
Pavethra et al. Deep Learning approaches for Image Dehazing
JP3711401B2 (ja) 撮像装置及びカラー撮像信号の処理方法
JP4374726B2 (ja) 撮影装置、及び記憶媒体
JP2005136497A (ja) 画像処理方法、画像処理装置
JP2022085643A (ja) 画像処理装置、画像処理方法及びプログラム

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20100804